2.6. 使用私有 CA 使用 OpenSSL 为 CSR 发布证书
要建立 TLS 加密的数据交换频道,系统必须从证书颁发机构(CA)获取有效的证书。如果您有私有 CA,您可以通过签名证书签名请求(CSR)来创建请求的证书。
前提条件
- 您已配置了私有 CA。如需更多信息,请参阅 使用 OpenSSL 创建私有 CA 部分。
- 您有一个包含 CSR 的文件。您可以在 第 2.4 节 “使用 OpenSSL 为 TLS 服务器证书创建私钥和 CSR” 部分中找到创建 CSR 的示例。
流程
可选:使用文本编辑器准备一个 OpenSSL 配置文件来为证书添加扩展,例如:
$ vim <openssl.cnf> [server-cert] extendedKeyUsage = serverAuth [client-cert] extendedKeyUsage = clientAuth上例仅演示了原则。
openssl工具不会自动为证书添加所有扩展。您必须将所需的扩展添加到 CNF 文件中,或者将它们附加到openssl命令的参数中。使用
x509工具创建基于 CSR 的证书,例如:$ openssl x509 -req -in <server_cert.csr> -CA <ca.crt> -CAkey <ca.key> -days 365 -extfile <openssl.cnf> -extensions <server_cert> -out <server_cert.crt> Signature ok subject=C = US, O = Example Organization, CN = server.example.com Getting CA Private Key要提高安全性,请在从 CSR 创建另一个证书前删除序列号文件。这样,您确保序列号始终是随机的。如果您省略了指定自定义文件名的
CAserial选项,则序列号文件名与证书的文件名相同,但其扩展名被.srl扩展名替换(上例中的server-cert.srl)。
验证
验证证书内容和字段:
$ openssl x509 -in <server_cert.crt> -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: ... Issuer: C = US, O = Example CA, CN = Example CA Validity Not Before: May 21 10:30:00 2026 GMT Not After : May 21 10:30:00 2027 GMT Subject: C = US, O = Example Organization, CN = server.example.com ...验证证书是否由正确的 CA 签名:
$ openssl verify -CAfile <ca.crt> <server_cert.crt> <server_cert.crt>: OK检查证书过期日期:
$ openssl x509 -in <server_cert.crt> -noout -dates notBefore=May 21 10:30:00 2026 GMT notAfter=May 21 10:30:00 2027 GMT