2.2. 使用 OpenSSL 创建私有 CA
当您的情况需要验证您的内部网络内实体时,私有证书颁发机构(CA)非常有用。例如,当基于您控制下的 CA 签名的证书或通过身份验证创建 VPN 网关时,或者您不想支付商业 CA 时,使用私有 CA。要在这样的用例中签署证书,私有 CA 使用自签名证书。
前提条件
-
您有
root
权限或使用sudo
输入管理命令的权限。需要此类权限的命令标记为#
。
流程
为您的 CA 生成私钥。例如,以下命令会创建一个 256 位 Elliptic Curve 数字签名算法(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