https证书越来越趋于麻烦和昂贵,这里探索一种自行签署证书,一次性永久解决证书问题的方案。

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 保护的场景。希望这篇文章能帮助你更好地理解和实现证书管理。