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:

  • Imansible accedere al server Jenkins
  • IE8 HTTPs Scarica il problema
  • Certificato SSL su Apache non funzionante su iPhone e iPad
  • Che cosa è TLS e come si confronta con SSL?
  • Come bind il sito web e la sua versione SSL utilizzando lo stesso port
  • Stesso SSL per più domini
  •  $ 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?

  • Come posso modificare programmabilmente una configuration dei lavori jenkins senza un riavvio?
  • Opzione sconosciuta git config --local riportta da Jenkins
  • Come mostrare i gruppi di utenti jenkins?
  • Jenkins che tira dal Bonobo Git Server
  • L'esecuzione di Hudson si basa con una priorità di process inferiore
  • Jenkins CI - Non è ansible allocare memory
  • 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.