【Java】Javaで、プロキシサーバ経由で接続する

■ はじめに

 * 色々な方法があるみたいだが、絞る

■ プロキシサーバ経由で接続

プロキシサーバ経由で接続するためのプロパティ

`#`プロパティ`説明`備考
1http.proxyHostプロキシサーバのホスト名またはIPアドレスを指定-
2http.proxyPortプロキシサーバのポート番号デフォルト値:80
3https.proxyHostSSLプロトコルによる接続で使用するプロキシサーバのホスト名またはIPアドレスを指定-
4https.proxyPortSSLプロトコルによる接続でプロキシサーバのポート番号デフォルト値:443
5http.nonProxyHostsプロキシを省略して、直接到達するホストのリストホストを複数指定する場合「|」で区切って設定
6java.net.useSystemProxiesSSLプロトコルによる接続でプロキシサーバのポート番号デフォルト値:false

実装

その1:起動パラメータからの設定
java -Djava.net.useSystemProxies=true -Dhttp.proxyHost=XXX.XXX.XXX.XXX -Dhttp.proxyPort=8080 -Dhttps.proxyHost=XXX.XXX.XXX.XXX -Dhttps.proxyPort=8443 <アプリケーション>
その2:ソースコードからの設定
System.setProperty("java.net.useSystemProxies", "true");
System.setProperty("http.proxyHost", "XXX.XXX.XXX.XXX");
System.setProperty("http.proxyPort", "8080");
System.setProperty("https.proxyHost", "XXX.XXX.XXX.XXX");
System.setProperty("https.proxyPort", "8443");
その3:環境変数「http_proxy」「https_proxy」を利用する(Linux Only)
http://int128.hatenablog.com/entry/20120611/1339416709
// Proxyを使うように「useSystemProxies=true」
java -Djava.net.useSystemProxies=true <アプリケーション>

【環境変数】
http_proxy='http://XXX.XXX.XXX.XXX:8080'
https_proxy='http://XXX.XXX.XXX.XXX:8443'

環境変数の設定については、以下の関連記事を参照のこと
https://blogs.yahoo.co.jp/dk521123/35146553.html

■ 認証

実装

ソースコードからの設定
Authenticator.setDefault(new Authenticator() {
  @Override
  protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("admin", "password".toCharArray());
  }
});

補足1:環境変数「http_proxy」「https_proxy」について

* 以下を行ったが、例外「IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"」が発生でうまくいかず
http_proxy='http://username:password@XXX.XXX.XXX.XXX:8080'
https_proxy='http://username:password@XXX.XXX.XXX.XXX:8443'

補足2:プロパティ変数「http.proxyUser」「http.proxyPassword」について

// 以下は意味なし
System.setProperty("http.proxyUser", "admin");
System.setProperty("http.proxyPassword", "password");

SSLプロキシ

SSLプロキシの証明書(公開鍵)をキーストアにインポートするだけ。
https://blogs.yahoo.co.jp/dk521123/36518468.html
より

sudo keytool -import -trustcacerts -alias ssl_proxy -storepass changeit -file cacert.pem -keystore %JAVA_HOME%/jre/lib/security/cacerts

構成

 +-----------+        +-----------+       +-----------+       +-----------+
 |           | http   |           | https |           | https |           |
 |Java appli |--------| SSL Proxy |-------| Internet  |-------| Any (SSL) |
 |           | 3128   |           |  443  |           |  443  |    Server |
 +-----------+        +-----------+       +-----------+       +-----------+


関連記事

プロキシサーバソフト ~ Squid / 初期設定編 ~

https://blogs.yahoo.co.jp/dk521123/36956970.html

プロキシサーバソフト ~ Squid / Basic認証編 ~

https://blogs.yahoo.co.jp/dk521123/36962466.html

プロキシサーバソフト ~ Squid / SSLプロキシ構築編 ~

https://blogs.yahoo.co.jp/dk521123/36958786.html

Keytool コマンド

https://blogs.yahoo.co.jp/dk521123/36518468.html

Linux環境変数にまつわるetc

https://blogs.yahoo.co.jp/dk521123/35146553.html

Java】プロキシ設定のチェック機能を考える ~ その1 ~

https://blogs.yahoo.co.jp/dk521123/37185366.html

Java】プロキシ設定のチェック機能を考える ~ その2 ~

https://blogs.yahoo.co.jp/dk521123/37181766.html