Я использую Java 6 и пытаюсь создать httpsurlconnection < /code> против удаленного сервера, используя сертификат клиента.
сервер использует самоопределенный корневой сертификат и требует, чтобы сертификат, защищенного паролем. I've added the server root certificate and the client certificate to a default java keystore which I found in /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/security/cacerts (OSX 10.5).
The name of the keystore file seems to suggest that the client certificate is not supposed to go in there?
В любом случае, добавление корневого сертификата в этот магазин решил печально известный javax.net.ssl.sslhandshakeexception: sun.security.validator.validatorexception: Pkix Path Build Я попробовал два подхода, и нигде меня никуда не попадают.SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
URL url = new URL("https://somehost.dk:3049");
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setSSLSocketFactory(sslsocketfactory);
InputStream inputstream = conn.getInputStream();
// The last line fails, and gives:
// javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
< /code>
Я попытался пропустить класс httpsurlconnection (не идеально, поскольку я хочу поговорить с сервером) и сделать это вместо этого: < /p>
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("somehost.dk", 3049);
InputStream inputstream = sslsocket.getInputStream();
// do anything with the inputstream results in:
// java.net.SocketTimeoutException: Read timed out
< /code>
Я даже не уверен, что сертификат клиента здесь является проблемой. < /p>
Подробнее здесь: https://stackoverflow.com/questions/875 ... -https-ssl