Skip to content

2024-06-26 - Problème de connexion à notre Jenkins

Quand on essaie de se connecter à notre Jenkins, un message d'erreur s'affiche :

We are sorry...

Invalid requester

Ce message est affiché par Keycloak, notre IdP, qui est utilisé par Jenkins pour authentifier les utilisateurs grâce au protocol SAML2.

Un message d'erreur dans les logs de Keycloak lors d'un tentative de connexion à Jenkins indique qu'un certificat a expiré :

2024-06-26 07:50:18,723 ERROR [org.keycloak.protocol.saml.SamlService] (executor-thread-1521) request validation failed: org.keycloak.common.VerificationException: Certificate is not valid.

Hypothèse : ce sont les certificats de Jenkins

Je retrouve l'URL de ses metadata : https://jenkins.common.computablefacts.com/securityRealm/metadata Puis je mets chacun des 2 certificats dans un fichier afin d'afficher les dates de validité.

Certificat 1 - signing

-----BEGIN CERTIFICATE-----
MIIC+jCCAeKgAwIBAgIVAP9djBH3kxkewztRJoBT1zz7O3gxMA0GCSqGSIb3DQEBCwUAMBcxFTAT
BgNVBAMMDFNBTUwtamVua2luczAeFw0yNDA2MTQyMTQ1MzhaFw0yNTA2MTQyMTQ1MzhaMBcxFTAT
BgNVBAMMDFNBTUwtamVua2luczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKf7bv7Q
T8BxUOZJ+WAqcvZANI+OjF7wG7L+Mt2Wv6gL4FXkcG3ES44n3tSA0FF6vHF2n8+9qHqq96w5GH+e
3Keo2xJk94DCslGK5x7wumOklQCd4e4aST9nZv7l+KFPhT1rQhjgULe0KjR2SW9K8NZzEDzRk+R7
qvMT26Z2MXUcXU7zDy7pcg6DFpkgZI3MkPWhIXsTloHfy9CyfsDdPXnTs5u5aCBhC35XneLOPstl
beBvsvBdWImSKffp3LH1bEF4aS1GanrIeCfGyL3IyCjDC5UQQU/GUHf4cNXjaX6a0pr3E0fdi9jQ
QF1Yo3AavXEWOcrjRJakM+b34RCYAQ8CAwEAAaM9MDswHQYDVR0OBBYEFO6u9wswdSB9aYTTJVMX
3nGeHpIrMBoGA1UdEQQTMBGCD2NuPVNBTUwtamVua2luczANBgkqhkiG9w0BAQsFAAOCAQEALI4C
VQmoMD2Efc/4fS/Cc+JiPyzh5DKUPORwWjxUJjo+H5Afbb8Bqmz8c804vt69fRNv5nkRioKKKuoN
7Oo5URmybM1IcC42U67XSh/pRkMHMbEwzIeqp2HNg2gkkkiDWI/wyGL727Wl63ruxeEV73SAp4A9
MIBmn/IkaiMkMqbS6KeYtESkloHmPdI9mJU51eiu5j9WNcFWklXIxg7va9hKIq6fw6Pqh7ugVoND
kWA1+qeC2E8x88KonCc7OyVTtzGFTIV992onhQFhlhtf/2sx12rmImtNqGLZjG2L9DlrZL2j68EW
ymLCTMEyIhifQY5RZztO6oa1TIGsTEdjBQ==
-----END CERTIFICATE-----

J'affiche les dates avec cette commande :

[10:20:06]$ openssl x509 -in jenkins-signing-cert.crt -noout -text
Certificate:
...
        Validity
            Not Before: Jun 14 21:45:38 2024 GMT
            Not After : Jun 14 21:45:38 2025 GMT
...

Certificat 2 - encryption

-----BEGIN CERTIFICATE-----
MIIC+jCCAeKgAwIBAgIVAP9djBH3kxkewztRJoBT1zz7O3gxMA0GCSqGSIb3DQEBCwUAMBcxFTAT
BgNVBAMMDFNBTUwtamVua2luczAeFw0yNDA2MTQyMTQ1MzhaFw0yNTA2MTQyMTQ1MzhaMBcxFTAT
BgNVBAMMDFNBTUwtamVua2luczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKf7bv7Q
T8BxUOZJ+WAqcvZANI+OjF7wG7L+Mt2Wv6gL4FXkcG3ES44n3tSA0FF6vHF2n8+9qHqq96w5GH+e
3Keo2xJk94DCslGK5x7wumOklQCd4e4aST9nZv7l+KFPhT1rQhjgULe0KjR2SW9K8NZzEDzRk+R7
qvMT26Z2MXUcXU7zDy7pcg6DFpkgZI3MkPWhIXsTloHfy9CyfsDdPXnTs5u5aCBhC35XneLOPstl
beBvsvBdWImSKffp3LH1bEF4aS1GanrIeCfGyL3IyCjDC5UQQU/GUHf4cNXjaX6a0pr3E0fdi9jQ
QF1Yo3AavXEWOcrjRJakM+b34RCYAQ8CAwEAAaM9MDswHQYDVR0OBBYEFO6u9wswdSB9aYTTJVMX
3nGeHpIrMBoGA1UdEQQTMBGCD2NuPVNBTUwtamVua2luczANBgkqhkiG9w0BAQsFAAOCAQEALI4C
VQmoMD2Efc/4fS/Cc+JiPyzh5DKUPORwWjxUJjo+H5Afbb8Bqmz8c804vt69fRNv5nkRioKKKuoN
7Oo5URmybM1IcC42U67XSh/pRkMHMbEwzIeqp2HNg2gkkkiDWI/wyGL727Wl63ruxeEV73SAp4A9
MIBmn/IkaiMkMqbS6KeYtESkloHmPdI9mJU51eiu5j9WNcFWklXIxg7va9hKIq6fw6Pqh7ugVoND
kWA1+qeC2E8x88KonCc7OyVTtzGFTIV992onhQFhlhtf/2sx12rmImtNqGLZjG2L9DlrZL2j68EW
ymLCTMEyIhifQY5RZztO6oa1TIGsTEdjBQ==
-----END CERTIFICATE-----

J'affiche les dates avec cette commande :

[10:23:40]$ openssl x509 -in jenkins-encryption-cert.crt -noout -text
Certificate:
...
        Validity
            Not Before: Jun 14 21:45:38 2024 GMT
            Not After : Jun 14 21:45:38 2025 GMT
...

Constats : - les certificats sont valides (nous sommes le 26/06/2024) - les certificats ont été renouvellés le 14/06

Hypothèse : Keycloak n'a pas les nouveaux certificats. Il a donc les précédents qui ne sont plus valides d'où le message d'erreur.

Dans Keycloak, pour le royaume computablefacts et pour le client Https://jenkins.common.computablefacts.com/securityRealm/finishLogin, Dans l'onglet Keys, il y a 2 certificats "Signing Key" et "Encryption Key". Je vais, avec la même méthode que ci-dessus, afficher les dates de validité de ces certificats.

Signing Key

-----BEGIN CERTIFICATE-----
MIIC+TCCAeGgAwIBAgIUIZsjCLdO0r69qYfdO5v4r/sdK3YwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMU0FNTC1qZW5raW5zMB4XDTIzMDYxMzIwNDQwNloXDTI0MDYxMjIwNDQwNlowFzEVMBMGA1UEAwwMU0FNTC1qZW5raW5zMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmIdeCs5k0f3q/6SbOk270gg/ZNEWB+IX9RlP7hhSsf1fxmLhnrulbHzmTfZWLXe/eCVWMo7ltNvHEgibylXUJc36miLgVlugCTC504EtMUpqKK5xn6WyC6gRzOi66Su/RNvn6XQQ/slviWmjNnoNZK5QFnNz2e4T2d/4grbkLWWWMKCBWbbXMTWn/MzVFmO/7aSCLmDgATdlBuV9pt02yOIeBxUFeWREccfH681RcOAKdFC6JZekZNRVNsCkuW2RkF9ovX7yCxaWMrF5pplbWEPXVmJEYn6FLQBFKdTH5aMAGmnaLXmF6UkTNosmjKmYbDZk59/6Hq76ENsQQvVYnQIDAQABoz0wOzAdBgNVHQ4EFgQUkGU4HWDMwsFoVDBasjPL6dTE+0wwGgYDVR0RBBMwEYIPY249U0FNTC1qZW5raW5zMA0GCSqGSIb3DQEBCwUAA4IBAQBDbkmvzutRPBYeQHGxveZyWkZGhu0t+yGeHYAAdGLYrHLLCcDR2BOokBLwHunH0I//GRTejkUgPTAhJoWRF1/e7YBsXS/GlI/2APPFKQK7WQQD9Ww3peBDTqzTikd7O7Pl7HdfbHHdbUQpwmCNYFeJpEcRirhJrtkrY2nAXh3A/kfGcg+r64DOQPmoArkQ9cMdh5gP1VVYmo8xD2lSAtc9hMRs74sGs1ETtxzTsAB7Yg6HQnU24JbT9HW1q4bTzqg3+8+t6DHuVWyXiDhl8YUto8XQTmIJWrJ+bxNtYlX3e+fTHLe4lOYxWeoeL0P6refklR9mfrIJ5vmOmhorCCEv
-----END CERTIFICATE-----

Je vois que c'est bien un certificat de Jenkins et qu'il a expiré :

[10:42:46]$ openssl x509 -in jenkins-signing-cert-kc.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            21:9b:23:08:b7:4e:d2:be:bd:a9:87:dd:3b:9b:f8:af:fb:1d:2b:76
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = SAML-jenkins
        Validity
            Not Before: Jun 13 20:44:06 2023 GMT
            Not After : Jun 12 20:44:06 2024 GMT
        Subject: CN = SAML-jenkins
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption

Encryption Key

-----BEGIN CERTIFICATE-----
MIIC+TCCAeGgAwIBAgIUIZsjCLdO0r69qYfdO5v4r/sdK3YwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMU0FNTC1qZW5raW5zMB4XDTIzMDYxMzIwNDQwNloXDTI0MDYxMjIwNDQwNlowFzEVMBMGA1UEAwwMU0FNTC1qZW5raW5zMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmIdeCs5k0f3q/6SbOk270gg/ZNEWB+IX9RlP7hhSsf1fxmLhnrulbHzmTfZWLXe/eCVWMo7ltNvHEgibylXUJc36miLgVlugCTC504EtMUpqKK5xn6WyC6gRzOi66Su/RNvn6XQQ/slviWmjNnoNZK5QFnNz2e4T2d/4grbkLWWWMKCBWbbXMTWn/MzVFmO/7aSCLmDgATdlBuV9pt02yOIeBxUFeWREccfH681RcOAKdFC6JZekZNRVNsCkuW2RkF9ovX7yCxaWMrF5pplbWEPXVmJEYn6FLQBFKdTH5aMAGmnaLXmF6UkTNosmjKmYbDZk59/6Hq76ENsQQvVYnQIDAQABoz0wOzAdBgNVHQ4EFgQUkGU4HWDMwsFoVDBasjPL6dTE+0wwGgYDVR0RBBMwEYIPY249U0FNTC1qZW5raW5zMA0GCSqGSIb3DQEBCwUAA4IBAQBDbkmvzutRPBYeQHGxveZyWkZGhu0t+yGeHYAAdGLYrHLLCcDR2BOokBLwHunH0I//GRTejkUgPTAhJoWRF1/e7YBsXS/GlI/2APPFKQK7WQQD9Ww3peBDTqzTikd7O7Pl7HdfbHHdbUQpwmCNYFeJpEcRirhJrtkrY2nAXh3A/kfGcg+r64DOQPmoArkQ9cMdh5gP1VVYmo8xD2lSAtc9hMRs74sGs1ETtxzTsAB7Yg6HQnU24JbT9HW1q4bTzqg3+8+t6DHuVWyXiDhl8YUto8XQTmIJWrJ+bxNtYlX3e+fTHLe4lOYxWeoeL0P6refklR9mfrIJ5vmOmhorCCEv
-----END CERTIFICATE-----

Je vois également que ce certificat de Jenkins a expiré :

[10:44:56]$ openssl x509 -in jenkins-encryption-cert-kc.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            21:9b:23:08:b7:4e:d2:be:bd:a9:87:dd:3b:9b:f8:af:fb:1d:2b:76
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = SAML-jenkins
        Validity
            Not Before: Jun 13 20:44:06 2023 GMT
            Not After : Jun 12 20:44:06 2024 GMT
        Subject: CN = SAML-jenkins
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption

Je vais donc importé les nouveaux certificats de Jenkins, ceux que j'ai récupérés dans ses metadata, dans Keycloak.

Pour chaque certificat : - je clique sur "Import" - je choisis "Certificate PEM" - je sélectionne le fichier du nouveau certificat - je valide en cliquant sur "Import" - j'ai un message confirmant que l'import s'est bien passé

Le problème est résolu.