私はApache Commons HttpClientライブラリ(バージョン3.1)を入手しようとしていますが、サーバー証明書が(例外例外javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
のように)信頼できるものとして確立できないという事実を無視しています。Apache Commonsを作る方法HttpClient 3.1はHTTPS証明書の無効を無視しますか?
私はMake a connection to a HTTPS server from Java and ignore the validity of the security certificateなどDisable Certificate Validation in Java SSL Connectionsを見つけましたが、最初に受け入れ答えはHttpClientを4.0用です(残念ながら私はアップグレードすることはできません、ない限り、誰かが同じ2つの異なるバージョンを使用する方法の方向に私を指すことができます同じプロジェクト内のライブラリ)、another answer with little more than a dead link that supposedly went to a 3.x solutionがあります。 2番目のページのコードは、若干調整されたバージョン(基本的に、匿名のものをインラインで使用するのではなく、SSL
に加えてTLS
に適用するのではなく、古いファッションでクラスを宣言すると、このコード例のように、デフォルトのHTTPSソケットファクトリにはSSL
を使用します)。
好ましくは、私はスレッド/インスタンス全体で何かをしたいと、そのように任意のHttpClient
インスタンス(および/または関連クラス)私のサーブレットコード(ないで実行している別のサーブレット内からを作成していると思います同じコンテナ)はlax証明書検証ロジックを使用しますが、現時点では、自己署名証明書が有効である限り何かが実行されるように感じ始めています。
はい、私はセキュリティ上の意味があることを認識していますが、私がこれをまったく必要としない理由は、テスト目的のためです。通常、信頼できない証明書が信頼できるかどうかを制御する構成オプションを実装し、デフォルトで「信頼できないサーバー証明書を信頼しない」に設定します。こうすることで、開発中に簡単にオン/オフを切り替えることができますが、プロダクションでそれを行うには、自分の道を離れる必要があります。
はい、3.1は、あなたが例示しているプロトコルコンストラクタを推奨しておらず、明らかにHttpConnection#setProtocolメソッドもありません。残念、それは有望に見えた。 :( –
コンストラクタも3.0.1;で廃止されました)apacheソースリポジトリによると、 'HttpConnection'はまだ3.1の' setProtocol'メソッドを持っています:http://svn.apache.org/viewvc/httpcomponents/oac.hc3x /tags/HTTPCLIENT_3_1/src/java/org/apache/commons/httpclient/HttpConnection.java?view=markup – Gandalf
工場は 'ProtocolSocketFactory'にキャストすることができます。これはアップキャストだけなので、廃止予定のコンストラクタを削除する場合は不要です、それから非推奨のコンストラクタを既に使用しています。私は自分の投稿を更新します。 – Gandalf