1 从零开始:创建 CA、中级 CA 和 SSL 证书的完整指南
在网络安全中,证书颁发机构(CA)和 SSL 证书扮演着至关重要的角色 1。它们确保了数据传输的安全性和身份验证的可靠性。本文将详细介绍如何从零开始创建一个根 CA、中级 CA,以及如何使用中级 CA 签署一个用于 HTTPS 的 SSL 证书。通过这些步骤,你将能够为自己的网站或服务生成安全的证书链。
1.1 一、什么是 CA 和中级 CA?
1.1.1 1. 根 CA(Root CA)
根 CA 是证书链的最顶层,它是最受信任的证书颁发机构。根 CA 的证书通常预装在操作系统和浏览器中,用于验证其他证书的可信性。
1.1.2 2. 中级 CA(Intermediate CA)
中级 CA 是根 CA 和终端证书之间的中间层。它由根 CA 签署,用于签署终端证书(如 SSL 证书)。使用中级 CA 可以增加证书颁发的灵活性和安全性 2,同时减轻根 CA 的负担。
1.2 二、创建根 CA
1.2.1 1. 生成根 CA 私钥
首先,我们需要生成一个高强度的私钥,用于根 CA:
openssl genrsa -aes256 -out ca.key 3072
3072
表示密钥长度为 3072 位,提供更高的安全性。-aes256
表示对私钥进行加密保护,需要输入密码。
1.2.2 2. 创建根 CA 证书签名请求(CSR)
接下来,生成根 CA 的证书签名请求(CSR):
openssl req -new -sha256 -key ca.key -out ca.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCA/OU=MyUnit/CN=MyCA/emailAddress=This email address is being protected from spambots. You need JavaScript enabled to view it. "
-subj
参数用于指定证书的主题信息。
1.2.3 3. 自签名根 CA 证书
使用 CSR 自签名根 CA 证书:
openssl x509 -req -days 36500 -sha256 -extensions v3_ca -signkey ca.key -in ca.csr -out ca.crt
-days 36500
表示证书有效期为 99 年。-extensions v3_ca
和-signkey ca.key
表示使用根 CA 的私钥进行签名。
1.3 三、创建中级 CA
1.3.1 1. 生成中级 CA 私钥
生成中级 CA 的私钥:
openssl genrsa -aes256 -out intermediate.key 3072
1.3.2 2. 创建中级 CA 证书签名请求(CSR)
生成中级 CA 的 CSR:
openssl req -new -sha256 -key intermediate.key -out intermediate.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCA/OU=Intermediate/CN=IntermediateCA/emailAddress=This email address is being protected from spambots. You need JavaScript enabled to view it. "
1.3.3 3. 使用根 CA 签署中级 CA 证书
使用根 CA 签署中级 CA 的 CSR:
openssl x509 -req -days 3650 -sha256 -extensions v3_intermediate_ca -extfile intermediate.cnf -CA ca.crt -CAkey ca.key -CAcreateserial -in intermediate.csr -out intermediate.crt
-days 3650
表示中级 CA 证书有效期为 10 年。-extensions v3_intermediate_ca
和-extfile intermediate.cnf
指定中级 CA 的扩展配置。
1.4 四、创建终端 SSL 证书
1.4.1 1. 生成终端证书私钥
生成终端证书的私钥(不带密码):
openssl genrsa -out www.d4.zj.cn.key 3072
1.4.2 2. 创建终端证书的证书签名请求(CSR)
生成终端证书的 CSR:
openssl req -new -sha256 -key www.d4.zj.cn.key -out www.d4.zj.cn.csr -subj "/C=CN/ST=Zhejiang/L=Hangzhou/O=MyOrganization/OU=MyUnit/CN=www.d4.zj.cn"
1.4.3 3. 使用中级 CA 签署终端证书
使用中级 CA 签署终端证书:
openssl x509 -req -days 365 -sha256 -extensions v3_req -extfile www.d4.zj.cn.cnf -CA intermediate.crt -CAkey intermediate.key -CAcreateserial -in www.d4.zj.cn.csr -out www.d4.zj.cn.crt
-days 365
表示终端证书有效期为 1 年。-extensions v3_req
和-extfile www.d4.zj.cn.cnf
指定终端证书的扩展配置。
1.5 五、生成包含证书链的 PEM 文件
为了确保客户端能够正确验证证书链,我们需要将终端证书、中级 CA 证书和根 CA 证书拼接成一个 PEM 文件:
cat www.d4.zj.cn.crt intermediate.crt ca.crt > www.d4.zj.cn-chain.pem
1.6 六、验证证书链
使用 OpenSSL 验证生成的证书链:
openssl crl2pkcs7 -nocrl -certfile www.d4.zj.cn-chain.pem | openssl pkcs7 -print_certs -noout
1.7 七、部署证书
将生成的证书和私钥文件部署到你的服务器上。例如,在 Nginx 中配置 SSL 证书:
server {
listen 443 ssl;
server_name www.d4.zj.cn;
ssl_certificate /path/to/www.d4.zj.cn-chain.pem;
ssl_certificate_key /path/to/www.d4.zj.cn.key;
}
1.8 八、总结
通过上述步骤,你已经成功创建了一个根 CA、中级 CA,并使用中级 CA 签署了一个用于 HTTPS 的终端 SSL 证书。这个过程确保了证书链的完整性和安全性,适用于各种需要 HTTPS 保护的场景。希望这篇文章能帮助你更好地理解和实现证书管理。