0

Webアプリケーションは、JerseyクライアントAPIを使用して内部的にいくつかのWebサービスを呼び出します。安全なサービスはほとんどなく、認証に証明書を使用しています。ホスト名の確認を無効にする

いくつかの理由で、いくつかのサービスでホスト名検証を無効にする必要があるためです。

私はいくつかの例を検索し、以下のリンクを見つけました。検証を無効にした後、期待どおりにサービスが開始されました。第3のリンクを経由しながら

Link1link2link3

は私がHttpsURLConnection.setDefaultHostnameVerifierへの呼び出し(allHostsValid)を気づきました。

上記の呼び出しのため、後続のすべてのWebサービス呼び出しでホスト名検証が無効になると想定しています。

私の前提が正しい場合、特定のサービスでのみ検証を無効にするにはどうすればよいですか?

HostnameVerifier allHostsValid = new HostnameVerifier() { 
    public boolean verify(String hostname, SSLSession session) { 
    if(hostname.equals("xyz")) { 
     return true; 
    } else { 
     // How do I implement this section? 
     // if I return false will the server perform the verification? If not how do I implement this? 
    } 
    } 
}; 

答えて

1

あなたは(URL.openConnection()で)接続を開いた後、あなたが直接、その後のHttpsURLConnectionを使用しているではあなたがその単一の接続のためのホスト名の検証を設定するconnection.setHostnameVerifier(allHostsValid)を呼び出すことができます。

EDIT:あなたは上のホスト名検証を設定することができジャージー2に関してはジャージー1または2

を使用しているかどうかに応じて、2つの選択肢があるよう

あなたがジャージーを使用しているとして、それが見えますクライアントを作成するときはClientBuilderです。

ClientBuilder.newBuilder().hostnameVerifier(allHostsValid).build(); 

接続するサービスに応じて、2つのクライアントを作成し、それぞれ異なるクライアントを使用することをお勧めします。しかし、jersey docsには、これが特定のコネクタプロバイダでのみ動作することに注意して、あなたがどちらを使用するかわからないという警告があります。

これはstandard APIなので、準拠するJAX-RS 2.0クライアント(LibertyのjaxrsClient-2.0機能を含む)でも動作するはずです。

ジャージー1では、クライアントまたはクライアントの要求でプロパティを設定できるようです。

HTTPSProperties httpsProps = new HTTPSProperties(allHostsValid); 
client.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, httpsProps); 
+0

私たちはJerseyクライアントを使用しています。だから私はジャージーに現在の接続のためだけにそれをするように指示する方法を見つけなければならないと思う。ありがとうございます –

+0

申し訳ありませんが、Jerseyクライアントを使用していて、 'HttpsURLConnection.setDefaultHostnameVerifier'を呼び出していた部分にまっすぐジャンプしました。 Jerseyや他のJAX-RSクライアントに関するいくつかの情報で答えを更新しましたが、これは自分で実装したものではありません。 – Azquelt

+0

問題ありません。私は識別しようとします。ジャージーが何もオプションを提供していない場合、私はHttpURLConnectionクラスを使用します –

関連する問題