Я создаю клиентское приложение jax-ws, которое должно принимать самозаверяющие сертификаты. Но есть и распространенная проблема исключения SSL-рукопожатия, когда вы пытаются импортировать самозаверяющие сертификаты. Таким образом, наиболее распространенным решением для этого является расширение поставщика безопасности JSSE и инициализация контекста SSL для принятия всех сертификатов, таких как:
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
TrustManager[] trustCerts = new TrustManager[]{new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkServerTrusted(X509Certificate[]
certs, String authType) throws CertificateException {
return;
}
public void checkClientTrusted(X509Certificate[]
certs, String authType) throws CertificateException {
return;
}
}
};
SSLContext sc = SSLContext.getInstance("SSLv3");
sc.init(null, trustCerts, null);
SocketFactory factory = sc.getSocketFactory();
SSLSocket socket;
socket = (SSLSocket) factory.createSocket(mInstance.getHostName(),getSecureConnectionEndpoint().getPort());
socket.startHandshake();
setCerts(socket.getSession().getPeerCertificates());
Это был единственный обходной путь, который я смог найти для решения проблемы. Здесь есть много подобных вопросов, таких как Импорт SSL-сертификатов, и все они предлагают одно и то же решение.
Это, очевидно, очень подвержено атаке «человек посередине», и это решение кажется законным только для целей тестирования.
Итак, мой вопрос: нет ли способа сделать весь этот процесс более безопасным, когда вы пытаетесь программно импортировать сертификаты?
Заранее спасибо!