Énoncé du problème
L'intégration d'un module externe dans une application nécessite l'accès à un SSL -site Web sécurisé à l'aide d'un certificat auto-signé. Le code existant échoue en raison de problèmes de confiance avec le certificat. Le défi est de permettre à l'application d'accepter ce certificat auto-signé uniquement pour cette connexion spécifique, sans compromettre la confiance pour les autres connexions ni modifier le magasin de certificats à l'échelle du système.
Solution optimale
Pour faire confiance de manière sélective à un certificat auto-signé pour une connexion spécifique, créez une usine SSLSocket personnalisée et définissez-la sur HttpsURLConnection avant d'établir le connexion :
... HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); conn.setSSLSocketFactory(sslFactory); conn.setMethod("POST"); ...
Création de la fabrique SSLSocket
Pour créer la fabrique SSLSocket, initialisez-la comme suit :
/* Load the keyStore that includes self-signed cert as a "trusted" entry. */ KeyStore keyStore = ... TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(keyStore); SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(null, tmf.getTrustManagers(), null); sslFactory = ctx.getSocketFactory();
Chargement du magasin de clés
Charger le magasin de clés contenant le certificat auto-signé comme « entrée de confiance » :
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(trustStore, trustStorePassword); trustStore.close();
Méthode alternative de chargement du magasin de clés
Vous pouvez également utiliser keytool pour importer le certificat au format PEM dans un magasin de clés :
keytool -import -file selfsigned.pem -alias server -keystore server.jks
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!