前回までのを更に改造して、HTTPSに対応させてみます。
追加の設定値は以下の通り。
キーストアについては詳しく書きませんが、Javaではキーストアで暗号化の鍵と証明書を管理しています。
ここではキーストアの場所を指定します。
ストアパスワードはストアを読み取る時に必要なパスワードです。
デフォルトでは changeit になっています。
変更がある設定値は以下の通り。
前回までは80番ポートを想定していましたが、今回はHTTPSなので443番ポートになります。
新たに27~37行目を追加し、HTTPSに対応させます。
キーストアから証明書を取得します。
取得した証明書をHttpClientへ登録し、HTTPS通信を可能にします。
sampleコード
追加の設定値は以下の通り。
KEYSTORE | キーストア |
STOREPWD | ストアパスワード |
キーストアについては詳しく書きませんが、Javaではキーストアで暗号化の鍵と証明書を管理しています。
ここではキーストアの場所を指定します。
UNIX | $JAVA_HOME/jre/lib/security/cacerts |
Windows | %JAVA_HOME%\jre\lib\security\cacerts |
ストアパスワードはストアを読み取る時に必要なパスワードです。
デフォルトでは changeit になっています。
変更がある設定値は以下の通り。
前回までは80番ポートを想定していましたが、今回はHTTPSなので443番ポートになります。
TARGETPORT | ポート番号 |
新たに27~37行目を追加し、HTTPSに対応させます。
キーストアから証明書を取得します。
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream instream = new FileInputStream(new File(KEYSTORE));
trustStore.load(instream, STOREPWD.toCharArray());
instream.close();
取得した証明書をHttpClientへ登録し、HTTPS通信を可能にします。
SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
Scheme sch = new Scheme("https", socketFactory, TARGETPORT);
httpclient.getConnectionManager().getSchemeRegistry().register(sch);
sampleコード
package sample.http; import java.io.File; import java.io.FileInputStream; import java.security.KeyStore; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.params.ConnRoutePNames; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.impl.client.DefaultHttpClient; public class HttpAuthPost { public final int execute() throws Exception { DefaultHttpClient httpclient = new DefaultHttpClient(); KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream instream = new FileInputStream(new File(KEYSTORE)); trustStore.load(instream, STOREPWD.toCharArray()); instream.close(); SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); Scheme sch = new Scheme("https", socketFactory, TARGETPORT); // SSL設定 httpclient.getConnectionManager().getSchemeRegistry().register(sch); // BASIC認証用設定 httpclient.getCredentialsProvider().setCredentials( new AuthScope(TARGETHOST, TARGETPORT), new UsernamePasswordCredentials(UID, PWD)); // 接続先ホスト設定 HttpHost host = new HttpHost(TARGETHOST, TARGETPORT, "https"); // プロキシホストを設定 HttpHost proxy = new HttpHost(PROXYHOST, PROXYPORT); httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); // ターゲットURLを設定 HttpPost httppost = new HttpPost(TARGETURL); // 送信ファイル生成 FileBody file = new FileBody(new File(FILE)); MultipartEntity reqEntity = new MultipartEntity(); reqEntity.addPart("file", file); httppost.setEntity(reqEntity); HttpResponse response; response = httpclient.execute(host, httppost); httpclient.getConnectionManager().shutdown(); return response.getStatusLine().getStatusCode(); } }
※前回まではプロトコルを http にしていましたが、今回は https になっています。
コメント
コメントを投稿
・コメントはお気軽にどうぞ。
・記事に関係のないコメントはご遠慮ください。
・<b>, <i>, <a> などの一部の HTML タグを使用できます。