JDK1.6とHTTP-component3.1支持TLS1.2

ビジネス・ニーズ:古いプロジェクトは、外部の支援TLS1.2にアクセスする必要があり、主に次の二つの要件

1. JDK1.6プロジェクトのニーズは三者TLS1.2をサポート

Apacheの-httpCcomponent3.1を使用して2.プロジェクトは、開発者がストリート羽ばたきからそれらを防ぐために、既存の習慣に合うようにする必要があります。

現在オンライン、既製の解決策を見つける自分自身を取得できませんでした。

次のように解決策は以下のとおりです。

1.ソケットファクトリのTLS1.2をサポート:

https://github.com/a--i--r/TLSSocketFactory

直接使用することができ、それは、日本人の友人のおかげではBouncyCastleパーティの暗号化ライブラリを依存しています

2.包装工場、次のように:

パッケージの私を。

輸入org.apache.commons.httpclient.ConnectTimeoutException。
輸入org.apache.commons.httpclient.params.HttpConnectionParams。
輸入org.apache.commons.httpclient.protocol.ProtocolSocketFactory。
輸入third.tls.TLSSocket。
輸入third.tls.TLSSocketFactory。

インポートにjava.io.IOException;
輸入java.net.InetAddress;
インポートのjava.net.Socket;
輸入java.net.UnknownHostExceptionを発行。

/ **
 *プロキシ工場
 * @author [email protected]
  * / 
パブリック クラス TLS12ProtocolSocketFactoryの実装ProtocolSocketFactory {
     パブリック 静的 最終 TLSSocketFactory INNER_SOCKET_FACTORY = 新しい TLSSocketFactory(、6000 )。

    @オーバーライド
    公共ソケットのcreateSocket(文字列ホスト、int型ポート、InetAddressのlocalAddressでは、INT localPortでは)はスローにIOException、UnknownHostExceptionがを{
        ソケットソケット = INNER_SOCKET_FACTORY.createSocket(ホスト、ポート、localAddressでは、localPortでは);
         // フォーカス、ここでそれを手動握手によって[email protected]を集中
        ((TLSSocket)ソケット).startHandshake();
         戻り値のソケット。
    }

    @オーバーライド
    公共ソケットのcreateSocket(文字列ホスト、INTポートのInetAddress localAddressでは、INT localPortでは、HttpConnectionParamsのparams)はスローにIOException、UnknownHostExceptionが、ConnectTimeoutExceptionを{
        ソケットソケット = INNER_SOCKET_FACTORY.createSocket(ホスト、ポート、をlocalAddress、localPortでは)。
        ((TLSSocket)ソケット).startHandshake();
        リターンソケット。
    }

    @オーバーライド
    公共ソケットのcreateSocket(文字列ホスト、INTポート)スローにIOException、UnknownHostExceptionがを{
        ソケットソケット = INNER_SOCKET_FACTORY.createSocket(ホスト、ポート)。
        ((TLSSocket)ソケット).startHandshake();
        リターンソケット。
    }
}

3.

輸入my.TLS12ProtocolSocketFactory。
輸入org.apache.commons.httpclient.HttpClient;
輸入org.apache.commons.httpclient.HttpMethod;
輸入org.apache.commons.httpclient.methods.PostMethod;
輸入org.apache.commons.httpclient.params.HttpMethodParams。
輸入org.apache.commons.httpclient.protocol.Protocol。

インポートにjava.io.IOException;

パブリック クラスのテスト{

    公共の 静的な 無効メイン(文字列... argsが)スローIOExceptionが{

        TLS12ProtocolSocketFactory tls12ProtocolSocketFactory = 新しいTLS12ProtocolSocketFactory();
        Protocol.registerProtocol( "https"の、新しいプロトコル( "HTTPS"、tls12ProtocolSocketFactory、443 ));

        HttpClientをHttpClientを = 新しいHttpClientを();

        HTTPMETHOD HTTPMETHOD =  PostMethod( "https://www.baidu.com" );
        HttpMethodParams httpParams = 新しいHttpMethodParams();
        httpMethod.setParams(httpParams)。

        してみてください{
            httpClient.executeMethod(HTTPMETHOD)。
        } キャッチ(IOExceptionを電子){
            e.printStackTrace();
        }
        ストリングresponseBodyAsString = httpMethod.getResponseBodyAsString()。
    }
}

 

問題が解決され、

おすすめ

転載: www.cnblogs.com/user-for-once/p/12093469.html