Я предполагаю, что вызываемая вами служба использует TLS с аутентификацией клиента.В этом случае вам нужно будет указать Java хранилище ключей и хранилище доверенных сертификатов, которые будут использоваться для идентификации себя и проверки сервера соответственно.
Ошибка unable to find valid certification path to requested target
, которую вы получаете, заключается в том, что Java не может проверить сертификат сервера(один из начальных этапов рукопожатия TLS).
По умолчанию для указания хранилища ключей и хранилища доверия используются соответствующие свойства, как указано на странице Настройка JSSE в Oracle.Справочник JSSE.В частности:
javax.net.ssl.trustStore=/path/to/keystore.jks
javax.net.ssl.trustStorePassword=mypassword
javax.net.ssl.keyStore=/path/to/keystore.jks
javax.net.ssl.keyStorePassword=mypassword
Они могут быть указаны как системные свойства в командной строке (например, -Djavax.net.ssl.trustStorePassword=mypassword
) или (не рекомендуется) заданы программно, например:
System.setProperty("javax.net.ssl.trustStorePassword", "mypassword");
Наконец, обратите внимание, чтотип хранилища ключей по умолчанию - JKS.Если вы хотите изменить значение по умолчанию на стандарт PKCS # 12 (расширения файлов обычно .p12
или .pfx
), то вам нужно установить два дополнительных свойства: javax.net.ssl.trustStoreType
и javax.net.ssl.keyStoreType
(значение необходимобыть PKCS12
).
Если вы не уверены, чтобы проверить, находится ли ваше хранилище ключей в JKS или PKCS # 12, вы можете использовать свойство keytool
для печати содержимого хранилища ключей иукажите тип хранилища ключей, используя -storetype PKCS12
или ничего (по умолчанию JKS)