DefaultHttpClient()
は期限切れのSSL証明書で動作させようとしています。Apacheクライアントで期限切れのSSL証明書を受け入れるにはどうすればよいですか?
Android API 2.2
それが原因でこのラインのコンパイルされません
:
のSSLSocketFactory SF =新しいのSSLSocketFactory(SSLContextの);
エラー:The constructor SSLSocketFactory(SSLContext)
は私が間違っているのは何
が定義されていませんか?
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.conn.ssl.SSLSocketFactory;
{...}
SSLContext sslContext = SSLContext.getInstance("SSL");
// set up a TrustManager that trusts everything
sslContext.init(null, new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
System.out.println("getAcceptedIssuers =============");
return null;
}
public void checkClientTrusted(X509Certificate[] certs,
String authType) {
System.out.println("checkClientTrusted =============");
}
public void checkServerTrusted(X509Certificate[] certs,
String authType) {
System.out.println("checkServerTrusted =============");
}
} }, new SecureRandom());
SSLSocketFactory sf = new SSLSocketFactory(sslContext);
Scheme httpsScheme = new Scheme("https", sf, 443);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(httpsScheme);
HttpParams params = new BasicHttpParams();
ClientConnectionManager cm = new SingleClientConnManager(params, schemeRegistry);
//DefaultHttpClient httpclient = new DefaultHttpClient();
DefaultHttpClient httpclient = new DefaultHttpClient(cm, params);
独自にHTTPクライアントにこの 'SSLContext'に合格する方法の、何が間違ってやっていることは、あなたがサーバ証明書を確認するために何もしないトラストマネージャを使用していることです。これらのパススルー・トラスト・マネージャーは、あなたが信頼しているものの期限切れになっているものだけでなく、潜在的なMITMからの証明書も含めて*すべての*証明書を許可します。 – Bruno