关键字: 自建CA, openssl, https证书,带有多域名
需求
- 自建CA并签发证书,可以将自建CA的根证书作为可信任的证书发行人加入到系统中,由它签发的一系列证书就被检验和信任了,不需要没增加一个证书都反复添加信任关系。
- 浏览器中对https链接所使用的证书进行与域名匹配关系的检查,如果不匹配就会被当作不安全的链接,哪怕已经在系统的信任列表中添加了该证书或为其签发的CA根证书。
生成证书的一般过程
- 证书生成的过程
生成私钥 --> 生成证书签发请求(csr) --> 签发证书(自签发, CA签发)
- 生成CA的过程
生成CA私钥 --> 生成证书签发请求(csr) --> 自签发形成CA根证书
- 生成服务器/客户端证书的过程
生成私钥 --> 生成证书签发请求(csr) --> 由CA对csr签发生成证书
在过程中可以根据需要对过程进行简化,比如使用openss通过参数设置,在一个处理中即可生成自签名的证书
自建CA
自己CA是把一个自签的证书作为根证书,并用于签发其认证的证书的过程,因此除了生成自签发的证书外,还需要建立用于以后进行签发的目录结构和配置文件。
- 建立CA的根目录
# 创建根目录及
mkdir rootCA/root
cd rootCA
# 复制缺省的配置文件openssl.cnf
cp /etc/pki/tls/openssl.cnf .
修改openssl.cnf中[ CA_default ] 中的dir 为当前路径
[ CA_default ]
dir = . # /etc/pki/CA # Where everything is kept
....
创建相关子目录和文件
# 创建保存新签证书的目录,可在openssl.cnf中修改名称
mkdir newcerts
# 生成两个文件,并初始化内容
touch index.txt
echo "0000">serial
- 生成私钥
# rsa 2048-bit
openssl genrsa -out root/ca.key 2048
为包含秘钥可以通过增加-des 或者 -des3等参数设置秘钥
- 生成CSR
openssl req -new -sha256 \
-days 10000 \
-key root/ca.key \
-subj "/C=CN/ST=BeiJing/L=Beijing/O=OWNCA/OU=Ownca/CN=www.ownca-root.com" \
-out root/ca.csr
- 生成自签发证书
openssl ca -selfsign \
-days 10000 \
-extensions SAN \
-config <(cat ./openssl.cnf \
<(printf "[SAN]\nsubjectAltName=DNS.1:ownca-root.com.com")) \
-in root/ca.csr -keyfile root/ca.key \
-out root/ca.crt
以上两个步骤可以合并在一起,如下:
openssl req -new -sha256 \
-x509 \
-days 10000 \
-key root/ca.key \
-subj "/C=CN/ST=BeiJing/L=Beijing/O=OWNCA/OU=Ownca/CN=www.ownca-root.com" \
-extensions SAN \
-config <(cat ./openssl.cnf \
<(printf "[SAN]\nsubjectAltName=DNS.1:ownca-root.com.com")) \
-out root/ca.crt
注
本来用openssl x509..也可以签发文件但因为它不能用extensions 指定扩展的section,所以用了openssl ca ...
- 查看csr中内容
openssl req -in root/ca.csr -text
示例为
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=CN, ST=BeiJing, L=Beijing, O=OWNCA, OU=Ownca, CN=www.ownca-root.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:e8:dd:74:30:c7:09:a1:ff:d4:ac:00:15:3c:4f:
20:9c:31:ac:5b:e0:b5:ed:7e:79:10:7c:34:69:db:
16:e3:21:ae:9d:20:83:a1:7a:d4:63:fc:12:94:7a:
a7:36:33:af:02:0e:6e:f9:b5:b4:72:d1:ed:e5:d2:
5c:ee:26:6f:cb:fc:9d:7b:82:b7:5b:92:f6:96:3b:
60:e7:5b:c4:2c:4e:c6:52:cf:00:9f:06:34:26:d6:
*查看证书中内容
openssl x509 -in root/ca.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=BeiJing, O=OWNCA, OU=Ownca, CN=www.ownca-root.com
Validity
Not Before: Jan 16 09:42:23 2019 GMT
Not After : Jun 3 09:42:23 2046 GMT
Subject: C=CN, ST=BeiJing, O=OWNCA, OU=Ownca, CN=www.ownca-root.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:e8:dd:74:30:c7:09:a1:ff:d4:ac:00:15:3c:4f:
20:9c:31:ac:5b:e0:b5:ed:7e:79:10:7c:34:69:db:
16:e3:21:ae:9d:20:83:a1:7a:d4:63:fc:12:94:7a:
- 检查输出
查看后发现index.txt文件中添加了内容,增加了对应的.attr, .old文件,serial文件的内容被更新了,增加了.old, 在newcerts中存在一个00.pem文件,它是ca的根证书,比较发现它和root/ca.crt是完全一样的。
-rw-r--r-- 1 root root 84 Jan 16 17:42 index.txt
-rw-r--r-- 1 root root 21 Jan 16 17:42 index.txt.attr
-rw-r--r-- 1 root root 0 Jan 16 17:38 index.txt.old
drwxr-xr-x 2 root root 4096 Jan 16 17:42 newcerts
-rw-r--r-- 1 root root 10947 Jan 16 16:11 openssl.cnf
drwxr-xr-x 2 root root 4096 Jan 16 17:39 root
-rw-r--r-- 1 root root 3 Jan 16 17:42 serial
-rw-r--r-- 1 root root 5 Jan 16 17:42 serial.old
- 参考:
OpenSSL 与 证书
用Openssl建立私有CA并颁发证书
Linux下使用openssl生成证书
OpenSSL主配置文件openssl.cnf
openssl生成X509 V3的根证书及签名证书