そらとぶへび

仕事・プライベートを通しての気づき、JavaやPHP、データベースやサーバの話などこつこつと書いていきます

SSL通信時にプロキシのトンネリングでエラーになる場合の対処

プロキシサーバを通して、wget,curlなどでSSLでアクセスする際、プロキシサーバのトンネリングでSSLを通せずエラーになる。

[hogehoge@hogehoge ~]$ wget --no-check-certificate -e HTTPS_PROXY=proxy.com:8080 "https://info.finance.yahoo.co.jp/fx/convert/?a=1&s=JPY&t=USD"
--2018-02-23 17:10:44--  https://info.finance.yahoo.co.jp/fx/convert/?a=1&s=JPY&t=USD
proxy.com をDNSに問いあわせています... 192.168.0.100
proxy.com|192.168.0.100|:8080 に接続しています... 接続しました。
プロクシのトンネリングに失敗しました: Internal Server ErrorSSL による接続が確立 できません。
[hogehoge@hogehoge ~]$

Apacheのサイトによると、以下モジュールが必要。
Apache モジュール mod_proxy_connect
http://web.archive.org/web/20140119065146/http://httpd.apache.org:80/docs/2.2/ja/mod/mod_proxy_connect.htmlhttp://web.archive.org/web/20140119065146/http://httpd.apache.org:80/docs/2.2/ja/mod/mod_proxy_connect.html

本モジュールには mod_proxy が必要です。 CONNECT HTTP メソッドをサポートします。 このメソッドは主にプロキシに SSL リクエストを通す (訳注: SSLトンネリング)に使われます。


つまり、SSLリクエストでプロキシを通す場合は、以下のモジュールをconfに設定する必要がある。

LoadModule proxy_module modules/mod_proxy.so   
LoadModule proxy_connect_module modules/mod_proxy_connect.so

以下、設定と確認手順。

■プロキシサーバのhttpd.confの編集してmod_proxy_connect.soを読み込むようにする。

[root@proxy ~]# cd /home/webs/proxy/conf/
[root@proxy conf]# cp httpd.conf httpd.conf.bk
[root@proxy conf]# vi httpd.conf
[root@proxy conf]# diff httpd.conf httpd.conf.bk
5,6d4
< LoadModule proxy_module modules/mod_proxy.so   
< LoadModule proxy_connect_module modules/mod_proxy_connect.so
<

■構文チェック

[root@proxy conf]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@proxy conf]#

■再起動して設定を反映する。

[root@proxy conf]# /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

■正常にSSL通信ができるようになった。

[hogehoge@hogehoge ~]$ wget --no-check-certificate -e HTTPS_PROXY=proxy.com:8080 "https://info.finance.yahoo.co.jp/fx/convert/?a=1&s=JPY&t=USD"
--2018-02-26 09:55:12--  https://info.finance.yahoo.co.jp/fx/convert/?a=1&s=JPY&t=USD
proxy.com をDNSに問いあわせています... 192.168.0.100
proxy.com|192.168.0.100|:8080 に接続しています... 接続しました。
Proxy による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/html]
`index.html?a=1&s=JPY&t=USD' に保存中

    [ <=>                                   ] 48,550      --.-K/s 時間 0.01s

2018-02-26 09:55:12 (3.18 MB/s) - `index.html?a=1&s=JPY&t=USD' へ保存終了 [48550]

以上。