Apache HttpClient 4.3 et x509 certificat du client pour authentifier
maintenant je cherche une solution en ce qui concerne la tâche de la façon de réécrire obsolète solution côté client certificat x509 authentification via HttpComponentsMessageSender (non pertinents).
Par exemple, obsolète solution est:
SSLSocketFactory lSchemeSocketFactory = new SSLSocketFactory(this.keyStore, this.keyStorePassword);
Scheme sch = new Scheme("https", 443, lSchemeSocketFactory);
DefaultHttpClient httpClient = (DefaultHttpClient)getHttpClient();
httpClient.getConnectionManager().getSchemeRegistry().register(sch);
Comme nouvelle solution avec CloseableHttpClient je suis en utilisant:
SSLContextBuilder sslContextBuilder = SSLContexts.custom()
//this key store must contain the key/cert of the client
.loadKeyMaterial(keyStore, keyStorePassword.toCharArray());
if (trustStore != null) {
//this key store must contain the certs needed and trusted to verify the servers cert
sslContextBuilder.loadTrustMaterial(trustStore);
}
SSLContext sslContext = sslContextBuilder.build();
LayeredConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
//Create a registry of custom connection socket factories for supported
//protocol schemes /https
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("https", sslsf)
.register("http", new PlainConnectionSocketFactory())
.build();
PoolingHttpClientConnectionManager connPoolControl =
new PoolingHttpClientConnectionManager(socketFactoryRegistry);
setConnPoolControl(connPoolControl);
getClientBuilder().setSSLSocketFactory(sslsf);
Je reçois toujours 403 interdit à partir du serveur. Mais quand j'utilise "obsolète" version de la solution, elle fonctionne très bien. SSL certificat est signé Thawte.
Une idée?
Grâce
OriginalL'auteur Tomas Hanus | 2014-03-24
Vous devez vous connecter pour publier un commentaire.
Tomas, c'est peut-être trop tard, mais j'espère que ça va aider les autres...
Il y a la méthode que j'utilise pour créer CloseableHttpClient à l'aide d'Apache HttpClient 4.3:
Fondation Apache déplacé org.apache.http.conn.le protocole ssl.SSLContextBuilder, org.apache.http.conn.le protocole ssl.SSLContexts et org.apache.http.conn.le protocole ssl.SSLSocketFactory à déconseillé de commencer avec la version 4.4, Il y vous pouvez trouver Apache Client 4.5.2 API Depracated Liste. Donc, perméable à la méthode peut être modifié comme ceci:
NoopHostnameVerifier
Si vous avez besoin de vérifier le nom d'hôte, vous pouvez utiliser DefaultHostnameVerifier ou vous pouvez mettre en œuvre votre nom d'hôte personnalisé verifier.
OriginalL'auteur Daniyar
Ci-dessous est le code pour HttpClient 4.4+ (mise à jour @Daniyar code 4.4+)
OriginalL'auteur manikanta
Vous devez créer un fichier de clés que contient la confiance des CAs c'est à dire
trust.jks
. Dans ce magasin de clés, vous devez les mettre uniquement le certificat du serveur que l'application va se connecter.Ensuite, vous avez besoin d'un fichier de clés pour l'identité du serveur c'est à dire
identity.jks
. Dans ce magasin de clés, vous devez les stocker mettre la clé privée + certificat + autorité de certification de la chaîne de sous un alias (un nom) que votre application va utiliser pour s'authentifier auprès du serveur.Alors vous pourriez construire la
HttpClient
comme ceci:Pour construire le
identity.jks
, vous devez le CAs de la chaîne, la clé publique et la clé privée:Pour la
trust.jks
fichier que vous avez seulement besoin du certificat du serveur (voir https://stackoverflow.com/a/36427118/2692914 ou https://stackoverflow.com/a/7886248/2692914), il n'y a pas de problème à changer l'alias:Le nom de la classe. Dans ce cas, pour obtenir le chargeur de classe qui se charge de la ressource
OriginalL'auteur lmiguelmh