次のコードでhttpsサーバーに接続しようとしました。
HttpResponse response = new DefaultHttpClient().execute(new HttpGet("https://www.google.com"));
そしてそれは完全に動作します(それはグーグルページとステータスコード200OKを返します)。
また、次のサーバーで同じサーバーに接続しようとしました。
BasicHttpParams clientparams = new BasicHttpParams();
[... clientparams initializazion...]
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
SSLSocketFactory sf = SSLSocketFactory.getSocketFactory();
sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
schemeRegistry.register(new Scheme("https", sf, 443));
ClientConnectionManager cm = new ThreadSafeClientConnManager(clientparams, schemeRegistry);
HttpClient myClient = new DefaultHttpClient(cm, clientparams);
HttpResponse response = myClient.execute(new HttpGet("https://www.google.com"));
これも完璧に機能します。他のサーバーでも試してみましたが、常に動作します。
次に、SchemeRegistryを使用してhttpクライアントを初期化する必要がある場合、誰かが私に説明できますか?また、どのような場合に、SSLSocketFactoryをカスタムKeyStoreで初期化する必要がありますか?