第22章 期限切れのシステム証明書の回復
Identity Management (IdM) 証明書の有効期限が切れると、Web UI、LDAP、証明書の発行などのコアサービスで障害が発生します。システムがセキュアな接続を確立できないため、ipa-certupdate
や ipa-cacert-manage
などのコマンドは機能しません。以下のセクションでは、いくつかの重大な障害シナリオに対処するための手順を説明します。
変更を行う前に、IdM サーバーの完全なバックアップを作成してください。少なくとも、各サーバー上の重要なデータのファイルレベルのバックアップを作成してください。
# tar czvf /root/pki-backup_$(hostname -f)_$(date +%F).tar.gz /etc/dirsrv/slapd-* /etc/pki/pki-tomcat/ /var/lib/ipa/ /var/kerberos/krb5kdc/
信頼できるバックアップがない状態で続行しないでください。
ipa-cert-fix
コマンドは細心の注意を払って使用してください。ipa-cert-fix
は、強力ですがシステムへの影響が大きいツールであり、特定の障害シナリオ (更新サーバー上のサービス証明書の期限切れ) のために設計されています。
-
CA 証明書自体の有効期限が切れている場合は、
ipa-cert-fix
を実行しないでください。 -
更新サーバーが回復不能な状態にある場合を除き、レプリカサーバーで
ipa-cert-fix
を実行しないでください。このような状況に陥った場合は、サポートチケットを作成してください。 -
ipa-cert-fix
を一般的なトラブルシューティングツールとして実行しないでください。
このツールを誤用すると状況が悪化する可能性があります。
22.1. レプリカ上の期限切れサービス証明書の回復 リンクのコピーリンクがクリップボードにコピーされました!
この障害シナリオでは、更新サーバーは正常ですが、1 つ以上のレプリカが証明書の更新に失敗し、現在オフラインになっています。目標は、レプリカを復元するために、サーバーから必要な証明書を手動で同期または再発行することです。
この手順では、RA Agent
証明書、Subsystem
証明書、Directory Server (LDAP)
証明書、および PKI Tomcat (Web Server)
証明書という 4 つの重要な証明書を説明します。
どのサーバーが更新サーバーであるかわからない場合は、任意の IdM サーバーで次のコマンドを実行してください。このコマンドにより、CA 更新サーバーの識別名 (DN) が出力されます。
ldapsearch -Y GSSAPI -b cn=masters,cn=ipa,cn=etc,dc=example,dc=com ipaConfigString=caRenewalMaster dn
# ldapsearch -Y GSSAPI -b cn=masters,cn=ipa,cn=etc,dc=example,dc=com ipaConfigString=caRenewalMaster dn
Kerberos が利用できない場合は、Directory Manager のパスワードを使用して次のコマンドを使用してください。
ldapsearch -x -D 'cn=Directory Manager' -W -b cn=masters,cn=ipa,cn=etc,dc=example,dc=com ipaConfigString=caRenewalMaster dn
# ldapsearch -x -D 'cn=Directory Manager' -W -b cn=masters,cn=ipa,cn=etc,dc=example,dc=com ipaConfigString=caRenewalMaster dn
手順
IdM サービスが実行されていることを確認します。
ipactl status
# ipactl status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: いずれかのサービスが実行されていない場合は、強制的に起動します。
ipactl start -f
# ipactl start -f
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -f
または--force
フラグは、起動チェックの一部を省略します。これは、証明書の期限切れによりサービスが通信できない場合に必要です。更新サーバーと障害が発生したレプリカ間で、RA エージェント証明書とサブシステム証明書を比較します。
正常な更新サーバーと障害が発生したレプリカの両方で、RA エージェント証明書とサブシステム証明書のシリアル番号を取得し、それらが同一であることを確認します。
RA エージェント証明書とそれに対応する LDAP エントリー。シリアル番号は、セミコロンで区切られた
description
属性文字列の 2 番目の値です (例:2;SERIAL;…
)。openssl x509 -in /var/lib/ipa/ra-agent.pem -noout -serial ldapsearch -D "cn=directory manager" -W -b "uid=ipara,ou=people,o=ipaca" description
# openssl x509 -in /var/lib/ipa/ra-agent.pem -noout -serial # ldapsearch -D "cn=directory manager" -W -b "uid=ipara,ou=people,o=ipaca" description
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サブシステム証明書とそれに対応する LDAP エントリー。シリアル番号は、セミコロンで区切られた
description
属性文字列の 2 番目の値です (例:2;SERIAL;…
)。certutil -L -d /etc/pki/pki-tomcat/alias/ -n 'subsystemCert cert-pki-ca' | grep "Serial Number" ldapsearch -D "cn=directory manager" -W -b "uid=pkidbuser,ou=People,o=ipaca" description
# certutil -L -d /etc/pki/pki-tomcat/alias/ -n 'subsystemCert cert-pki-ca' | grep "Serial Number" # ldapsearch -D "cn=directory manager" -W -b "uid=pkidbuser,ou=People,o=ipaca" description
Copy to Clipboard Copied! Toggle word wrap Toggle overflow レプリカ上のシリアル番号が CA 更新サーバー上のシリアル番号と一致しない場合は、次のステップに進んでそれらを同期してください。
正常な証明書をレプリカに手動でコピーします。更新サーバーから、
ra-agent.pem
とサブシステム証明書を障害が発生したレプリカにコピーします。RA エージェント証明書ファイルをコピーします。
scp /var/lib/ipa/ra-agent.pem root@failed-replica.idm.example.com:/tmp/
# scp /var/lib/ipa/ra-agent.pem root@failed-replica.idm.example.com:/tmp/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サブシステム証明書をエクスポートします。
certutil -L -d /etc/pki/pki-tomcat/alias -n 'subsystemCert cert-pki-ca' -a > /tmp/subsystem.pem
# certutil -L -d /etc/pki/pki-tomcat/alias -n 'subsystemCert cert-pki-ca' -a > /tmp/subsystem.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サブシステム証明書をコピーします。
scp /tmp/subsystem.pem root@failed-replica.idm.example.com:/tmp/
# scp /tmp/subsystem.pem root@failed-replica.idm.example.com:/tmp/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
障害が発生したレプリカで、期限切れの RA エージェント証明書を置き換えます。
正常な証明書を次の場所にコピーします。
cp /tmp/ra-agent.pem /var/lib/ipa/ra-agent.pem
# cp /tmp/ra-agent.pem /var/lib/ipa/ra-agent.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow LDAP 内の対応するエントリーを更新して、正しい証明書の Blob とシリアル番号が含まれていることを確認します。このステップでは Directory Manager のパスワードが必要です。
新しい RA エージェント証明書を 1 行の Blob に変換し、変数に格納することで、LDAP 用に準備します。
RA_CERT_BLOB=$(sed -rn '/^-----BEGIN CERTIFICATE-----$/{:1;n;/^-----END CERTIFICATE-----$/b2;H;b1};:2;${x;s/\s//g;p}' /tmp/ra-agent.pem)
# RA_CERT_BLOB=$(sed -rn '/^-----BEGIN CERTIFICATE-----$/{:1;n;/^-----END CERTIFICATE-----$/b2;H;b1};:2;${x;s/\s//g;p}' /tmp/ra-agent.pem)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい証明書からシリアル番号を抽出し、変数に格納します。
RA_CERT_SERIAL=$(openssl x509 -in /tmp/ra-agent.pem -noout -serial | cut -d'=' -f2)
# RA_CERT_SERIAL=$(openssl x509 -in /tmp/ra-agent.pem -noout -serial | cut -d'=' -f2)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow LDAP データベースを変更する前に、IdM サービスが実行されていることを確認します。
ipactl start -f
# ipactl start -f
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい証明書の Blob とシリアル番号を使用して、RA エージェントの LDAP エントリーを更新します。Directory Manager のパスワードを入力するよう求められます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IDM.EXAMPLE.COM
は、IdM レルムに置き換えるか、カスタムの証明書サブジェクトベースを使用します。
障害が発生したレプリカで、期限切れのサブシステム証明書を置き換えます。
正常な証明書を NSS データベースにインポートします。これには NSS データベースパスワードが必要です。このパスワードは
/etc/pki/pki-tomcat/password.conf
にあります。次のコマンドで NSS データベースパスワードファイルの場所の変数を設定し、簡単に使用できるようにします。
PWDFILE=/etc/pki/pki-tomcat/alias/pwdfile.txt
# PWDFILE=/etc/pki/pki-tomcat/alias/pwdfile.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NSS データベースから古い期限切れのサブシステム証明書を削除します。
certutil -D -d /etc/pki/pki-tomcat/alias -n 'subsystemCert cert-pki-ca' -f $PWDFILE
# certutil -D -d /etc/pki/pki-tomcat/alias -n 'subsystemCert cert-pki-ca' -f $PWDFILE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /tmp/subsystem.pem
ファイルから新しい正常なサブシステム証明書を NSS データベースに追加します。certutil -A -d /etc/pki/pki-tomcat/alias -n 'subsystemCert cert-pki-ca' -t ",," -i /tmp/subsystem.pem -f $PWDFILE
# certutil -A -d /etc/pki/pki-tomcat/alias -n 'subsystemCert cert-pki-ca' -t ",," -i /tmp/subsystem.pem -f $PWDFILE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
RA エージェントのステップと同様に、LDAP 内の対応するエントリーを更新します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IDM.EXAMPLE.COM
は、IdM レルムに置き換えるか、カスタムの証明書サブジェクトベースを使用します。
レプリカの LDAP サービス用の一時証明書を手動で発行します。
障害が発生したレプリカで、Directory Server の NSS データベースにある既存の鍵から証明書署名要求 (CSR) を生成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記上記のコマンドは
/tmp/ldap.csr
を作成します。一部のバージョンのcertutil
では、ファイルにテキストがさらに追加される場合があります。ファイルに-----BEGIN NEW CERTIFICATE REQUEST-----
ブロックだけが含まれており、他には何も含まれていないことを確認してください。証明書が IdM CA によって署名されている場合:
障害が発生したレプリカで、CSR を更新サーバーにコピーします。
scp /tmp/ldap.csr root@renewal-master.idm.example.com:/tmp/
# scp /tmp/ldap.csr root@renewal-master.idm.example.com:/tmp/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新サーバーで、CSR に署名します。
ldap/
プリンシパルを使用して、証明書が GSSAPI バインドに対して有効であることを確認します。ipa cert-request /tmp/ldap.csr --principal="ldap/$(hostname -f)" --certificate-out=/tmp/ldap.pem
# ipa cert-request /tmp/ldap.csr --principal="ldap/$(hostname -f)" --certificate-out=/tmp/ldap.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新サーバーで、新しい証明書をレプリカにコピーします。
scp /tmp/ldap.pem root@failed-replica.idm.example.com:/tmp/
# scp /tmp/ldap.pem root@failed-replica.idm.example.com:/tmp/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 障害が発生したレプリカで、新しい証明書を Directory Server の NSS データベースにインポートします。
certutil -D -d "/etc/dirsrv/${DS_INSTANCE}" -n ${LDAP_CERT_NICKNAME} -f "${PWDFILE}" certutil -A -d "/etc/dirsrv/${DS_INSTANCE}" -n ${LDAP_CERT_NICKNAME} -t ",," -i /tmp/ldap.pem -f "${PWDFILE}"
# certutil -D -d "/etc/dirsrv/${DS_INSTANCE}" -n ${LDAP_CERT_NICKNAME} -f "${PWDFILE}" # certutil -A -d "/etc/dirsrv/${DS_INSTANCE}" -n ${LDAP_CERT_NICKNAME} -t ",," -i /tmp/ldap.pem -f "${PWDFILE}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
証明書が外部 CA によって署名されている場合:
-
/tmp/ldap.csr
ファイルを取得し、署名のために外部認証局に送信します。 -
新しい証明書ファイル (たとえば、
new_ldap_cert.pem
) を受け取ったら、それを障害が発生したレプリカの/tmp/
ディレクトリーにセキュアにコピーし、名前をldap.pem
に変更します。 障害が発生したレプリカで、新しい証明書を Directory Server の NSS データベースにインポートします。
certutil -D -d "/etc/dirsrv/${DS_INSTANCE}" -n ${ LDAP_CERT_NICKNAME} -f "${PWDFILE}" certutil -A -d "/etc/dirsrv/${DS_INSTANCE}" -n ${ LDAP_CERT_NICKNAME} -t ",," -i /tmp/ldap.pem -f "${PWDFILE}"
# certutil -D -d "/etc/dirsrv/${DS_INSTANCE}" -n ${ LDAP_CERT_NICKNAME} -f "${PWDFILE}" # certutil -A -d "/etc/dirsrv/${DS_INSTANCE}" -n ${ LDAP_CERT_NICKNAME} -t ",," -i /tmp/ldap.pem -f "${PWDFILE}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
レプリカの PKI Tomcat サービス用の一時証明書を手動で発行します。
障害の影響を受けたレプリカで、PKI Tomcat NSS データベースに保存されている既存の鍵を使用して CSR を生成します。
HOSTNAME=$(hostname -f) PWDFILE="/etc/pki/pki-tomcat/alias/pwdfile.txt" certutil -R -d /etc/pki/pki-tomcat/alias -k 'Server-Cert cert-pki-ca' -n 'Server-Cert cert-pki-ca' -s "CN=${HOSTNAME},O=IDM.EXAMPLE.COM" -a -f "${PWDFILE}" -o /tmp/server-cert.csr
# HOSTNAME=$(hostname -f) # PWDFILE="/etc/pki/pki-tomcat/alias/pwdfile.txt" # certutil -R -d /etc/pki/pki-tomcat/alias -k 'Server-Cert cert-pki-ca' -n 'Server-Cert cert-pki-ca' -s "CN=${HOSTNAME},O=IDM.EXAMPLE.COM" -a -f "${PWDFILE}" -o /tmp/server-cert.csr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IDM.EXAMPLE.COM
は、IdM レルムに置き換えるか、カスタムの証明書サブジェクトベースを使用します。障害が発生したレプリカで、CSR を更新サーバーにコピーします。
scp /tmp/server-cert.csr root@renewal-master.idm.example.com:/tmp/
# scp /tmp/server-cert.csr root@renewal-master.idm.example.com:/tmp/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新サーバーで、CSR に署名します。Web サーバー証明書の
host/
プリンシパルを使用します。ipa cert-request /tmp/server-cert.csr --principal="host/$(hostname -f)" --certificate-out=/tmp/server-cert.pem
# ipa cert-request /tmp/server-cert.csr --principal="host/$(hostname -f)" --certificate-out=/tmp/server-cert.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新サーバーで、新しい証明書をレプリカにコピーします。
scp /tmp/server-cert.pem root@failed-replica.idm.example.com:/tmp/
# scp /tmp/server-cert.pem root@failed-replica.idm.example.com:/tmp/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 障害が発生したレプリカで、新しい証明書を PKI Tomcat NSS データベースにインポートします。
certutil -D -d /etc/pki/pki-tomcat/alias -n 'Server-Cert cert-pki-ca' -f "${PWDFILE}" certutil -A -d /etc/pki/pki-tomcat/alias -n 'Server-Cert cert-pki-ca' -t ",," -i /tmp/server-cert.pem -f "${PWDFILE}"
# certutil -D -d /etc/pki/pki-tomcat/alias -n 'Server-Cert cert-pki-ca' -f "${PWDFILE}" # certutil -A -d /etc/pki/pki-tomcat/alias -n 'Server-Cert cert-pki-ca' -t ",," -i /tmp/server-cert.pem -f "${PWDFILE}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
サービスを再起動し、残りの証明書を更新します。
新しい証明書を使用するために、レプリカ上の IdM サービスを再起動します。
ipactl restart
# ipactl restart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 手動による変更を適用するために、
certmonger
サービスを再起動します。再起動すると、残りの証明書の更新が開始されます。systemctl restart certmonger
# systemctl restart certmonger
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
getcert list | grep -E "Request ID|status|expires"
を定期的に実行することで、更新プロセスを監視できます。すべての証明書がMONITORING
状態になれば、プロセスは完了です。 これで、
certmonger
サービスが CA と通信できるようになります。数分経っても 1 つ以上の証明書が更新されない場合は、手動で更新することを検討してください。getcert list getcert resubmit -i <REQUEST_ID>
# getcert list # getcert resubmit -i <REQUEST_ID>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow