Я разрабатывал WS-клиент с использованием JAVA, и у меня возникла проблема с аутентификацией SSL. WS создаются в WCF, и у меня нет доступа к серверу, они работают через HTTPS и используют клиентский сертификат, который должен быть установлен на клиенте в первую очередь. Ребята из сервера отправили мне сертификат PFX, который я успешно установил в ОС (я использую OS X), и я мог бы получить доступ к WS через браузер (Safari или FF - это те, которые я пытался, которые ранее не могли получить доступ к WS). Я думал, что любое приложение в ОС будет использовать эти сертификаты, но когда я попробовал приложение JAVA, это не сработало; на первом был быть брошенным следующее сообщение об ошибке:JAVA - SSL - Клиентские сертификаты
«javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX путь здание не удалось: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный сертификат путь к запрашиваемой цели "
Я решил это, экспортировав сертификат в файл CER и используя инструмент командной строки keytool, чтобы добавить сертификат в« cacerts »keyStore 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
Если вы запутались между хранилищем хранилища/доверительным магазином, вы можете прочитать следующее: http://stackoverflow.com/a/6341566/372643 – Bruno
Спасибо, я на самом деле пробовал это, но мне не хватало keyStoreType = PKCS12. – user1161538