IThaiのブログ

IT関連の話題やタイに関する様々なことを書いていきます。

JSSE(Java Secure Socket Extension)を使いSSL通信する - HttpClientで実装

前回のエントリでSSL通信のためのキーストア、トラストストアを用意しました。

それでは実際に実装をしてみます。

Httpsで通信するのに利用したのはJavaの有名なHttpクライアントライブラリのHttpClientです。

トラストストア、キーストアを利用する方法はJavaシステム変数から読み込む方法もあるみたいですが、今回はJavaソースコードから読み込む方法を試します。

キーストア、トラストストアの定義です。

private static final String KEYSTORE_PATH = "aaa/keystore.p12";
private static final String KEYSTORE_PASSWORD = "test";
private static final String TRUSTSTORE_PATH = "aaa/cacerts";
private static final String TRUSTSTORE_PASSWORD = "changeit";

キーストア、トラストストアを読み込みます。

KeyStore keystore = KeyStore.getInstance("pkcs12");
InputStream keyInput = new FileInputStream(KEYSTORE_PATH);
try {
    keystore.load(keyInput, KEYSTORE_PASSWORD.toCharArray());
} catch (Exception e) {
} finally {
    keyInput.close();
}
KeyStore truststore = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream trustInput = new FileInputStream(TRUSTSTORE_PATH);
try {
   truststore.load(trustInput, TRUSTSTORE_PASSWORD.toCharArray()); 
} catch (Exception e) {
} finally {
    trustInput.close();
}

次にスキーマレジストリを作成します。

SchemeRegistry schemeRegistry = new SchemeRegistry();
SSLSocketFactory mySocketFactory = new SSLSocketFactory(keystore, KEYSTORE_PASSWORD, truststore);
schemeRegistry.register(new Scheme("https", 443, mySocketFactory));

HttpClientを作成します。

HttpParams httpParams = new BasicHttpParams();
DefaultHttpClient httpClient = new DefaultHttpClient(new SingleClientConnManager(schemeRegistry), httpParams); 

HttpClientを使ってPOSTしてみます。

HttpPost post = new HttpPost("POSTするURL");
HttpEntity entity = new StringEntity(”POSTしたいデータ”, "text/xml", "UTF-8");
post.setEntity(entity); 
HttpResponse httpResponse = httpClient.execute(method);

こんな感じですかね。
今度検証してみます。

Javaネットワーク&ストリーム完全制覇 (標準プログラマーズライブラリ)

Javaネットワーク&ストリーム完全制覇 (標準プログラマーズライブラリ)