2.2. 使用 OpenSSL 创建一个私有 CA
当您的情况需要在您的内部网络内验证实体时,私有证书颁发机构(CA)非常有用。例如,当使用基于您控制下的 CA 签名的证书的身份验证创建 VPN 网关时,或者您不想支付商业 CA 时,请使用私有 CA。要在这样的用例中签名证书,私有 CA 使用自签名证书。
前提条件
-
您有
root权限或使用sudo输入管理命令的权限。需要此类权限的命令标记为#。
流程
为您的 CA 生成私钥。例如,以下命令会创建一个 256 位 Elliptic Curve Digital Signature Algorithm(ECDSA)密钥:
$ openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out <ca.key>密钥生成过程的时间取决于主机的硬件和熵、所选算法以及密钥长度。
使用上一个命令生成的私钥创建证书:
$ openssl req -key <ca.key> -new -x509 -days 3650 -addext keyUsage=critical,keyCertSign,cRLSign -subj "/CN=<example_CA>" -out <ca.crt>生成的
ca.crt文件是一个自签名 CA 证书,可用来为其他证书签名 10 年。在私有 CA 的情况下,您可以将<example_CA>替换为任何通用名称(CN)的字符串 。对 CA 的私钥设置安全权限,例如:
# chown <root>:<root> <ca.key> # chmod 600 <ca.key>
后续步骤
要将自签名 CA 证书用作客户端系统上的信任锚,请将 CA 证书复制到客户端,并以
root用户身份将其添加到客户端的系统范围信任存储中:# trust anchor <ca.crt>如需更多信息,请参阅 使用共享的系统证书 一章。
验证
创建证书签名请求(CSR),并使用您的 CA 为请求签名。CA 必须成功创建一个基于 CSR 的证书,例如:
$ openssl x509 -req -in <client-cert.csr> -CA <ca.crt> -CAkey <ca.key> -CAcreateserial -days 365 -extfile <openssl.cnf> -extensions <client-cert> -out <client-cert.crt> Signature ok subject=C = US, O = Example Organization, CN = server.example.com Getting CA Private Key请参阅 第 2.5 节 “使用私有 CA 使用 OpenSSL 为 CSR 发布证书” 了解更多信息。
显示有关自签名 CA 的基本信息:
$ openssl x509 -in <ca.crt> -text -noout Certificate: … X509v3 extensions: … X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign …验证私钥的一致性:
$ openssl pkey -check -in <ca.key> Key is valid -----BEGIN PRIVATE KEY----- MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgcagSaTEBn74xZAwO 18wRpXoCVC9vcPki7WlT+gnmCI+hRANCAARb9NxIvkaVjFhOoZbGp/HtIQxbM78E lwbDP0BI624xBJ8gK68ogSaq2x4SdezFdV1gNeKScDcU+Pj2pELldmdF -----END PRIVATE KEY-----