当前位置: 代码迷 >> 综合 >> 【一】生成CA根证书、公钥、私钥指令(数字证书)
  详细解决方案

【一】生成CA根证书、公钥、私钥指令(数字证书)

热度:61   发布时间:2023-12-18 15:31:45.0

一、生成CA根证书

生成 CA 私钥:openssl genrsa -out ca.key 1024

因为是自签名,省略生成 证书签名请求csr 的过程,直接执行以下命令生成CA证书openssl req -new -x509 -days 365 -key ca.key -out ca.crt

注:-days 365 指定有效期,

查看证书有效期openssl x509 -in server.crt -noout -dates

二、每个证书持有人(Client、Server)都有一对公钥、私钥

Server端
(1)生成 服务器端 私钥:openssl genrsa -out server.key 1024

(2)利用 服务器端 私钥导出公钥:openssl rsa -in server.key -pubout -out server.pub.key用不上,可以不执行

Client端
(1)生成 客户端 私钥:openssl genrsa -out client.key 1024

(2)生成 携带密码的客户端 私钥,用-des3加密:openssl genrsa -des3 -out client.key 1024

注:生成私钥可以指定私钥密码

(3)利用 客户端 私钥导出公钥:openssl rsa -in client.key -pubout -out client.pub.key用不上,可以不执行

三、使用自签名的CA根证书签发Client、Server的数字证书

Server端
(1)向 CA 机构申请签名证书,在申请签名证书之前依然是创建自己的 CSR(证书签名请求) 文件:openssl req -new -key server.key -out server.csr -days 365

(2)向自己的 CA 机构申请证书,签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的数字证书:openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt -days 365

Client端
(1)生成证书签名请求client.csr:openssl req -new -key client.key -out client.csr -days 365

(2)对上一步的 证书签名请求 进行签名,颁发一个带有CA签名的数字证书:openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt -days 365

查看证书信息:

openssl x509 -in server.crt -noout -text
openssl x509 -in client.crt -noout -text
openssl x509 -in CA.crt -noout -text查看client证书中的公钥信息:
openssl x509 -in client.crt -pubkey查看server证书中的公钥信息:
openssl x509 -in server.crt -pubkey

生成客户端证书安装包:
将客户端证书文件client.crt和客户端证书密钥文件client.key,合并成客户端证书安装包client.pfx
(使用server.crt、server.key也是一样的,只要是服务器使用的CA证书签发的都可以)

openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pfx

生成后点击client.pfx,安装到浏览器证书中(一直点击“下一步”)这样在浏览器中就可以https访问服务器

生成自定义证书(证书+私钥 格式):
ca.crt文件和ca.key可以合到一个文件里面,把2个文件合成了一个ca.crt.key.pem文件(直接拷贝过去就行了)
即手动生成了一个自定义证书(Windows下在拷贝时,需要将文档末尾空余一行)

cat ca.crt ca.key > ca.crt.key.pem
cat client.crt client.key > client.crt.key.pem
cat server.crt server.key > server.crt.key.pem

四、生成CSR示例

下表可帮助您创建证书请求。

Name 姓名 描述 示例
Country Name 国家名称 代表国家的两个字母 ISO 缩写。 CN(中国)
State or Province Name 州或省 组织所在州或省的名称。此名称不可使用缩写。 ZJ(浙江)
Locality Name 所在地名称 组织所在城市的名称。 HZ(杭州)
Organization Name 组织名称 组织的法定全称。请勿缩写组织名称。 百度、腾讯、网易
Organizational Unit Name 组织部门 可选,用于提供额外的组织信息。 开发、测试、市场营销
Common Name 公用名 别名记录的完全限定域名。如果两者不能精确匹配,那么您会收到一条证书名称检测警告。 www.yourdomain.com
Email Address 电子邮件地址 服务器管理员的电子邮件地址 someone@yourdomain.com

? keys openssl req -new -key ca.key -out ca.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
-----

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:ZJ
Locality Name (eg, city) []:HZ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My CA
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:apache.com/192.168.125.175
Email Address []:

注意
Organization Name :CA、客户端、服务器端的CSR文件的这一项不要写成一样的!!!可以随意写如:My CA, My Server, My Client

Common Name:这一项,是可以访问的域名,也可以配置为IP
【“验证域名”功能,验证的就是这个!!!!】

五、扩展
根据不同编码查看私钥方式如下:
PEM 编码格式:openssl rsa -in xxx.key -text -noout
DER 编码格式:openssl rsa -in xxx.key -text -noout -inform der

同一 X.509 证书的不同编码之间可以互相转换:
PEM 转为 DER:openssl x509 -in xxx.pem -outform der -out xxx.der
DER 转为 PEM:openssl x509 -in xxx.der -inform der -outform pem -out xxx.pem

六、一些概念说明
CA(Certification Authority)证书
如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。 CSR
在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。(CRT,证书含公钥)
CA证书即CA颁发的证书,包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普遍遵循X.509 国际标准。

CA证书(数字证书)由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的一个数字文件。CA证书(数字证书)就是经过CA认证过的公钥。

公钥、私钥
在 RSA 中有「公钥」和「私玥」两种密钥,其中私钥可以导出公钥,但公钥无法反推私钥
私钥一般情况都是由证书持有者在自己本地生成的,由证书持有者自己负责保管

签名加密、解密
签名:CA用私钥给服务签发证书,证书中携带签名,CA用公钥验证这个签名是否是我签发的

传输加密、解密
传输:用接收方提供的的证书(相当于公钥)对需要发送给对方的数据进行加密,接收方用自己的私钥对接收到的数据进行解密。

因此,如果说数字证书是电子商务应用者的网上数字身份证话,那么证书相应的私钥则可以说是用户的私章或公章

参考连接:
数字证书、公钥和私钥这三者之间的关系是什么