第 15 章 如果 web 服务器和 LDAP 服务器证书在整个 IdM 部署中已过期,则替换它们

身份管理(IdM)使用以下服务证书:

  • LDAP(或 Directory)服务器证书
  • Web(或 httpd)服务器证书
  • PKINIT 证书

在没有 CA 的 IdM 部署中,certmonger 默认不会跟踪 IdM 服务证书或其过期的通知。如果 IdM 系统管理员没有手动为这些证书设置通知,或者将 certmonger 配置为跟踪它们,则证书将在没有通知的情况下过期。

按照以下流程,手动为运行在 server.idm.example.com IdM 服务器上的 httpd 和 LDAP 服务替换过期的证书。

注意

HTTP 和 LDAP 服务证书在不同的 IdM 服务器上有不同的密钥对和主题名称。因此,您必须单独更新每个 IdM 服务器上的证书。

先决条件

流程

  1. 如果您不使用相同的 CA 为新证书签名,或者已安装的 CA 证书不再有效,请使用包含外部 CA 的有效 CA证书链的文件更新本地数据库中的外部 CA 信息。该文件可接受 PEM 和 DER 证书、PKCS#7 证书链、PKCS#8 和原始私钥,以及 PKCS#12 格式。

    1. ca_certificate_chain_file.crt 中提供的证书作为额外的 CA 证书安装到 IdM 中:

      # ipa-cacert-manage install ca_certificate_chain_file.crt
    2. 使用来自 ca_certicate_chain_file.crt 的证书更新本地 IdM 证书数据库:

      # ipa-certupdate
  2. 请求 httpd 和 LDAP 的证书:

    1. 使用 OpenSSL 工具为运行在 IdM 实例上的 Apache Web 服务器创建到第三方 CA 的证书签名请求(CSR):

      $ openssl req -new -newkey rsa:2048 -nodes -keyout /var/lib/ipa/private/httpd.key -out /tmp/http.csr -addext 'subjectAltName = DNS:server.idm.example.com, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:HTTP/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'

      创建新私钥是可选的。如果您还有原始私钥,您可以使用 openssl req 命令的 -in 选项来指定从中读取请求的输入文件名。

    2. 使用 OpenSSL 工具为运行在 IdM 实例上的 LDAP 服务器创建到第三方 CA 的证书签名请求(CSR):

      $ openssl req -new -newkey rsa:2048 -nodes -keyout ~/ldap.key -out /tmp/ldap.csr -addext 'subjectAltName = DNS:server.idm.example.com, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:ldap/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'

      创建新私钥是可选的。如果您还有原始私钥,您可以使用 openssl req 命令的 -in 选项来指定从中读取请求的输入文件名。

    3. 向外部 CA 提交 CSR、/tmp/http.csrtmp/ldap.csr ,并获取 httpd 的证书和 LDAP 的证书。这个过程根据要用作外部 CA 的服务的不同而有所不同。
  3. 安装 httpd 的证书:

    # cp /path/to/httpd.crt /var/lib/ipa/certs/
  4. 将 LDAP 证书安装到 NSS 数据库中:

    1. [可选] 列出可用的证书:

      # certutil -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -L
      Certificate Nickname                                         Trust Attributes
                                                                   SSL,S/MIME,JAR/XPI
      
      Server-Cert                                                  u,u,u

      默认证书昵称是 Server-Cert,但可能会应用不同的名称。

    2. 使用上一步中的证书昵称,从 NSS 数据库(NSSDB)中删除旧的无效证书:

      # certutil -D -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -n 'Server-Cert' -f /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt
    3. 创建一个 PKCS12 文件,来简化导入到 NSSDB 的过程:

      # openssl pkcs12 -export -in ldap.crt -inkey ldap.key -out ldap.p12 -name Server-Cert
    4. 将创建的 PKCS#12 文件安装到 NSSDB 中:

      # pk12util -i ldap.p12 -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -k /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt
    5. 检查新证书是否已成功导入:

      # certutil -L -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/
  5. 重启 httpd 服务:

    # systemctl restart httpd.service
  6. 重启 Directory 服务:

    # systemctl restart dirsrv@IDM-EXAMPLE-COM.service
  7. 在所有 IdM 副本上执行前面所有的步骤。这是在副本之间建立 TLS 连接的先决条件。
  8. 将新证书注册到 LDAP 存储:

    1. 将 Apache Web 服务器的旧私钥和证书替换为新密钥和新签名的证书:

      # ipa-server-certinstall -w --pin=password /var/lib/ipa/private/httpd.key /var/lib/ipa/certs/httpd.crt

      在以上命令中:

      • -w 选项指定您要将证书安装到 Web 服务器中。
      • pin 选项指定保护私钥的密码。
    2. 出现提示时,输入 目录管理器 密码。
    3. 将 LDAP 服务器的旧私钥和证书替换为新密钥和新签名的证书:

      # ipa-server-certinstall -d --pin=password /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ldap.key /path/to/ldap.crt

      在以上命令中:

      • -d 选项指定您要将证书安装到 LDAP 服务器中。
      • pin 选项指定保护私钥的密码。
    4. 出现提示时,输入 目录管理器 密码。
    5. 重启 httpd 服务:

      # systemctl restart httpd.service
    6. 重启 Directory 服务:

      # systemctl restart dirsrv@IDM-EXAMPLE-COM.service
  9. 在所有其他受影响的副本上执行上一步中的命令。