2012-01-01 21 views
1

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); 
+0

独自にHTTPクライアントにこの 'SSLContext'に合格する方法の、何が間違ってやっていることは、あなたがサーバ証明書を確認するために何もしないトラストマネージャを使用していることです。これらのパススルー・トラスト・マネージャーは、あなたが信頼しているものの期限切れになっているものだけでなく、潜在的なMITMからの証明書も含めて*すべての*証明書を許可します。 – Bruno

答えて

1

SSLSocketFactoryのドキュメントを通して見ると、コンストラクタがあるように表示されません。

SSLSocketFactory(javax.net.ssl.SSLContext) 

利用できるコンストラクタは、以下のとおりです。

SSLSocketFactory(String algorithm, KeyStore keystore, String keystorePassword, KeyStore truststore, SecureRandom random, HostNameResolver nameResolver) 
SSLSocketFactory(KeyStore keystore, String keystorePassword, KeyStore truststore) 
SSLSocketFactory(KeyStore keystore, String keystorePassword) 
SSLSocketFactory(KeyStore truststore) 

は、私がここで何かが足りないのですか?

は、あなたが(おそらくいくつかの標準的なJavaコードを使用して除いて)何も悪いこともしませんでしたjavax.net.ssl.SSLContext

0

も参照してください。

Apache SSLSocketFactoryクラスのAndroidの実装では、あなただけの即興する必要があります、元のApache SSLSocketFactoryクラス

のすべてのコンストラクタを実装していないことが表示されます。

関連する問題