2.6. 使用 GnuTLS 创建私有 CA


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

先决条件

  • 您有 root 特权或权限来使用 sudo 输入管理命令的命令。需要此类权限的命令标有 #
  • 您已在系统上安装了 GnuTLS。如果没有,您可以使用这个命令:

    $ dnf install gnutls-utils

流程

  1. 为您的 CA 生成私钥。例如,以下命令会创建一个 256 位 ECDSA (Elliptic Curve Digital Signature Algorithm)密钥:

    $ certtool --generate-privkey --sec-param High --key-type=ecdsa --outfile <ca.key>

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

  2. 为证书创建一个模板文件。

    1. 使用您选择的文本编辑器创建一个文件,例如:

      $ vi <ca.cfg>
    2. 编辑该文件以包含必要的认证详情:

      organization = "Example Inc."
      state = "Example"
      country = EX
      cn = "Example CA"
      serial = 007
      expiration_days = 365
      ca
      cert_signing_key
      crl_signing_key
  3. 使用在第 1 步中生成的私钥创建一个签名证书:

    生成的 <ca.crt> 文件是一个自签名 CA 证书,您可用来为其他证书签名一年。<ca.crt> 文件是公钥(证书)。加载的文件 <ca.key> 是私钥。您应该将此文件保存在安全的地方。

    $ certtool --generate-self-signed --load-privkey <ca.key> --template <ca.cfg> --outfile <ca.crt>
  4. 对 CA 的私钥设置安全权限,例如:

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

后续步骤

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

    # trust anchor <ca.crt>

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

验证

  1. 显示有关自签名 CA 的基本信息:

    $ certtool --certificate-info --infile <ca.crt>
    Certificate:
    …
        	X509v3 extensions:
            	…
            	X509v3 Basic Constraints: critical
                	CA:TRUE
            	X509v3 Key Usage: critical
                	Certificate Sign, CRL Sign
  2. 创建证书签名请求(CSR),并使用您的 CA 为请求签名。CA 必须成功创建一个基于 CSR 的证书,例如:

    1. 为您的 CA 生成私钥:

      $ certtool --generate-privkey --outfile <example-server.key>
    2. 在您选择的文本编辑器中打开一个新配置文件,例如:

      $ vi <example-server.cfg>
    3. 编辑该文件以包含必要的认证详情:

      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"
    4. 使用之前创建的私钥生成一个请求:

      $ certtool --generate-request --load-privkey <example-server.key> --template <example-server.cfg> --outfile <example-server.crq>
    5. 生成证书并使用 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) 手册页
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.