有时在测试环境需要使用证明书,这时候可使用自签名证书。在这里介绍使用openssl命令创建自签名证明书的方法。
使用的openssl版本如下。
[root@sys-blog ~]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
创建自签名证书时,生成如下3个文件。
文件名 | 解释 |
---|---|
server.key | 秘钥 |
server.csr | 证书签名请求 |
server.crt | 自签名证书 |
生成私钥(KEY文件)
创建RSA2048bit的秘钥,该秘钥用于创建自签名证书。
[root@sys-blog ~]# openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus
...................+++
..+++
e is 65537 (0x10001)
使用下面的openssl命令确认秘钥是否正确,输出结果 “RSA key ok” 时,证明创建私钥成功。
[root@sys-blog ~]# openssl rsa -in server.key -check -noout
RSA key ok
生成证书签名请求(CSR文件)
接下来创建CSR(Certificate Signing Request)文件,该证书包含公钥及所有者相关信息。执行命令时指定私钥,并输入所有者相关信息。
[root@sys-blog ~]# openssl req -new -key server.key -out server.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) [XX]:CN
State or Province Name (full name) []:Liaoning
Locality Name (eg, city) [Default City]:Dalian
Organization Name (eg, company) [Default Company Ltd]:sys-blog.net
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:sys-blog
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
输入项 | 解释 |
---|---|
Country Name | 国家代号,中国输入CN |
State or Province Name | 州(省)名 |
Locality Name | 所在地市的名称 |
Organization Name | 组织或者公司名称,个人使用时可输入域名。 |
Organizational Unit Name | 部门名称(可选项) |
Common Name | 进行SSL连接的主机名 |
Email Address | 该域名管理员的邮箱 |
A challenge password | 输入密码(可选项) |
An optional company name | 组织或者公司名称的简称(可选项) |
使用下面的openssl命令确认创建的CSR文件是否正确,输出结果 “verify OK” 时,证明成功创建CSR文件。
[root@sys-blog ~]# openssl req -in server.csr -verify -noout
verify OK
可使用下面的命令确认key文件和csr文件里的公钥是否一致。
[root@sys-blog ~]# openssl rsa -in server.key -pubout -out pubkey_from_server_key.txt
writing RSA key
[root@sys-blog ~]# openssl req -in server.csr -pubkey -noout -out pubkey_from_server_csr.txt
[root@sys-blog ~]# diff pubkey_from_server_key.txt pubkey_from_server_csr.txt
[root@sys-blog ~]#
生成自签名证书(CRT文件)
一般会将 CSR文件 发送至SSL证书公司,以便颁发SSL证书(CRT文件)。CRT文件是SSL证书公司在CSR文件添加信息后,使用SSL证书公司的私钥进行加密的文件,也被称为服务器证书。SSL证书公司的私钥相对应的公钥被内置于浏览器中,这意味着CRT文件的内容可安全传输。
在这里使用 CSR文件 创建自签名证书,有效期限为365天。
[root@sys-blog ~]# openssl x509 -req -days 365 -signkey server.key < server.csr > server.crt
Signature ok
subject=/C=CN/ST=Liaoning/L=Dalian/O=sys-blog.net/CN=sys-blog
crt文件也包括key文件里的公钥,可使用下面的命令确认crt文件里的公钥和key文件里的公钥是否一致。
[root@sys-blog ~]# openssl rsa -in server.key -pubout -out pubkey_from_server_key.txt
writing RSA key
[root@sys-blog ~]# openssl x509 -in server.crt -pubkey -noout > pubkey_from_server_crt.txt
[root@sys-blog ~]# diff pubkey_from_server_key.txt pubkey_from_server_crt.txt
[root@sys-blog ~]#