2012-03-29 11 views
4

SSLSocketFactoryクラスはJavaで再生するときはHttpsURLConnectionを使用しますか? Javaのドキュメントはあまり役に立ちません。SSLSocketFactory in java

キーストアとトラストストアをsslsocketfactoryオブジェクトにバインドして、キーストアとトラストストアをポイントする方法はありますか?

そうでなければ、接続はキーストアとトラストストアの場所をどのように知るのですか(私はSystem Propertiesを使用しません)?

答えて

8

これはSSLContextによって行われます。 1つを初期化してから、ソケットファクトリを使用してHttpsConnectionインスタンスを作成します。あなたのOpenConnectionメソッドは、()あなたがここに初期化のSSLSocketFactoryを使用するHTTPSサイトのために呼び出すことの後

SSLContext sc = SSLContext.getInstance("SSL"); 
sc.init(myKeyManagerFactory.getKeyManagers(), myTrustManagerArray, new java.security.SecureRandom()); 
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 

はここでラフ、私は自分のアプリケーションでこれを管理する方法の例です。 TrustManagerのは、あなたのSSLコンテキストウィッヒで使用するためにここで

コードすべての証明書を信頼します:ブルーノから

TrustManager[] myTrustManagerArray = new TrustManager[]{new TrustEveryoneManager()}; 

class TrustEveryoneManager implements X509TrustManager { 
    public void checkClientTrusted(X509Certificate[] arg0, String arg1){} 
    public void checkServerTrusted(X509Certificate[] arg0, String arg1){} 
    public X509Certificate[] getAcceptedIssuers() { 
     return null; 
    } 
} 

UPD:それはしかし、便利、すべての証明書を信頼、用心、MITM攻撃への接続が脆弱になり

+1

あなたのコードは、setDSaultSSLSocketFactory()がsetSSLSocketFacory()に置き換えられた場合に機能します。 setDefaultSSLSocketFactory()は次の例外をスローします。 "javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIXパス構築が失敗しました:sun.security.provider.certpath.SunCertPathBuilderExce ption:要求されたターゲットへの有効な証明書パスを見つけることができません" – Ashwin

+0

DefaultSSLSocketFactory私のために、しかし将来的に知っておくと良いこと8) – yggdraa

+0

:あなたはその例外の理由を知っていますか?とにかくありがとう。 – Ashwin