Certificats clients Java sur HTTPS/SSL : présentation pas à pas
Scénario
Envisagez un scénario Java 6 qui tente d'établir une connexion HTTPS à un serveur distant à l'aide d'un certificat client. Le serveur utilise un certificat racine auto-signé et exige la présentation d'un certificat client protégé par mot de passe.
Défi
Malgré l'ajout du certificat racine du serveur et du certificat client à le magasin de clés par défaut, la connexion échoue avec un échec de négociation. L'application demande des conseils sur l'utilisation efficace du certificat client.
Solution
La résolution comporte trois étapes :
Importation du certificat du serveur dans le Truststore : Le certificat auto-signé du serveur doit être importé dans un truststore à l'aide du keytool utilitaire :
keytool -import -alias <server_alias> -file <server_cert>.crt -storepass <password> -keystore <truststore_name>.keystore
Configuration des propriétés JVM : Définissez des propriétés JVM spécifiques pour spécifier les chemins, les mots de passe et les types du truststore et du keystore :
-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>
Code de connexion mis à jour : Utilisez le SSLSocketFactory pour établir la connexion HTTPS et définir la fabrique de sockets SSL pour la connexion :
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);
Cette approche résout le problème en authentifiant le client auprès du serveur à l'aide du certificat client désigné.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!