Estoy usando Java 6 y estoy tratando de crear un HttpsURLConnection
contra un servidor remoto, usando un certificado de cliente.
El servidor está utilizando un certificado raíz autofirmado y requiere que se presente un certificado de cliente protegido por contraseña. He agregado el certificado raíz del servidor y el certificado del cliente a un almacén de claves Java predeterminado que encontré en /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/security/cacerts
(OSX 10.5). El nombre del archivo del almacén de claves parece sugerir que no se supone que el certificado del cliente entre ahí.Certificados de cliente Java a través de HTTPS/SSL
De todos modos, añadiendo el certificado raíz de esta tienda resuelto el infame javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed' problem.
Sin embargo, ahora estoy atascado en cómo utilizar el certificado de cliente. Intenté dos enfoques y ninguno me lleva a ninguna parte.
En primer lugar, y preferido, prueba:
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
He intentado saltarse la clase HttpsURLConnection (no es ideal ya que quiero hablar con el servidor HTTP), y hacer esto en su lugar:
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
Ni siquiera estoy seguro de que el certificado del cliente sea el problema aquí.
He usado una URL como: https: // localhost: 8443/Application_Name/getAttributes. Tengo un método con/getAttribute url mapping. Este método devuelve una lista de elementos. He usado HttpsUrlConnection, el código de respuesta de conexión es 200, pero no me da la lista de atributos cuando uso inputStream, me da el contenido html de mi página de inicio de sesión. He hecho Autenticación y configuré el tipo de contenido como JSON. Sugiera – Deepak