Red Hat Training

A Red Hat training course is available for RHEL 8

3.2. 使用 OpenSSL 创建私有 CA

当您的情况需要验证您的内部网络内实体时,私有证书颁发机构(CA)非常有用。例如,当基于您控制下的 CA 签名的证书或通过身份验证创建 VPN 网关时,或者您不想支付商业 CA 时,使用私有 CA。要在这样的用例中签署证书,私有 CA 使用自签名证书。

前提条件

  • 您有 root 权限或使用 sudo 输入管理命令的权限。需要此类权限的命令标记为 #

流程

  1. 为您的 CA 生成私钥。例如,以下命令会创建一个 256 位 Elliptic Curve 数字签名算法(ECDSA)密钥:

    $ openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out <ca.key>

    密钥生成过程的时间取决于主机的硬件和熵、所选算法以及密钥长度。

  2. 使用上一个命令生成的私钥创建证书:

    $ 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)。

  3. 对 CA 的私钥设置安全权限,例如:

    # chown <root>:<root> <ca.key>
    # chmod 600 <ca.key>

后续步骤

  • 要将自签名 CA 证书用作客户端系统上的信任锚,请将 CA 证书复制到客户端,并以 root 用户身份将其添加到客户端的系统范围信任存储中:

    # trust anchor <ca.crt>

    如需更多信息,请参阅 第 4 章 使用共享的系统证书

验证

  1. 创建证书签名请求(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

    如需更多信息,请参阅 第 3.5 节 “使用私有 CA 使用 OpenSSL 为 CSR 发布证书”

  2. 显示有关自签名 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
    …
  3. 验证私钥的一致性:

    $ 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