【Java】Java ~ Proxy環境下でJavaを使用する ~

■ はじめに

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

目次

【1】プロキシサーバ経由で接続
 1)プロキシサーバ経由で接続するためのプロパティ
【2】設定方法
 その1:起動パラメータからの設定
 その2:ソースコードからの設定
 その3:環境変数「http_proxy」「https_proxy」を利用する
【3】認証
 1)ソースコードからの設定
 補足1:環境変数「http_proxy」「https_proxy」について
 補足2:プロパティ変数「http.proxyUser」「http.proxyPassword」について
【4】SSLプロキシ
 1)構成

【1】プロキシサーバ経由で接続

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

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

補足:https.nonProxyHosts はあるの?

A. なさげ

https://docs.oracle.com/javase/jp/7/api/java/net/doc-files/net-properties.html

より抜粋
~~~~~~~~~~~~
HTTPS プロトコルハンドラは、HTTP プロトコルと同じ nonProxyHosts プロパティーを使用
~~~~~~~~~~~~

【2】設定方法

その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」を利用する

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'

【3】認証

1)ソースコードからの設定

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");

【4】SSLプロキシ

# SSLプロキシの証明書(公開鍵)をキーストアにインポートするだけ。
sudo keytool -import -trustcacerts -alias ssl_proxy -storepass changeit -file cacert.pem -keystore %JAVA_HOME%/jre/lib/security/cacerts

1)構成

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

参考文献

公式サイト
http://docs.oracle.com/javase/jp/7/technotes/guides/net/proxies.html
認証について
http://docs.oracle.com/javase/jp/7/technotes/guides/net/http-auth.html
一般サイト
http://glasses-se-note.com/java-proxy/
http://atomic.jpn.ph/prog/net/proxy.html
http://an1106na.hatenablog.com/entry/2016/09/15/131255
今後役に立ちそうなサイト
http://qiita.com/kaakaa_hoe/items/d4fb11a3af035a287972

関連記事

【ネットワーク】プロキシ / Proxy
https://dk521123.hatenablog.com/entry/2017/08/08/224300
プロキシサーバ / SquidSquid for Windows編 ~
https://dk521123.hatenablog.com/entry/2017/11/12/211732
プロキシサーバ / SquidLinux / 初期設定編 ~
https://dk521123.hatenablog.com/entry/2017/06/23/223438
プロキシサーバ / SquidLinux / Basic認証編 ~
https://dk521123.hatenablog.com/entry/2017/06/26/224311
プロキシサーバ / SquidLinux / SSLプロキシ構築編 ~
https://dk521123.hatenablog.com/entry/2017/06/24/235123
プロキシサーバ / SquidLinux / 設定ファイル編 ~
https://dk521123.hatenablog.com/entry/2017/08/15/234457
Squid に関するトラブルシュート
https://dk521123.hatenablog.com/entry/2017/08/10/235733
Linux で Proxy を設定するには
https://dk521123.hatenablog.com/entry/2023/11/24/000000
aptコマンド ~ プロキシ経由で使うには ~
https://dk521123.hatenablog.com/entry/2017/08/11/180933
Docker ~ Proxy環境下でDockerを使用する ~
https://dk521123.hatenablog.com/entry/2023/11/30/004707
SBT ~ Proxy環境下でSBTを使用する ~
https://dk521123.hatenablog.com/entry/2023/11/23/000000