2: Dumping Self Signed Certificates with Own CA

上面的文章,介绍了如何创建一个 CA 根证书,并把该证书添加到一些设备中,现在就可以看看如何用该根证书,来签发网站 SSL 证书。


1. 创建 SSL key & CSR

1.1 创建 SSL Key(私匙)

1
2
# 这里不需要密码
$ openssl genrsa -des3 -out d2labs.cn.key 2048
  • 加密强度:这里加密强度仍然选择2048:

1.2 创建 CSR

Certificate Signing Request 证书请求文件(公钥)

通过下面的命令,可以产生一个 CSR,用于向 CA 请求签发证书。

1
2
3
4
5
6
7
8
# openssl req -new -newkey rsa:2048 -sha256 -key nginx.key -out nginx.csr -subj "/C=CN/ST=Shanghai/O=D2Labs Co.,Ltd/CN=d2labs.com"
$ openssl req -new -sha256 -days 36500 -key d2labs.cn.key -out d2labs.cn.csr -subj "/C=CN/ST=Shanghai/O=D2Labs Co.,Ltd/CN=d2labs.com"
# 这里需要注意的是:
# /O 字段内容必须与刚才的CA根证书相同;
# /CN 字段为公用名称(Common Name),必须为网站的域名(不带 www);
# /OU 字段最好也与为网站域名,当然选择其他名字也没关系。

1.3 认识 CSR 文件

打开该 .csr 文件,格式如下:

1
2
3
4
5
-----BEGIN CERTIFICATE REQUEST-----
MIICkzCCAXsCAQAwTjELMAkGA1UEBhMCQ04xETAPBgNVBAgTCFNoYW5naGFpMRcw
...
fGOyPGV36dv8JbbxoBfIc3CG0IIqacaa8b80rALguZW+fgo6JgeH
-----END CERTIFICATE REQUEST-----

1.4 验证 CSR 文件

1
2
3
4
$ openssl req -in d2labs.cn.csr -noout -text
# 如果出现以下字段,表示正确使用了 `SHA256` 加密:
# Signature Algorithm: sha256WithRSAEncryption


2. CA 签发 SSL 证书

通过以上签发的私钥和 CSR,就可用来请求 CA 进行证书的签发了。CA 有很多家,像 Godaddy 和免费的 StartSSL 等。就不再多讲了,本部分,仅说明如何用 自己的 CA 来进行签发。

2.1 准备工作:

OSX 下 OpenSSL 的默认配置位于:/System/Library/OpenSSL/openssl.cnf,如果使用默认配置文件,需要在 .key, .csr 同级目录下,进行以下操作:

1
2
3
$ mkdir -p demoCA/newcerts
$ touch demoCA/index.txt
$ echo '01' > demoCA/serial

2.2 签名证书:

1
$ openssl ca -days 3750 -md sha256 -in d2labs.cn.csr -cert d2labs_root_ca.crt -keyfile d2labs.key -out d2labs.cn.crt

输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 接下来有一段提示,找到Sign the certificate? [y/n]这句
# 打入y并回车,然后出现out of 1 certificate requests certified, commit? [y/n],同样y回车
Using configuration from /System/Library/OpenSSL/openssl.cnf
Enter pass phrase for d2labs.key:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Oct 28 08:32:39 2015 GMT
Not After : Oct 27 08:32:39 2016 GMT
Subject:
countryName = CN
stateOrProvinceName = Shanghai
organizationName = D2Labs Co.,Ltd
commonName = d2labs.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
3A:09:AC:8F:9C:3D:57:71:5E:7B:94:1D:5F:F6:89:45:4C:F4:78:12
X509v3 Authority Key Identifier:
keyid:C6:D8:9D:41:09:03:F0:36:A2:D2:F1:B6:00:C3:33:E9:E3:29:56:1A
Certificate is to be certified until Oct 27 08:32:39 2016 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

这时候,就会生成一个 d2labs.cn.crt 证书文件。

2.3 Verify the certificate

1
2
3
4
$ openssl x509 -noout -text -in d2labs.cn.crt
# 出现 sha256 表示正常
# Signature Algorithm: sha256WithRSAEncryption


3. 成功

好了,现在服务器需要的两个文件 SSL证书私钥文件 都准备好了,分别是 d2labs.cn.crtd2labs.cn.key,接下来就可以利用它们配置你的服务器软件(nginx)了。

需要注意的是由于是自签名证书,所以客户端需要安装根证书,这在上一篇创建 CA 根证书中有介绍。

REF::