Создание сертификата SSL, подписанного сертификатом СА в Jetty
Я пытаюсь настроить jetty-distribution-9.3.1.v20150714
бэкэнд работает на Java 1.8.0_45-b14
с сертификатом, подписанным самозаверяющим сертификатом CA, для закрепления SSL.
Следуя руководству Apple, я создал самозаверяющий сертификат CA, а затем создал сертификат на основе этого сертификата CA.
Результатом является ServerCertificate.p12
с сертификатом сервера и закрытым ключом и root.cer
файл, который будет использоваться для закрепления.
$ keytool -list -keystore keystore.p12 -storetype pkcs12
server, Jul 27, 2015, PrivateKeyEntry,
Certificate fingerprint (SHA1): AA:BB:CC.........11:22:33
Ранее я работал с сертификатами, подписанными доверенными центрами сертификации, поэтому в бэкэнде должен быть правильно настроен SSL. Платформа закрепления мобильного приложения была протестирована с другим самозаверяющим веб-сайтом, он хорошо работает.
Но приложение не может соединиться с моим бэкэндом с этим хранилищем ключей: Trust anchor for certification path not found.
У меня было ощущение, что сертификат CA отсутствует в хранилище ключей, поэтому я попытался добавить его с keytool -import -alias root -keystore keystore.p12 -storetype pkcs12 -trustcacerts -file root.crt
(.crt - читаемый файл сертификата base64), но это не помогло.
# after adding root.crt
$ keytool -list -keystore keystore.p12 -storetype pkcs12
server, Jul 27, 2015, PrivateKeyEntry,
Certificate fingerprint (SHA1): AA:BB:CC.........11:22:33
root, Jul 27, 2015, trustedCertEntry,
Certificate fingerprint (SHA1): FF:DD:EE.........33:22:11
$ openssl s_client -connect example.com:443
CONNECTED(00000003)
depth=1 CN = Product CA, C = AU
verify error:num=19:self signed certificate in certificate chain
---
Certificate chain
0 s:/CN=Product/C=AU
i:/CN=Product CA/C=AU
1 s:/CN=Product CA/C=AU
i:/CN=Product CA/C=AU
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDADCCAei..................................
.............................................
..........BASE64.STUFF.......................
.............................................
................................eTVowuY+erkaf
+sIO4w==
-----END CERTIFICATE-----
subject=/CN=Product/C=AU
issuer=/CN=Product CA/C=AU
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: DH, 2048 bits
---
SSL handshake has read 2732 bytes and written 636 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : DHE-RSA-AES256-GCM-SHA384
Session-ID: 55B6.........................2B4
Session-ID-ctx:
Master-Key: 1C.............................................................................30AF
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1497776932
Timeout : 300 (sec)
Verify return code: 19 (self signed certificate in certificate chain)
---
closed
Что интересно, curl https://example.com --cacert server.cer
работает хорошо... (это не без --cacert)
Есть идеи, что не так с конфигурацией?