जेनकिन्स सीए के हस्ताक्षरित प्रमाण पत्र के साथ सेवा नहीं देगा


9

टीएल; डीआर फिक्स्ड

मैं स्वयं हस्ताक्षरित प्रमाण पत्र के साथ कुछ समय के लिए जेनकिन्स उदाहरण चला रहा हूं, जो ब्राउज़रों में प्रमाणपत्र सत्यापन अपवाद बनाने की परेशानी को छोड़कर ठीक काम करता है। इसलिए आज मुझे StartSSL से एक नि: शुल्क टियर 1 प्रमाणपत्र मिला , इसमें पथ को बदल दिया /etc/sysconfig/jenkinsऔर सेवा को फिर से शुरू किया, लेकिन यह इस तरह नहीं है:

$ 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   ...k.j.9.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.....E.D
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
---

में /var/log/jenkins/jenkins.logया त्रुटियों का कोई संकेत नहीं है /var/log/messages

openssl लगता है कि मेरा प्रमाण पत्र वैध है:

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
[...]

इसे जावा कीस्टोर फाइल में डालने के बाद भी यह मान्य प्रतीत होता है (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

पुराना स्व-हस्ताक्षरित प्रमाणपत्र कुंजी स्टोर बहुत अलग नहीं है:

$ 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

मैंने सीधे प्रमाण पत्र का उपयोग करने की कोशिश की JENKINS_ARGS="--httpsCertificate=/var/lib/jenkins/jenkins.crt.pem --httpsPrivateKey=/var/lib/jenkins/jenkins.key.pem", लेकिन फिर जेनकिन्स शुरू नहीं होगा:

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

मध्यवर्ती प्रमाणपत्र स्थापित करने के बाद:

$ 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

जावा संस्करण:

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)

यह कुछ भी बदलने के लिए प्रतीत नहीं हुआ।

JENKINS_DEBUG_LEVEL="99"जहाँ तक मैं बता सकता हूँ, सेटिंग किसी भी प्रासंगिक लॉग लाइनों का उत्पादन नहीं किया।

मेरा मानना ​​है कि पुराने CSR को 2048 बिट्स और 4096 का उपयोग करके नया बनाया गया था - क्या यह संभव कारण है?

दोनों सार्वजनिक कुंजी 2048 बिट्स आरएसए हैं।

diff -u <(openssl x509 -in jenkins.crt.pem.old -text) <(openssl x509 -in jenkins.crt.pem -text)पुराने प्रमाण पत्र के अनुसार , sha256WithRSAEncryptionजबकि नया sha1WithRSAEncryptionहस्ताक्षर एल्गोरिथ्म का उपयोग करता है।

क्या उपनाम सभी महत्वपूर्ण है? क्या जेनकिंस 2048 बिट्स से अधिक कुंजी का समर्थन नहीं करता है? क्या जेनकींस / ओपनजेडके / अमेज़ॅन लिनक्स कुछ कुंजियों के साथ काम नहीं करता है?

मुझे और क्या जाँच करनी चाहिए?


इस व्यक्ति को भी एक अलग वातावरण में एक स्टार्टएसएसएल सर्टिफिकेट के लिए आगे बढ़ने में समस्या हो रही है। serverfault.com/questions/569803/…
जेसनअज़े

जवाबों:


9

मुझे विश्वास है कि आपको एक PrivateKeyEntry की आवश्यकता होगी।

आपने keytool के बजाय खुले SSL के साथ CSR उत्पन्न किया होगा।

तुम कोशिश कर सकते हो:

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

इसे संदर्भ के लिए भी देखें:

/programming/6252045/creating-a-keystore-from-private-key-and-a-public-key

यदि आप अपने पुराने कीस्टोर को देखते हैं, तो प्रवेश निजी बनाम विश्वसनीय है।


बहुत बड़ी फ़िदालिंग के बाद (पता चलता है कि keytoolलंबे पासवर्ड को संभालने में विफल रहता है ) मैं इसे परिवर्तित करने में सक्षम था, और फिर इसने काम किया।
l0b0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.