Причины могут быть разными, -Djavax.net.debug = ssl - ваш друг, как подсказывает Владимир Дюжев.
В любом случае, это может быть проблема с сертификатом - убедитесь, что у вас есть правильное хранилище ключей и доверие. Вам потребуется одна запись в хранилище ключей с:
- закрытый ключ
- сертификат
- полная цепочка эмитента сертификата
И склад доверенных сертификатов:
- полная цепочка сертификатов для сертификата сервера
У меня проблемы с генерацией правильного хранилища ключей (trustore легко - просто используйте keytool). Для хранилища ключей вам нужен st вроде этого (Linux с openssl + java):
# convert all to PEM
openssl x509 -in ${ca}.der -inform DER -outform PEM -out ${ca}.pem
openssl x509 -in ${subca}.der -inform DER -outform PEM -out ${subca}.pem
# create one large PEM file containing certificate chain
cat ${ca}.pem ${subca}.pem > tmp_cert_chain.pem
# generate PKCS#12 BUNDLE
openssl pkcs12 -export -in ${cert}.pem -inkey ${key}.pem -certfile tmp_cert_chain.pem -out tmp_pkcs12.pfx
# convert PKCS#12 bundle to JKS
keytool -importkeystore -srckeystore tmp_pkcs12.pfx -srcstoretype pkcs12 -srcstorepass ${storepass} -destkeystore $keystore -deststoretype jks -deststorepass ${storepass}
# print out JKS keystore
keytool -list -keystore $keystore -storepass $storepass