Я новичок в управлении SSL и сертификатами Java. Я пытаюсь вызвать API, предоставленный моим партнером, и это двухсторонний SSL. Шифрование не используется, и партнер должен знать только источник запроса.
Я сгенерировал свой закрытый ключ и использовал его для получения действительного сертификата от ЦС, а затем передал файл CRT & PEM моему партнеру для установки на его серверах.
Используя curl с файлом pem и моим закрытым ключом, я легко могу вызвать их API.
curl -X POST -v -d '{"someparam1":"somevalue1"}' -H "Content-Type: application/json" https://api.domain.com/something --cert cn_file.pem --key cn_file.key
Теперь я хочу вызвать API через мой Java-код, используя OkHttp. Меня смущает добавление сертификата в хранилище ключей моей JVM. Я использовал openssl для преобразования pem в der и закрытый ключ в p12 и добавил их оба в cacerts.jks.
Когда я использую хранилище ключей в своем коде и передаю менеджер доверия x509 и менеджер ключей x509, код выдает IOException, как показано ниже:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Я озадачен, потому что когда я смотрю в хранилище ключей, загруженное в код, я также вижу файлы der & p12.