有时在测试环境需要使用证明书,这时候可使用自签名证书。在这里介绍使用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 ~]#