因为具有公信力的三方CA机构是需要收费的,所以自建CA机构(就是一套根证书),不具有公信力,然后给服务器的证书做签名。为了节约成本和网络安全,一般公司内网域名会自建CA证书,然后签发各个开发环境的服务证书。
更多内容证书格式转换参考:https://blog.csdn.net/qq_44734154/article/details/125992960
在window环境下,按住 Windows键 + R键 ,输入 certmgr.msc 可以查询当前用户下的证书情况:
证书安装指南:https://help.aliyun.com/document_detail/109827.html
一、生成CA证书私钥
openssl genrsa -aes128 -passout pass:Test@2022 -out ca_private.key 2048
二、生成CA证书请求文件
有效期20年:
openssl req -new -key ca_private.key -passin pass:Test@2022 -out ca_req.csr -days 7300
[root@node0 ca]# openssl req -new -key ca_private.key -passin pass:Test@2022 -out ca_req.csr -days 7300
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.
-----
# 国家代码,2位,中国CN
Country Name (2 letter code) [XX]:CN
# 机构所在省份
State or Province Name (full name) []:ShangHai
# 机构所在城市
Locality Name (eg, city) [Default City]:ShangHai
# 机构名称
Organization Name (eg, company) [Default Company Ltd]:TEST COMPANY
# 机构部门
Organizational Unit Name (eg, section) []:R&D center
# 机构域名 或 服务域名
Common Name (eg, your name or your server's hostname) []:www.qiyu319.com
# 邮箱
Email Address []:qiyu319@123.com
# 额外的属性
Please enter the following 'extra' attributes
to be sent with your certificate request
# 验证密码
A challenge password []:Test@2022
# 公司名称
An optional company name []:TEST COMPANY
查看证书请求文件内容:
openssl req -text -in ca_req.csr -noout
三、生成CA根证书
x509介绍:https://www.openssl.org/docs/man1.1.1/man1/openssl-x509.html
openssl x509 -req -in ca_req.csr -signkey ca_private.key -out ca_root.crt -days 7300 -passin pass:Test@2022
四、生成服务端的证书私钥
openssl genrsa -aes128 -passout pass:Test@2022 -out server_private.key 2048
五、生成服务端的待签名证书
有效期1年:
openssl req -new -key server_private.key -passin pass:Test@2022 -out server_req.csr -days 365
[root@node0 ca]# openssl req -new -key server_private.key -passin pass:Test@2022 -out server_req.csr -days 365
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) [XX]:CN
State or Province Name (full name) []:ShangHai
Locality Name (eg, city) [Default City]:ShangHai
Organization Name (eg, company) [Default Company Ltd]:TEST COMPANY
Organizational Unit Name (eg, section) []:R&D center
Common Name (eg, your name or your server's hostname) []:www.dev.qiyu319.com
Email Address []:qiyu319@dev.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:Test@2022
An optional company name []:TEST COMPANY
六、使用CA根证书对服务端证书签名
给服务端使用的证书签名,获取服务端证书server.crt:
openssl x509 -req -in server_req.csr -days 365 \
-CAkey ca_private.key -CA ca_root.crt -CAcreateserial \
-out server.crt
七、证书信息对比:
CA自签名根证书:ca_root.crt
根证书签名的服务证书:server.crt
CFCA颁发的证书样本
八、生成v3版本的证书
从上面的操作可以看到,默认生成的是v1版本证书,如果需要生成v3版本的证书,需要添加参数,找到openssl.cnf所在的位置,查看openssl.cnf配置文件:
增加-extfile /usr/local/openssl/ssl/openssl.cnf -extensions v3_ca
参数即可生成v3版本的证书:
openssl x509 -req -in ca_req.csr -extfile /usr/local/openssl/ssl/openssl.cnf -extensions v3_ca -signkey ca_private.key -out ca_root.crt -days 7300 -passin pass:Test@2022
① V1版本
标准证书体格式的第一版包括了版本号、序列号、签名算法、有效性及主体信息。其中,版主用来定义证书的版本号,一般为整数形式;序列号对CA所发布的每个证书具有唯一性,属于大整数形式;签名算法用来标识CA签署证书的算法。有效性则定义了证书的有效期;主体用以表明证书的发布对象。
② V2版本
V2在V1的基础上添加了两个选项:发布者的惟一标识和主体的惟一标识。当多个证书发布者都使用相同的X.500名字,发布者的惟一标识可以将它们区分开来;而当两个主体有相同的X.500名字,主体惟一标识则可以将它们区分开来。由于这两项很少用到,因此第二版的证书也很少用到。
③ V3版本
X.509在第三版中添加了扩展的功能, 虽然复杂但是很重要。扩展在v3版证书中是一个可选项,但是可以提供如下内容:主体和发布者的属性、密钥的用法和策略以及证书路径约束。主体和发布者的属性,这一部分提供了主体以及发布者的附加属性。