0

リモート サーバー証明書にバグがあり、証明書の CN とドメイン名が一致しないという問題が定期的に発生し、私はこれに影響を与えることができません。この問題を解決するには、ダミーのホスト名検証ツールを作成して設定します (例の scala 構文)。

val hv = new HostnameVerifier() {
  def verify(s: String, sslSession: SSLSession) = true
}

実際の接続にアクセスできる場合は、接続ごとにこのベリファイアを設定できます。

https_connection.setHostnameVerifier(hv)

ただし、wsimport で生成された SOAP ラッパーを使用するなど、接続を直接制御できない場合は、次のようにします。

HttpsURLConnection.setDefaultHostnameVerifier(hv)

そして、それをクラスに設定します。

質問: HTTPS に接続するクラスを使用する tomcat webapp があり、そのうちの 1 つが静的メソッドを使用してデフォルトのベリファイアを設定している場合、この変更が影響する範囲はどれですか?

別の質問: wsimport で生成された SOAP Web サービスでホスト名検証機能を設定するにはどうすればよいですか?

4

1 に答える 1

0

質問は少し専門的ではないかもしれませんが、理解するのに少し時間がかかりました。誰かの時間を節約できるかもしれません.

質問: HTTPS に接続するクラスを使用する tomcat webapp があり、そのうちの 1 つが静的メソッドを使用してデフォルトのベリファイアを設定している場合、この変更が影響する範囲はどれですか?

私は簡単なテストを行いました。1 つの要求で単純なサーブレットをセットアップし、その後で新しい HttpsURLConnection オブジェクトからHttpsURLConnection.setDefaultHostnameVerifier(hv)読み取りました。getHostnameVerifierもちろん、最初のリクエストで設定したものと同じですが、どうすれば他の方法でできますか。したがって、スコープは少なくとも tomcat webapp のスコープです。


別の質問: wsimport で生成された SOAP Web サービスでホスト名検証機能を設定するにはどうすればよいですか?

使用JAXWSProperties.HOSTNAME_VERIFIER:

val ws = (new MyJAXWSWebService()).getMyJAXWSWebServiceSoap
val context = ws.asInstanceOf[BindingProvider].getRequestContext

// their certificate doesn't match domain!
context.put(JAXWSProperties.HOSTNAME_VERIFIER, new HostnameVerifier() {
  def verify(s: String, sslSession: SSLSession) = true
})
于 2013-06-19T15:31:14.393 に答える