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 パラメータですか?
ありがとう