Я разрабатывал клиент WS с использованием JAVA, и у меня возникла проблема с аутентификацией SSL. WS создаются на WCF, и у меня нет доступа к серверу, они работают через HTTPS и используют клиентский сертификат, который сначала должен быть установлен на клиенте. Ребята с сервера прислали мне сертификат PFX, который я успешно установил в ОС (я использую OS X), и я мог затем получить доступ к WS через браузер (Safari или FF - это те, которые я пробовал, которые ранее не могли получить доступ к WS ).
Я думал, что любое приложение в ОС будет использовать эти сертификаты, но когда я попробовал свое приложение JAVA, это не сработало; сначала выдается следующая ошибка:
"javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: сбой построения пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти действительный путь сертификации для запрошенной цели"
Я решил эту проблему, экспортировав сертификат в файл CER и используя инструмент командной строки keytool для добавления сертификата в хранилище ключей "cacerts", которое использует JAVA. Но после того, как эта ошибка ушла, стало появляться следующее: «403, запрещено». Это очевидно, потому что он не использует сертификат клиента SSL для сайта, но я не смог найти способ отправить его на него. Любая помощь будет оценена.
Ниже приведен код, который я использую для публикации на WS:
URL url = new URL(p_url);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", contentType);
OutputStream out = conn.getOutputStream(); // on this line it shows the error