2017-12-23 19 views
2

私はWebsphereアプリケーションサーバーの8.0バージョンで作業していました。私はJSSEHelperからSSLSocketFactoryを取得しようとしていました。私はsuccessfulyのSSLSocketFactory JSSEHelperはWebsphere 8.0で安全な接続を確保するための正しいSSLSocketFactoryを提供していません

  • を持っている

    1. が、私はsuccessfulyのSSLSocketFactory
    2. から
    3. をのSSLSocketを持っている私はsuccessfuly、安全な接続を確立

    が、ClientHelloメッセージで提供される暗号スイートは対応していますどちらもありません〜

    1. CellDefault SSL設定/ NodeDefault SSL Settin gs/NodeDefaultnor
    2. また、独自のカスタムSSL設定にも該当しません。


    この問題を解決するには、JSSEHelperからのSSLSocketFactoryを取得避けることでした。代わりにJSSEHelperを使用して、私はwhisの方法でのSSLSocketFactoryクラスから静的メソッドのgetDefault()を使用する必要があります。

    public SSLSocket getSslSocket(Properties sslProps) { 
    
    SSLSocketFactory factory = SSLSocketFactory.getDefault(); 
    
    SSLSocket socket = null; 
    try { 
        socket = (SSLSocket) factory.createSocket(); 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 
    return socket; 
    

    }

    詳細はhere見つけることができます:
    誰もがなぜこれを明確にしてくださいでしたステートメント:

    このステートメントで間違った「SSLソケットファクトリ」が返される

    SSLSocketFactory.getDefault() 
    

    正しいものを返しますか?
    また、これらのステートメントからそれぞれ取得したファクトリを使用する必要がありますか?

    1. SSLSocketFactory.getDefault();
    2. jsseHelper.getSSLSocketFactory(sslMap、sslProps)
    3. getSSLSocketFactory(java.lang.StringでsslAliasName、java.util.Map connectionInfo、SSLConfigChangeListenerリスナー)

  • は非常に

    +0

    暗号はSSLソケットに設定されています。 WASカスタムソケットファクトリを使用している場合、暗号はSSLソケットに直接設定されます。 WebSphereでSSLSocketFactory.getDefault()を呼び出す場合は、WebSphereのカスタムSSLSocketFactoryが取得され、WASは返されたSSLソケットの暗号の設定を処理します。 JSSEからSSLSocketFactoryを取得すると、たとえばkeystoreやtruststoreなどのSSL構成情報に基づいて作成されたJSSE SSLSocketFactoryが取得されますが、ソケットファクトリでは暗号を設定できません。 – Alaine

    +0

    特定のプロパティに基づいて構築されたSSLSocketFactoryまたはconnectionInfoへの動的な送信接続が必要な場合は、JSSEHelper.getSSLSocketFactory(connectionInfo、properties)を使用します。 JSSEHelper.getSSLSocketFactory(別名、connectionInfo、listener)を使用して、接続情報に基づいて、またはリスナーに関連付けられたSSLコンフィグレーションのソケットファクトリを取得します。私は、工場で暗号を設定していないJSSEソケットファクトリを返します。 – Alaine

    +0

    本当にありがとうございます。これはとても役に立ちました! –

    答えて

    0

    ことですがありがとう直感的ではない、声明:

    SSLSocketFactory factory = SSLSocketFactory.getDefault(); 
    

    戻りのWebSphereカスタムのSSLSocketFactory

    次に、あなたは、このようにスレッド上でSSL-設定を強制することができます。JSSEHelperが、

    Properties sslProperties = getProperties(); 
        jsseHelper.setSSLPropertiesOnThread(sslProperties); 
        SSLSocket socket = getSslSocket(); 
        CommonIO.writeToSocket(socket, "127.0.0.1", 1234); 
        jsseHelper.setSSLPropertiesOnThread(null); 
    

    を。getSSLSocketFactory(sslMap、sslConfig_XYZ)も工場を返しますが、そのソケットは、SSL-設定sslConfig_XYZにカプセル化された暗号スイートを無視します。一方

    、あなただけ

    1. プロトコル
    2. ストア
    3. トラスト

    この方法強制したい場合:

    JSSEHelper.getSSLSocketFactory(sslMap, sslConfig_XYZ) 
    

    は十分であるが。

    関連する問題