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>
如需更多信息,请参阅 第 3 章 使用共享的系统证书。
验证
创建证书签名请求(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-----
其他资源
-
openssl (1)
,ca (1)
,genpkey (1)
,x509 (1)
, 和req (1)
man page