Oto kod, który ułatwi Ci pracę. Obiekt KeyStore
jest obiektem zawierającym certyfikat klienta. Jeśli serwer korzysta z samopodpisanego certyfikatu lub certyfikatu, który nie jest podpisany przez urząd certyfikacji rozpoznany przez maszynę JVM w dołączonym pliku cacerts, należy użyć wartości TrustStore
. W przeciwnym razie, aby użyć pliku domyślne cacerts, przechodzą w null
do SSLSockeFactory
dla argumentu zaufanych certyfikatów ..
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
...
final HttpParams httpParams = new BasicHttpParams();
// load the keystore containing the client certificate - keystore type is probably jks or pkcs12
final KeyStore keystore = KeyStore.getInstance("pkcs12");
InputStream keystoreInput = null;
// TODO get the keystore as an InputStream from somewhere
keystore.load(keystoreInput, "keystorepassword".toCharArray());
// load the trustore, leave it null to rely on cacerts distributed with the JVM - truststore type is probably jks or pkcs12
KeyStore truststore = KeyStore.getInstance("pkcs12");
InputStream truststoreInput = null;
// TODO get the trustore as an InputStream from somewhere
truststore.load(truststoreInput, "truststorepassword".toCharArray());
final SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("https", new SSLSocketFactory(keystore, keystorePassword, truststore), 443));
final DefaultHttpClient httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager(httpParams, schemeRegistry), httpParams);
Dziękuję. Niedługo to sprawdzę. – hooknc
To rozwiązanie działało idealnie. Dziękuję za pomoc. FYI, z powodu problemów renegocjacji SSL Handshake musiałem ustawić następującą wirtualną własność maszyny: -Dsun.security.ssl.allowUnsafeRenegotiation = true Jestem/pracował z java 1.6.0_20 i Tomcat 6.0.29. – hooknc
Powyższy komentarz nie jest już potrzebny podczas pracy z jdk 1.6.0_24 lub nowszym. – hooknc