Java игнорирует проверку сертификата
Я пытаюсь создать несколько примеров проектов Java, которые подключаются к самозаверяющему серверу HTTPS. Кажется, я не могу заставить Java прекратить попытки проверить сертификат. Я не хочу доверять этому сертификату, я просто хочу полностью игнорировать всю проверку сертификата; этот сервер находится внутри моей сети, и я хочу иметь возможность запускать некоторые тестовые приложения, не беспокоясь о том, действителен ли сертификат.
java -Dcom.sun.net.ssl.checkRevocation=false HelloWorld
org.apache.axis2.AxisFault: Connection has been shutdown: 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
в -модели DCOM.солнце.чистая.протокол SSL.checkRevocation=ложь не помогло. Я также попытался добавить следующий код:
public static void DisableCertificateValidation() {
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; }
public void checkClientTrusted(X509Certificate[] certs, String authType) { }
public void checkServerTrusted(X509Certificate[] certs, String authType) { }
}
};
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
}
}
но все равно есть та же проблема. Что здесь происходит?
2 ответов
org.apache.axis2.AxisFault
указывает, что вы используете ось 2, а ось 2 не использует HttpsURLConnection
чтобы сделать его HTTP(S) соединения, но Apache HttpClient (3.х насколько я знаю), так что HttpsURLConnection.setDefaultSSLSocketFactory(...)
не будет иметь никакого эффекта.
вы можете посмотреть на ответ о создании SSLContext
для оси 2, более конкретно, этот документ: http://axis.apache.org/axis2/java/core/docs/http-transport.html#httpsupport
(в качестве альтернативы, вы можете получить прочь с установкой по умолчанию SSLContext
С SSLContext.setDefault(...)
, введенный в Java 6. Отключение проверки сертификата для контекста SSL по умолчанию, очевидно, не является хорошей идеей в реальном приложении.)
это более старый вопрос, но я наткнулся на него, и он как бы psuhed меня в правильном направлении. Я мог бы получить доступ к url https в axis2 без действительного сертификата клиента, установив параметры:
import org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory;
import org.apache.commons.httpclient.protocol.Protocol;
EasySSLProtocolSocketFactory easySSLProtocolSocketFactory;
try {
easySSLProtocolSocketFactory = new EasySSLProtocolSocketFactory();
Protocol.unregisterProtocol("https");
Protocol.registerProtocol("https", new Protocol("https",
(ProtocolSocketFactory) easySSLProtocolSocketFactory, 443));
}
catch (GeneralSecurityException e) {
e.printStackTrace();
}
просто обязательно сделайте это перед вызовом клиента службы axis2. Это ничего, что я бы сделал в производстве, но как быстрый хак для незащищенного сервера, который сделал трюк для меня.