私は自己署名証明書を使ってセキュアなhttp接続をテストしようとしています...開発目的のためです。しかし、私は、ピア認証されていない例外を解決することができていない、もちろん私は、この例外に関する同様の記事を見ていると、次の一つは、現在私が使用している実装です:httpClientのSSLPeerUnverifiedException
public class SelfCertificatesSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
public SelfCertificatesSocketFactory(KeyStore trustStore) throws NoSuchAlgorithmException,UnrecoverableKeyException,KeyStoreException,KeyManagementException {
super(trustStore);
TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
}
@Override
public Socket createSocket() throws IOException {
return sslContext.getSocketFactory().createSocket();
}
@Override
public Socket createSocket(Socket socket, String host, int port,
boolean autoClose) throws IOException, UnknownHostException {
return sslContext.getSocketFactory().createSocket(socket,host,port,autoClose);
}
}
と使用方法:
private DefaultHttpClient createHttpsClient(){
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory sf = new SelfCertificatesSocketFactory(trustStore);
//sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https", 443, sf));
ClientConnectionManager ccm = new ThreadSafeClientConnManager(registry);
return new DefaultHttpClient(ccm);
} catch (Exception e) {
return new DefaultHttpClient();
}
}
しかし、私はまだ例外が発生しています。私が間違っていることは何ですか? PD:Java Webアプリケーションを実装しています。これはAndroidクライアントではありません。 ありがとうございました。
あなたは、JVMのトラストストアに証明書をインポートしたことがありますか? – kosa
いいえ、それを行う方法がわかりません...私が持っているのは、keytoolによって生成された.keystoreファイルです。 – Pablo
完全な質問をいただきありがとうございます。私はこのコードを見たことがありませんでした。 '' 'KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null、null); SSLSocketFactory sf = new SelfCertificatesSocketFactory(trustStore); '' ' – pulkitsinghal