HTTPClientのは、すべての証明書は、SSLExceptionを解決する信頼:認識されないSSLメッセージ、平文の接続を

HttpClientをサードパーティ・ツール・コールHTTPインターフェイス使用してエラー  javax.net.ssl.SSLException:認識されないSSLメッセージ、平文接続を ?

このエラーは、情報はSSL、平文の接続を認識していないことを意味しますか?

これは、httpsプロトコルを使用してネットワークリソースにアクセスする際外観はSSL情報を認識していないことを意味します。

標準化の後に書かれている( - SSL(セキュア・ソケット・レイヤーセキュア・ソケット・レイヤー)暗号化は、IETF(Internet Engineering Task Force、インターネット技術タスクフォース)をした後、もともとネットスケープ(Netscapeの)研究開発、によって開発されたHTTPS下のプロトコル層に基づいており、コメントのコメント要求に対してRFCRequest)、RFC仕様は、インターネット技術の多くが含まれています!

最初のデータはクリアテキストで送信されたときに(体がPOSTで提出されたデータが表示されていないが、それでもパケットキャプチャツールを使用して盗むことができたときにレポートに)HTTPを使用しているために隠された危険性を解決するために、安全ではありませんNetscapeはSSLセキュア・ソケット・レイヤーを導入し、SSLはTCP上のHTTPプロトコル下の層である、HTTPは標準であり、TCPトランスポートに基づいてデータを暗号化するとき、それはHPPTS HTTP + SSL / TCPの略語です。

SSLプロトコルは、データ通信のための安全なサポートを提供するアプリケーション層プロトコルの様々なTCP / IPプロトコルとの間に配置されます。SSLプロトコルは、二つの層に分けることができる:SSLレコードプロトコル(SSLレコードプロトコル):これは、信頼性の高いトランスポートプロトコル(例えば、TCP)に基づいて、ハイレベルのプロトコル・データ・カプセル化、圧縮、暗号化サポートの基本的な機能を提供します。SSLハンドシェイクプロトコル(SSLハンドシェイクプロトコル):これは、双方の認証との間の通信の実際の開始前に、データ伝送のためのSSLレコードプロトコルの上に構築されている、ように暗号アルゴリズム、暗号鍵の交換とを交渉します。

 もともとHTTPSはHTTPに基づいて暗号化されています。SSL暗号化プロトコルを使用してください。

この通信の両側は、証明書のIDを確認する方法により、通信前に本人確認を行う必要があります。

元の証明書は、問題領域である、我々はそれをすべて信頼証明書にするためにコードを追加する必要があります。

次のコードは、すべてのエージェントの信頼関係を設定します。

輸入org.apache.http.conn.ssl.NoopH​​ostnameVerifier;
輸入org.apache.http.conn.ssl.SSLConnectionSocketFactory;
輸入org.apache.http.impl.client.CloseableHttpClient。
輸入org.apache.http.impl.client.HttpClients。
輸入org.apache.http.ssl.SSLContextBuilder。
輸入org.apache.http.ssl.TrustStrategy。

輸入javax.net.ssl.HostnameVerifier。
輸入javax.net.ssl.SSLContext;
輸入java.security.KeyManagementException。
輸入java.security.KeyStoreException。
輸入java.security.NoSuchAlgorithmException。
インポートjava.security.cert.CertificateException;
 インポートはjava.security.cert.X509Certificate; 

パブリック クラスHttpClientUtil { 
    
    公共の 静的CloseableHttpClient createSSLClientDefault(){
         試みは{
             // 信頼ポリシーを実装するloadTrustMaterial()メソッドを使用して、すべての証明書を信頼 
            するSSLContextするSSLContext = 新しい新しい SSLContextBuilder ().loadTrustMaterial(ヌル新しい新TrustStrategy(){
                 // 信頼すべて
                のパブリック ブール IsTrusted(X509Certificateに[]カテナのalberghiera、文字列のauthType)がスローCertificateException {
                     リターンを trueに; 
                } 
            })のビルド(); 
            // NoopH​​ostnameVerifierカテゴリ:ホスト名と検証ツール、ホスト名検証が実質的に閉鎖され、それがどの取ることができます
             // 有効なSSLセッションをし、ターゲットホストにマッチしました。
            =のHostnameVerifierのHostnameVerifier NoopH​​ostnameVerifier.INSTANCE; 
            SSLConnectionSocketFactory sslsf = 新しい新しいSSLConnectionSocketFactory(SSLContextの、のHostnameVerifier);
             戻りHttpClients.custom()setSSLSocketFactory(sslsf).build();. 
        } キャッチ(KeyManagementException E){ 
            e.printStackTrace(); 
        } キャッチ(持つNoSuchAlgorithmException E){
            e.printStackTrace(); 
        } キャッチ(でKeyStoreException電子){ 
            e.printStackTrace(); 
        } 
        を返す)(HttpClients.createDefaultします。

    } 
}

 

 取得HttpClientを当社のカスタムになるのHttpClientのデフォルトのインスタンスを使用することにより、一例としてのHTTPClient

それはすることで、

 

への変更

これは私の問題を解決します。

おすすめ

転載: www.cnblogs.com/ibigboy/p/11265855.html