On 2/15/22 21:25, Rob Crittenden wrote:

Leo Galambos via FreeIPA-users wrote:
Hello,

our FreeIPA was running with correct certificates for 2 years (subject
"CN=ipa.hq.company,O=HQ.COMPANY"). Unfortunately, the new certificates
(ocspSigningCert, auditSigningCert) were recreated with simple
"CN=localhost" (automatically), i.e. the original value
"CN=ipa.hq.company,O=HQ.COMPANY" was ignored by certmonger.

Is this the renewal master? (ipa config-show | grep renewal)


Yes, it is: IPA CA renewal master: ipa.hq.company


You stripped out the key and certificate storage lines, can we see that
as well?


Everything is default, dir /etc/pki/pki-tomcat/alias and pin are set, e.g.:

Request ID '20210120221129':
    status: MONITORING
    stuck: no
    key pair storage: type=NSSDB,location='/etc/pki/pki-tomcat/alias',nickname='ocspSigningCert cert-pki-ca',token='NSS Certificate DB',pin set     certificate: type=NSSDB,location='/etc/pki/pki-tomcat/alias',nickname='ocspSigningCert cert-pki-ca',token='NSS Certificate DB'
    CA: dogtag-ipa-ca-renew-agent
    issuer: CN=Certificate Authority,O=HQ.COMPANY
    subject: CN=localhost
    expires: 2024-02-04 22:28:36 CET
    eku: id-kp-OCSPSigning
    profile: caOCSPCert
    pre-save command: /usr/libexec/ipa/certmonger/stop_pkicad
    post-save command: /usr/libexec/ipa/certmonger/renew_ca_cert "ocspSigningCert cert-pki-ca"
    track: yes
    auto-renew: yes

^^^ this one is missing in the NSS DB now (the rotation removed it from NSS DB!), but 'auditSigningCert' seems to be fine (except of its CN=localhost). PIN is identical to /etc/pki/pki-tomcat/alias/pwdfile.txt

*** Before rotation:

# certutil -L -d alias

Certificate Nickname                                         Trust Attributes
SSL,S/MIME,JAR/XPI

caSigningCert cert-pki-ca CTu,Cu,Cu
ocspSigningCert cert-pki-ca                                  u,u,u
subsystemCert cert-pki-ca                                    u,u,u
auditSigningCert cert-pki-ca u,u,Pu
Server-Cert cert-pki-ca                                      u,u,u

*** After rotation:

# certutil -L -d /etc/pki/pki-tomcat/alias

Certificate Nickname                                         Trust Attributes
SSL,S/MIME,JAR/XPI

caSigningCert cert-pki-ca CTu,Cu,Cu
subsystemCert cert-pki-ca                                    u,u,u
Server-Cert cert-pki-ca                                      u,u,u
auditSigningCert cert-pki-ca u,u,Pu

# certutil -L -d /etc/pki/pki-tomcat/alias -n 'ocspSigningCert cert-pki-ca'
certutil: Could not find cert: ocspSigningCert cert-pki-ca
: PR_FILE_NOT_FOUND_ERROR: File not found
# certutil -L -d /etc/pki/pki-tomcat/alias -n 'auditSigningCert cert-pki-ca'
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 31 (0x1f)
        Signature Algorithm: PKCS #1 SHA-256 With RSA Encryption
        Issuer: "CN=Certificate Authority,O=HQ.COMPANY"
        Validity:
            Not Before: Mon Feb 14 21:29:37 2022
            Not After : Sun Feb 04 21:29:37 2024
        Subject: "CN=localhost"

Anyway, if I import my previous 'ocspSigningCert cert-pki-ca' back into /etc/pki/pki-tomcat/alias and rollback ca.ocsp_signing.cert and ca.ocsp_signing.certreq in CS.cfg - would it be enough to fix this?


The cow may be out of the barn already, but certmonger should have
already been aware of the hostname when the cert was re-issued. You can
determine the request file name in /var/lib/certmonger/requests by
greeping for the request ID (it may or may not match the filename).


All parameters seems to be OK in the request files, except of the CN=localhost related to two "new" buggy certificates.


Then grep template_ from that file. At this point it may be CN=localhost
but it would be interesting to see what is there.


BTW templates: auditSigningCert points to caSignedLogCert, ocspSigningCert points to caOCSPCert. Both caSignedLogCert.cfg and caOCSPCert.cfg exist in /var/lib/pki/pki-tomcat/ca/profiles/ca. None of them is owned by RPM package (O/S is RHEL 8.5). caOCSPCert.profile also exists in /var/lib/pki/pki-tomcat/conf/ca, again not owned by any RPM. caSignedLogCert.profile does not exist on my disk AFAIK.

ad ocspSigningCert) There is a correct value template_subject=CN=OCSP Subsystem,O=HQ.COMPANY

'csr' attribute in the request file includes CSR with:

Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: CN = localhost
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption

'cert' attribute has the respective cert.

After `getcert resubmit ...` it cannot be changed due to "status: CA_UNREACHABLE".

ad auditSigningCert) template_subject=CN=CA Audit,O=HQ.COMPANY

After `getcert resubmit ...` the 'csr' attribute seems to be OK:

Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: O = HQ.COMPANY, CN = CA Audit
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption

'cert' attribute is still the old one (with CN=localhost) due to "Error 7 connecting to http://ipa.hq.company:8080/ca/ee/ca/profileSubmit: Couldn't connect to server" (tomcat is down - OCSP cert is missing).

CS.cfg: ca.audit_signing.cert identical to 'auditSigningCert cert-pki-ca' (NSS DB /etc/pki/pki-tomcat/alias), ca.signing.cert is 'caSigningCert cert-pki-ca', ca.sslserver.cert is 'Server-Cert cert-pki-ca', ca.subsystem.cert is 'subsystemCert cert-pki-ca', and ca.ocsp_signing.cert is identical to 'cert' attribute of the certmonger's ocspSigningCert request file.

# ldapsearch -LLL -D 'cn=directory manager' -W -b uid=pkidbuser,ou=people,o=ipaca userCertificate description seeAlso

returns "userCertificate" identical to CS.cfg's ca.subsystem.cert. So this part of the system seems to be OK.

Summary: ocspSigningCert was rotated in CS.cfg, then it was lost, and the old one was removed from NSS DB.


During rotation, I can see this sequence in Tomcat's CA debug log:

1) 'Server-Cert cert-pki-ca' was processed with "INFO: EnrollProfile: - subject: CN=ipa.hq.company,O=HQ.COMPANY"

2) 'ocspSigningCert cert-pki-ca' came with "INFO: EnrollProfile: - subject: CN=localhost"

3) after less than 1 minute, something fails: [AuthorityMonitor] WARNING: CAEngine: Error initializing lightweight CA: Failed to update certificate; nickname conflict
Failed to update certificate; nickname conflict
        at com.netscape.ca.CertificateAuthority.init(CertificateAuthority.java:426)         at org.dogtagpki.server.ca.CAEngine.readAuthority(CAEngine.java:1441)
        at com.netscape.ca.AuthorityMonitor.run(AuthorityMonitor.java:162)
        at java.lang.Thread.run(Thread.java:750)
Caused by: Failed to update certificate; nickname conflict
        at com.netscape.ca.CertificateAuthority.checkForNewerCert(CertificateAuthority.java:504)         at com.netscape.ca.CertificateAuthority.init(CertificateAuthority.java:418)
        ... 3 more
Caused by: org.mozilla.jss.NicknameConflictException
        at org.mozilla.jss.CryptoManager.importCertPackageNative(Native Method)         at org.mozilla.jss.CryptoManager.importUserCACertPackage(CryptoManager.java:739)         at com.netscape.ca.CertificateAuthority.checkForNewerCert(CertificateAuthority.java:480)
        ... 4 more


Cheers,
LG


It should be straightforward to get new certificates by using the -N
<subject> option with resubmit but it would be nice to try to figure out
how it got into this situation.

For example:

# getcert resubmit -i 20210120221129 -N 'CN=OCSP Subsystem,O=HQ.COMPANY'
-v -w


Just for record:

Unfortunately, OCSP cannot be recovered this way (NSS DB does not include OCSP cert/key pair). I tried to recover auditSigningCert, but it also fails due to dead tomcat:

# getcert resubmit -i 20210120221127 -N 'CN=CA Audit,O=HQ.COMPANY' -v -w
Resubmitting "20210120221127" to "dogtag-ipa-ca-renew-agent".
State GENERATING_CSR, stuck: no.
State SUBMITTING, stuck: no.
State CA_UNREACHABLE, stuck: no.

_______________________________________________
FreeIPA-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedorahosted.org/archives/list/[email protected]
Do not reply to spam on the list, report it: 
https://pagure.io/fedora-infrastructure

Reply via email to