ビジネス・ニーズ:古いプロジェクトは、外部の支援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()。 } }
問題が解決され、