Jenkins non servirà con certificato CA firmato

tl; dr fisso

Ho eseguito un'istanza di Jenkins per un po 'con un certificato auto-firmato, che funziona bene, salvo il fastidio di wherer creare eccezioni di validation dei certificati nei browser. Così oggi ho ottenuto un certificato di livello libero 1 da StartSSL , ho cambiato il path in /etc/sysconfig/jenkins e ho riavviato il servizio, ma non funziona affatto:

 $ openssl s_client -connect localhost:8080 -debug CONNECTED(00000003) write to 0xdce210 [0xdeeca0] (171 bytes => 171 (0xAB)) 0000 - 16 03 01 00 a6 01 00 00-a2 03 03 52 e3 f5 18 90 ...........R.... 0010 - e2 24 10 6a 6e ee 24 88-cd 52 e8 a8 0b 6f 71 85 .$.jn.$..R...oq. 0020 - 3f 5b a1 53 7b 2c 74 fe-a2 68 25 00 00 54 00 a3 ?[.S{,t..h%..T.. 0030 - 00 9f 00 6b 00 6a 00 39-00 38 00 88 00 87 00 9d ...kj9.8...... 0040 - 00 3d 00 35 00 84 00 16-00 13 00 0a 00 a2 00 9e .=.5............ 0050 - 00 67 00 40 00 33 00 32-00 9a 00 99 00 45 00 44 .g.@.3.2.....ED 0060 - 00 9c 00 3c 00 2f 00 96-00 41 00 07 00 05 00 04 ...<./...A...... 0070 - 00 15 00 12 00 09 00 14-00 11 00 08 00 06 00 03 ................ 0080 - 00 ff 01 00 00 25 00 23-00 00 00 0d 00 18 00 16 .....%.#........ 0090 - 06 01 06 02 05 01 05 02-04 01 04 02 03 01 03 02 ................ 00a0 - 02 01 02 02 01 01 00 0f-00 01 01 ........... read from 0xdce210 [0xdf4200] (7 bytes => 0 (0x0)) 140506493065056:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177: --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 0 bytes and written 171 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE --- 

Non esiste alcuna indicazione di errori nei /var/log/jenkins/jenkins.log o /var/log/messages .

openssl sembra pensare che il mio certificato è legittimo:

 openssl x509 -in jenkins.crt.pem -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 925667 (0xe1fe3) Signature Algorithm: sha1WithRSAEncryption Issuer: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Class 1 Primary Intermediate Server CA Validity Not Before: Jan 24 16:19:28 2014 GMT Not After : Jan 25 15:09:34 2015 GMT [...] 

Dopo averlo inserito in un file di Java KeyStore sembra ancora valido (anonimizzato il FQDN):

 $ keytool -list -keystore jenkins.jks Enter keystore password: Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry jenkins_domain_tld, Jan 25, 2014, trustedCertEntry, Certificate fingerprint (MD5): 3D:6A:AB:83:0B:E8:21:DF:C3:17:E9:88:AD:19:24:EE 

Il vecchio negozio di chiavi certificato self-signed non è molto diverso:

 $ keytool -list -keystore jenkins.jks.old Enter keystore password: Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry jenkins_domain_tld, Jan 11, 2014, PrivateKeyEntry, Certificate fingerprint (MD5): A6:4E:F6:E8:56:D1:30:5E:11:63:59:C0:AA:24:B2:4F 

Ho provato a utilizzare il certificato direttamente con JENKINS_ARGS="--httpsCertificate=/var/lib/jenkins/jenkins.crt.pem --httpsPrivateKey=/var/lib/jenkins/jenkins.key.pem" , ma poi Jenkins iniziare affatto:

 Jan 25, 2014 5:22:47 PM winstone.Logger logInternal SEVERE: Container startup failed java.io.IOException: Failed to start a listener: winstone.HttpsConnectorFactory at winstone.Launcher.spawnListener(Launcher.java:209) at winstone.Launcher.<init>(Launcher.java:149) at winstone.Launcher.main(Launcher.java:354) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:622) at Main._main(Main.java:293) at Main.main(Main.java:98) Caused by: java.io.IOException: DerValue.getBigInteger, not an int 48 at sun.security.util.DerValue.getBigInteger(DerValue.java:508) at winstone.HttpsConnectorFactory.readPEMRSAPrivateKey(HttpsConnectorFactory.java:171) at winstone.HttpsConnectorFactory.start(HttpsConnectorFactory.java:90) at winstone.Launcher.spawnListener(Launcher.java:207) ... 8 more 

Dopo l'installazione dei certificati intermedi:

 $ keytool -list -keystore jenkins.jks Enter keystore password: Keystore type: JKS Keystore provider: SUN Your keystore contains 3 entries sub.class1.server.ca, Jan 25, 2014, trustedCertEntry, Certificate fingerprint (MD5): 30:B0:5A:F7:B2:F4:BE:0C:28:67:15:EA:CC:5B:24:20 ca, Jan 25, 2014, trustedCertEntry, Certificate fingerprint (MD5): 22:4D:8F:8A:FC:F7:35:C2:BB:57:34:90:7B:8B:22:16 jenkins_domain_tld, Jan 25, 2014, trustedCertEntry, Certificate fingerprint (MD5): 3D:6A:AB:83:0B:E8:21:DF:C3:17:E9:88:AD:19:24:EE 

Versione Java:

 java version "1.7.0_51" OpenJDK Runtime Environment (IcedTea 2.4.4) (ArchLinux build 7.u51_2.4.4-1-x86_64) OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode) 

Non sembrava cambiare nulla.

Impostare JENKINS_DEBUG_LEVEL="99" non ha prodotto alcuna linea di registro per quanto ansible.

Credo che la vecchia CSR sia stata generata usando 2048 bit e il nuovo con 4096 – È una ansible causa?

Entrambe le chiavi pubbliche sono 2048 bit RSA.

Secondo diff -u <(openssl x509 -in jenkins.crt.pem.old -text) <(openssl x509 -in jenkins.crt.pem -text) il vecchio certificato utilizzato sha256WithRSAEncryption mentre il nuovo usa algorithm firma sha1WithRSAEncryption .

L'alias è affatto importnte? Jenkins non support chiavi più lunghe di 2048 bit? Jenkins / OpenJDK / Amazon Linux non funziona con alcune chiavi?

Che altro devo controllare?

  • Nomi di dominio multipli per i siti web di IIS con SSL
  • Come risolvere il RDP sul server Windows Server 2012?
  • Codice di errore: ssl_error_rx_record_too_long
  • I dati POST sono crittografati su una connessione SSL?
  • SSL / TLS Cipher Priority
  • Certificato SSL di Starfield Wildcard non attendibile in tutti i browser
  • Posso avere un certificato SSL per l'accesso diretto IP?
  • HTTPS utilizza TCP o UDP?
  • One Solution collect form web for “Jenkins non servirà con certificato CA firmato”

    Credo che avrai bisogno di un PrivateKeyEntry.

    Potresti aver generato la CSR con SSL aperto anziché keytool.

    Puoi provare:

     openssl pkcs12 -inkey /var/lib/jenkins/jenkins.key.pem -in /var/lib/jenkins/jenkins.crt.pem -export -out keys.pkcs12 keytool -importkeystore -srckeystore keys.pkcs12 -srcstoretype pkcs12 -destkeystore jenkins.jks 

    Vedi anche per un riferimento:

    https://stackoverflow.com/questions/6252045/creating-a-keystore-from-private-key-and-a-public-key

    Se si guarda alla vecchia libreria chiave, la voce è Privata rispetto a Trusted.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.