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ネットワーク&ストリーム完全制覇 (標準プログラマーズライブラリ)
- 作者: 米川英樹
- 出版社/メーカー: 技術評論社
- 発売日: 2003/09
- メディア: 単行本
- クリック: 1回
- この商品を含むブログ (3件) を見る