0

Apache HttpClient を使用するライブラリ (Dasein) を使用しています。

自己署名証明書を使用してサーバーに HTTPS 接続 (Dasein および HttpClient 経由) を確立しようとすると、 javax.net.ssl.SSLException: hostname in certificate didn't match

Caused by: javax.net.ssl.SSLException: hostname in certificate didn't match: <172.16.2.152> != at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:228) at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:149) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:130) at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572)

すでに証明書をトラストストアにインポートしており、-Djavax.net.ssl.trustStore を使用しています。この一致しないホスト名を修正するために、コードに

    javax.net.ssl.HostnameVerifier fakeHostnameVerifier = new javax.net.ssl.HostnameVerifier() {
        @Override
        public boolean verify(String hostname, javax.net.ssl.SSLSession session) {
            return true;
        }
    };
    javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(fakeHostnameVerifier);

    com.sun.net.ssl.HostnameVerifier fakeSunHostnameVerifier = new com.sun.net.ssl.HostnameVerifier() {
        @Override
        public boolean verify(String string, String string1) {
            return true;
        }
    };
    com.sun.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(fakeSunHostnameVerifier);

私のコードから 経由でそのサーバーに直接接続しようとすると、hostNameVerifier のおかげですべて問題ありません。HttpClient が呼び出されたときに伝播しないか、オーバーライドされるようです。new URL("https://my.server.com/api/versions")

これを解決する方法はありますか?たとえば、いくつかの VM パラメータですか?

ありがとう

4

1 に答える 1