Apache HttpClient を使用して、いくつかの URL で https POST を送信しています。
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse response = httpClient.execute(httpPost);
そして私は得る:
javax.net.ssl.SSLException: hostname in certificate didn't match: <*.*.*.*> != <*.url
検索した後、stackoverflowで解決策を見つけました:
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
registry.register(new Scheme("https", socketFactory, 443));
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
HttpClient httpClient = new DefaultHttpClient(mgr, client.getParams());
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
そして、POST は正常に完了しました。
しかし、ここで何が起こっているのかわかりません!私の接続はまだ安全ですか?これは正しい解決策ですか?そうでない場合、最善の解決策は何ですか?