2.6. 使用 GnuTLS 创建私有 CA
当您的情况需要在您的内部网络内验证实体时,私有证书颁发机构(CA)非常有用。例如,当使用基于您控制下的 CA 签名的证书的身份验证创建 VPN 网关时,或者您不想支付商业 CA 时,请使用私有 CA。要在这样的用例中签名证书,私有 CA 使用自签名证书。
先决条件
-
您有
root
特权或权限来使用sudo
输入管理命令的命令。需要此类权限的命令标有#
。 您已在系统上安装了 GnuTLS。如果没有,您可以使用这个命令:
$ dnf install gnutls-utils
流程
为您的 CA 生成私钥。例如,以下命令会创建一个 256 位 ECDSA (Elliptic Curve Digital Signature Algorithm)密钥:
$ certtool --generate-privkey --sec-param High --key-type=ecdsa --outfile <ca.key>
密钥生成过程的时间取决于主机的硬件和熵、所选算法以及密钥长度。
为证书创建一个模板文件。
使用您选择的文本编辑器创建一个文件,例如:
$ vi <ca.cfg>
编辑该文件以包含必要的认证详情:
organization = "Example Inc." state = "Example" country = EX cn = "Example CA" serial = 007 expiration_days = 365 ca cert_signing_key crl_signing_key
使用在第 1 步中生成的私钥创建一个签名证书:
生成的 <ca.crt> 文件是一个自签名 CA 证书,您可用来为其他证书签名一年。<ca.crt> 文件是公钥(证书)。加载的文件 <ca.key> 是私钥。您应该将此文件保存在安全的地方。
$ certtool --generate-self-signed --load-privkey <ca.key> --template <ca.cfg> --outfile <ca.crt>
对 CA 的私钥设置安全权限,例如:
# chown <root>:<root> <ca.key> # chmod 600 <ca.key>
后续步骤
要将自签名 CA 证书用作客户端系统上的信任锚,请将 CA 证书复制到客户端,并以
root
用户身份将其添加到客户端的系统范围的信任存储中:# trust anchor <ca.crt>
如需更多信息,请参阅 第 3 章 使用共享的系统证书。
验证
显示有关自签名 CA 的基本信息:
$ certtool --certificate-info --infile <ca.crt> Certificate: … X509v3 extensions: … X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign
创建证书签名请求(CSR),并使用您的 CA 为请求签名。CA 必须成功创建一个基于 CSR 的证书,例如:
为您的 CA 生成私钥:
$ certtool --generate-privkey --outfile <example-server.key>
在您选择的文本编辑器中打开一个新配置文件,例如:
$ vi <example-server.cfg>
编辑该文件以包含必要的认证详情:
signing_key encryption_key key_agreement tls_www_server country = "US" organization = "Example Organization" cn = "server.example.com" dns_name = "example.com" dns_name = "server.example.com" ip_address = "192.168.0.1" ip_address = "::1" ip_address = "127.0.0.1"
使用之前创建的私钥生成一个请求:
$ certtool --generate-request --load-privkey <example-server.key> --template <example-server.cfg> --outfile <example-server.crq>
生成证书并使用 CA 的私钥对其签名:
$ certtool --generate-certificate --load-request <example-server.crq> --load-ca-certificate <ca.crt> --load-ca-privkey <ca.key> --outfile <example-server.crt>
其他资源
-
系统中
certtool (1)
和trust (1)
手册页
-
系统中