Home >Java >javaTutorial >How to Successfully Use Java Client Certificates with HTTPS/SSL?
Java Client Certificates over HTTPS/SSL: A Walkthrough
Scenario
Consider a Java 6 application that attempts to establish an HTTPS connection to a remote server using a client certificate. The server employs a self-signed root certificate and mandates the presentation of a password-protected client certificate.
Challenge
Despite adding the server root certificate and client certificate to the default keystore, the connection fails with a handshake failure. The application seeks guidance on utilizing the client certificate effectively.
Solution
The resolution entails three steps:
Importing Server Certificate into Truststore: The server's self-signed certificate must be imported into a truststore using the keytool utility:
keytool -import -alias <server_alias> -file <server_cert>.crt -storepass <password> -keystore <truststore_name>.keystore
Configuring JVM Properties: Set specific JVM properties to specify the truststore and keystore paths, passwords, and types:
-Djavax.net.ssl.keyStoreType=pkcs12 -Djavax.net.ssl.trustStoreType=jks -Djavax.net.ssl.keyStore=<client_cert>.p12 -Djavax.net.ssl.trustStore=<truststore_name>.keystore -Djavax.net.debug=ssl -Djavax.net.ssl.keyStorePassword=<password> -Djavax.net.ssl.trustStorePassword=<password>
Updated Connection Code: Utilize the SSLSocketFactory to establish the HTTPS connection and set the SSL socket factory for the connection:
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); URL url = new URL("https://<server_host>:<port>/cgi-bin/ls.py"); HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); conn.setSSLSocketFactory(sslsocketfactory);
This approach addresses the issue by authenticating the client to the server using the designated client certificate.
The above is the detailed content of How to Successfully Use Java Client Certificates with HTTPS/SSL?. For more information, please follow other related articles on the PHP Chinese website!