第 21 章 从 CA 请求证书并使用 RHEL 系统角色创建自签名证书


许多服务(如 Web 服务器)都使用 TLS 加密与客户端的连接。这些服务需要私钥和证书,以及为证书签名的可信证书颁发机构(CA)。

通过使用 certificate RHEL 系统角色,您可以在受管节点上自动生成私钥。另外,该角色将 certmonger 服务配置为向 CA 发送证书签名请求(CSR),服务会在证书过期前自动更新证书。

出于测试目的,您可以使用 certificate 角色创建自签名证书,而不是从 CA 请求签名证书。

21.1. 使用 certificate RHEL 系统角色从 IdM CA 请求一个新证书

如果 Red Hat Enterprise Linux 主机是 RHEL 身份管理(IdM)环境的成员,您可以从 IdM 证书颁发机构(CA)请求 TLS 证书,并在此主机上运行的服务中使用它们。通过使用 证书 RHEL 系统角色,您可以自动创建私钥的过程,并让 certmonger 服务从 CA 请求证书。默认情况下,certmonger 会在证书过期前更新证书。

先决条件

  • 您已准备好控制节点和受管节点
  • 以可在受管主机上运行 playbook 的用户登录到控制节点。
  • 用于连接到受管节点的帐户具有 sudo 权限。
  • 受管节点是 IdM 域的成员,域使用 IdM 集成的 CA。

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Create certificates
      hosts: managed-node-01.example.com
      tasks:
        - name: Create a self-signed certificate
          ansible.builtin.include_role:
            name: rhel-system-roles.certificate
          vars:
            certificate_requests:
              - name: web-server
                ca: ipa
                dns: www.example.com
                principal: HTTP/www.example.com@EXAMPLE.COM
                run_before: systemctl stop httpd.service
                run_after: systemctl start httpd.service

    示例 playbook 中指定的设置包括以下内容:

    name: <path_or_file_name>

    定义生成的私钥和证书文件的名称或路径:

    • 如果将变量设置为 web-server,该角色会将私钥存储在 /etc/pki/tls/private/web-server.key 中,并将证书存储在 /etc/pki/tls/certs/web-server.crt 文件中。
    • 如果将变量设置为路径,如 /tmp/web-server,该角色会将私钥存储在 /tmp/web-server.key 中,并将证书存储在 /tmp/web-server.crt 文件中。

      请注意,您使用的目录必须设置 cert_t SELinux 上下文。您可以使用 selinux RHEL 系统角色来管理 SELinux 上下文。

    ca: ipa
    定义该角色从 IdM CA 请求证书。
    dns: <hostname_or_list_of_hostnames>
    设置发布的证书中的 Subject Alternative Names (SAN)字段所包含的主机名。您可以使用通配符(*)或以 YAML 列表格式指定多个名称。
    principal: <kerberos_principal>
    可选:设置证书中包含的 Kerberos 主体。
    run_before: <command>
    可选:定义 certmonger 在从 CA 请求证书前应执行的命令。
    run_after: < command>
    可选:定义 certmonger 应该在从 CA 收到发布的证书后执行的命令。

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.certificate/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml

验证

  • 列出 certmonger 服务管理的证书:

    # ansible managed-node-01.example.com -m command -a 'getcert list'
    ...
    Number of certificates and requests being tracked: 1.
    Request ID '20240918142211':
            status: MONITORING
            stuck: no
            key pair storage: type=FILE,location='/etc/pki/tls/private/web-server.key'
            certificate: type=FILE,location='/etc/pki/tls/certs/web-server.crt'
            CA: IPA
            issuer: CN=Certificate Authority,O=EXAMPLE.COM
            subject: CN=www.example.com
            issued: 2024-09-18 16:22:11 CEST
            expires: 2025-09-18 16:22:10 CEST
            dns: www.example.com
            key usage: digitalSignature,keyEncipherment
            eku: id-kp-serverAuth,id-kp-clientAuth
            pre-save command: systemctl stop httpd.service
            post-save command: systemctl start httpd.service
            track: yes
            auto-renew: yes

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.certificate/README.md 文件
  • /usr/share/doc/rhel-system-roles/certificate/ 目录
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.