概述
利用 OpenSSL 生成根证书(RootCA),并通过根证书签发新证书。
步骤
环境准备
- Linux: CentOS7
生成根证书
创建 root.cnf 文件,用于保存根证书的相关信息。
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[ req_distinguished_name ]
C = CN
O = Alan Yeh (alan@yeh.cn)
OU = https://github.com/alan-yeh
CN = Personal Root Certification Authority
[ v3_req ]
# Extensions to add to a certificate request
keyUsage = critical, keyCertSign, cRLSign
subjectKeyIdentifier = hash
basicConstraints = critical, CA:TRUE
执行以下命令,通过 root.cnf 文件生成根证书。
# 生成私钥
$ openssl ecparam -out root.key -name secp384r1 -genkey
# 生成证书请求文件
$ openssl req -new -sha384 -key root.key -out root.csr -config root.cnf
# 生成证书
$ openssl x509 -req -extfile root.cnf -extensions v3_req -sha384 -in root.csr -signkey root.key -out root.crt
# 查看证书信息
$ openssl x509 -in root.crt -noout -text
使用根据书签发域名证书
创建 cert.cnf 文件,用于保存待签发的证书信息。
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[ req_distinguished_name ]
# 签发通用域名证书
CN = *.zhenghaoxiu.com
[ v3_req ]
# Extensions to add to a certificate request
authorityKeyIdentifier = keyid
subjectKeyIdentifier = hash
subjectAltName = @alternate_names
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
basicConstraints = CA:FALSE
[ alternate_names ]
# 通用域名证书需要设置两个 DNS 信息
# 如果签发单个域名的话,就只需要一个具体的域名信息
DNS.1 = zhenghaoxiu.com
DNS.2 = *.zhenghaoxiu.com
执行以下命令,通过 cert.cnf 文件生成根证书。
# 生成私钥
openssl ecparam -out cert.key -name secp384r1 -genkey
# 生成请求文件
openssl req -new -sha384 -key cert.key -out cert.csr -config cert.cnf
# 使用根证书为域名证书签名
openssl x509 -req -extfile cert.cnf -extensions v3_req -in cert.csr -CA root.crt -CAkey root.key -CAcreateserial -out cert.pem -days 730 -sha384