22장. 만료된 시스템 인증서에서 복구
IdM(Identity Management) 인증서가 만료되면 웹 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. 복제본의 만료된 서비스 인증서에서 복구 링크 복사링크가 클립보드에 복사되었습니다!
이 실패 시나리오에서는 갱신 서버가 정상이지만 하나 이상의 복제본이 인증서를 갱신하지 못하고 이제 오프라인 상태입니다. 목표는 복제본을 복원하기 위해 서버에서 필요한 인증서를 수동으로 동기화하거나 다시 게시하는 것입니다.
이 절차에서는 4가지 중요 인증서 ( 인증서 및 RA Agent 인증서, Cryostat 인증서, LDAP)PKI Tomcat(Web Server) 인증서를 다룹니다.
갱신 서버인 서버가 확실하지 않은 경우 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 statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항입니다. 실행 중인 서비스가 없는 경우 강제로 시작하도록 합니다.
ipactl start -f
# ipactl start -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow -f또는--force플래그는 만료된 인증서로 인해 서비스를 통신할 수 없는 경우 필요한 일부 시작 검사를 바이패스합니다.갱신 서버와 실패한 복제본 간의 RA 에이전트 및 Cryostat 인증서를 비교합니다.
정상 갱신 서버와 실패한 복제본 모두에서 RA 에이전트 및 하위 시스템의 일련 번호를 검색하고 해당 서버가 동일한지 확인합니다.
RA 에이전트 인증서 및 해당 LDAP 항목. 일련 번호는 3진수로 구분된
설명특성 문자열에서 두 번째 값입니다(예: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" descriptionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 하위 시스템 인증서 및 해당 LDAP 항목. 일련 번호는 3진수로 구분된
설명특성 문자열에서 두 번째 값입니다(예: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" descriptionCopy 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.pemCopy 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.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow LDAP에서 해당 항목을 업데이트하여 올바른 인증서 Blob 및 일련 번호가 포함되어 있는지 확인합니다. 이 단계에는 Directory Manager 암호가 필요합니다.
한 줄 Blob으로 변환하고 변수에 저장하여 LDAP에 대한 새 RA 에이전트 인증서를 준비합니다.
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 -fCopy 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.txtCopy 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 $PWDFILECopy 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 $PWDFILECopy 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/Principal를 사용하여 인증서가 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.pemCopy 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 서버의 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 서버의 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.csrCopy 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에 서명합니다. 웹 서버 인증서에
host/principal를 사용합니다.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.pemCopy 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 restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow certmonger서비스를 다시 시작하여 수동 변경 사항을 적용합니다. 다시 시작되면 나머지 인증서를 갱신하기 시작해야 합니다.systemctl restart certmonger
# systemctl restart certmongerCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
정기적으로
getcert list | grep -E "Request ID|status|expires"를 실행하여 갱신 프로세스를 확인할 수 있습니다. 모든 인증서가MONITORING상태에 있으면 프로세스가 완료됩니다. 이제
certmonger서비스가 CA와 통신할 수 있어야 합니다. 몇 분 후에 하나 이상의 인증서가 갱신되지 않은 상태로 남아 있는 경우 수동으로 갱신하는 것이 좋습니다.getcert list getcert resubmit -i <REQUEST_ID>
# getcert list # getcert resubmit -i <REQUEST_ID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow