tl; dr cố định
Tôi đã chạy một phiên bản Jenkins trong một thời gian với chứng chỉ tự ký, hoạt động tốt, ngoại trừ rắc rối khi phải tạo ngoại lệ xác thực chứng chỉ trong trình duyệt. Vì vậy, hôm nay tôi đã nhận được chứng chỉ cấp 1 miễn phí từ StartSSL , đã thay đổi đường dẫn /etc/sysconfig/jenkins
và khởi động lại dịch vụ, nhưng nó hoàn toàn không hoạt động:
$ 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
---
Không có dấu hiệu lỗi trong /var/log/jenkins/jenkins.log
hoặc /var/log/messages
.
openssl
dường như nghĩ rằng chứng chỉ của tôi là hợp pháp:
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
[...]
Sau khi đặt nó vào tệp Java KeyStore, nó dường như vẫn hợp lệ (được ẩn danh là 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
Cửa hàng khóa chứng chỉ tự ký cũ không khác nhau nhiều:
$ 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
Tôi đã thử sử dụng chứng chỉ trực tiếp với JENKINS_ARGS="--httpsCertificate=/var/lib/jenkins/jenkins.crt.pem --httpsPrivateKey=/var/lib/jenkins/jenkins.key.pem"
, nhưng sau đó Jenkins hoàn toàn không bắt đầu:
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
Sau khi cài đặt chứng chỉ trung gian:
$ 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
Phiên bản 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)
Điều đó dường như không thay đổi bất cứ điều gì.
Cài đặt JENKINS_DEBUG_LEVEL="99"
không tạo ra bất kỳ dòng nhật ký có liên quan như tôi có thể nói.
Tôi tin rằng CSR cũ được tạo bằng 2048 bit và bit mới sử dụng 4096 - Đó có phải là nguyên nhân có thể không?
Cả hai khóa công khai là 2048 bit RSA.
Theo diff -u <(openssl x509 -in jenkins.crt.pem.old -text) <(openssl x509 -in jenkins.crt.pem -text)
chứng chỉ cũ được sử dụng sha256WithRSAEncryption
trong khi chứng chỉ mới sử dụng sha1WithRSAEncryption
thuật toán chữ ký.
Là bí danh ở tất cả quan trọng? Jenkins không hỗ trợ khóa dài hơn 2048 bit? Có phải Jenkins / OpenJDK / Amazon Linux không hoạt động với một số khóa?
Những gì khác tôi nên kiểm tra?