证书生成过程及自建CA(一)

关键字: 自建CA, openssl, https证书,带有多域名

需求

  • 自建CA并签发证书,可以将自建CA的根证书作为可信任的证书发行人加入到系统中,由它签发的一系列证书就被检验和信任了,不需要没增加一个证书都反复添加信任关系。
  • 浏览器中对https链接所使用的证书进行与域名匹配关系的检查,如果不匹配就会被当作不安全的链接,哪怕已经在系统的信任列表中添加了该证书或为其签发的CA根证书。

生成证书的一般过程

  • 证书生成的过程

生成私钥 --> 生成证书签发请求(csr) --> 签发证书(自签发, CA签发)

  • 生成CA的过程

生成CA私钥 --> 生成证书签发请求(csr) --> 自签发形成CA根证书

  • 生成服务器/客户端证书的过程

生成私钥 --> 生成证书签发请求(csr) --> 由CA对csr签发生成证书

在过程中可以根据需要对过程进行简化,比如使用openss通过参数设置,在一个处理中即可生成自签名的证书

自建CA

自己CA是把一个自签的证书作为根证书,并用于签发其认证的证书的过程,因此除了生成自签发的证书外,还需要建立用于以后进行签发的目录结构和配置文件。

  1. 建立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

  1. 生成私钥
# rsa 2048-bit
openssl genrsa -out root/ca.key 2048

为包含秘钥可以通过增加-des 或者 -des3等参数设置秘钥

  1. 生成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
  1. 生成自签发证书
    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的根证书及签名证书

你可能感兴趣的:(证书生成过程及自建CA(一))