HTTPClient-1.4.2: Explication nécessaire pour SSL Personnalisé Contexte Exemple
C'est l'exemple de SSL Personnalisé Contexte de HttpClient-4.x, documentation: http://hc.apache.org/httpcomponents-client-ga/examples.html
Remarque: la suppression de commentaires par souci de concision.
package org.apache.http.examples.client;
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
/**
* This example demonstrates how to create secure connections with a custom SSL
* context.
*/
public class ClientCustomSSL {
public final static void main(String[] args) throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream instream = new FileInputStream(new File("my.keystore"));
try {
trustStore.load(instream, "nopassword".toCharArray());
} finally {
try { instream.close(); } catch (Exception ignore) {}
}
SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
Scheme sch = new Scheme("https", 443, socketFactory);
httpclient.getConnectionManager().getSchemeRegistry().register(sch);
HttpGet httpget = new HttpGet("https://localhost/");
System.out.println("executing request" + httpget.getRequestLine());
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println("Response content length: " + entity.getContentLength());
}
EntityUtils.consume(entity);
} finally {
//When HttpClient instance is no longer needed,
//shut down the connection manager to ensure
//immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
}
}
Je suppose que mon.fichier de clés est l'emplacement de la trustStore où CA certificat racine est importé dans: /Library/Java/Home/lib/security/cacerts et le mot de passe par défaut pour cette truststore est "changeit".
Ma question est: où dois-je mettre mes certificats client pour communiquer avec le serveur. J'ai deux façons de configuration de SSL.
Exemple code ci-dessus ne donne pas d'indication sur les certificats client: pem/p12 et les fichiers de clés.
Toutes les idées/pensées serait apprécié !!!
-Bianca
OriginalL'auteur bianca | 2011-08-26
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs constructeurs SSLSocketFactory. Le constructeur que l'exemple est à l'aide prend seulement une coutume trustStore. Vous devez utiliser l'un des constructeurs qui prend un personnalisé du fichier de clés (qui contient vos certificats de client).
Vous avez seulement besoin d'un custom trustStore si le serveur cible à l'aide d'un certificat auto-signé.
Cet exemple initialise une SSLContext avec un trustStore et keyStore:
OriginalL'auteur Barry Pitman