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.NoopHostnameVerifier; 輸入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に; } })のビルド(); // NoopHostnameVerifierカテゴリ:ホスト名と検証ツール、ホスト名検証が実質的に閉鎖され、それがどの取ることができます // 有効なSSLセッションをし、ターゲットホストにマッチしました。 =のHostnameVerifierのHostnameVerifier NoopHostnameVerifier.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
それはすることで、
への変更
これは私の問題を解決します。