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