【Apache】http 通信を https 通信に変換してプロキシする

概要

内部ネットワークのサーバがインターネット上のサーバにアクセスする場合、セキュリティ上の理由でプロキシサーバを経由してアクセスする場合が多いと思います。

参考:プロキシサーバーを使うと、なぜセキュリティが向上するのか?

tech.nikkeibp.co.jp

 

最近では Google が推奨していることもあってか、常時 SSL/TLS のサイトが増えています。

常時 SSL/TLS とは、個人情報を扱うページだけではなくサイト全体を SSL/TLS 化しましょうと言う取り組みです。

www.websecurity.symantec.com

そのため、インターネット上で公開している API のサイトなども https に切り替わってきています。

今回、今まで http でアクセスしていたサイトが https に切り替わるため急遽対応した時のことをまとめました。

本来であれば、リクエストしている箇所のソースを修正するのが正しいやり方だと思うのですが、時間がなく修正したパッケージをリリースするサーバ台数も多かったので、プロキシサーバの設定を更新する方法を取りました。

 

必要なパッケージ

Apache24 で SSL/TLS Proxy を利用するには mod24_ssl と言うパッケージが必要となります。

$ sudo yum install httpd24 mod24_ssl

mod24_ssl のパッケージがインストールされていない環境で https のサイトにプロキシしようとすると以下のエラーが発生します。

Invalid command 'SSLProxyEngine', perhaps misspelled or defined by a module not included in the server configuration

 

対応方法

SSL/TLS Proxy を実現するには、設定ファイルの中で SSLProxyEngine on を記載します。

参考:mod_ssl - Apache HTTP Server Version 2.4

$ sudo vim /etc/httpd/conf/httpd.conf
== 追加 ==
SSLProxyEngine on
ProxyPass /sha2 https://sha256.badssl.com/
ProxyPassReverse /sha2 https://sha256.badssl.com/

上記の httpd.conf の設定は /sha2 配下に来たアクセスを、sha256.badssl.com のサイトにプロキシします。 

 

もしも SSLProxyEngine on の設定なしで、SSL/TLS Proxy しようとすると以下のエラーが発生して Proxy には失敗します。

$ tail /etc/httpd/logs/error_log
[Sun Apr 29 11:00:41.577274 2018] [ssl:error] [pid 3512] [remote XXX.XXX.XX.XXX:443] AH01961: SSL Proxy requested for ip-XXX-XX-XX-XXX.ap-northeast-1.compute.internal:80 but not enabled [Hint: SSLProxyEngine] [Sun Apr 29 11:00:41.577315 2018] [proxy:error] [pid 3512] AH00961: HTTPS: failed to enable ssl support for XXX.XXX.XX.XXX:443 (sha256.badssl.com)

 

余談

SSLProxyEngine on が記載された設定ファイルに http の proxy と https の proxy が混ざり合っていても問題ありません。

SSLProxyEngine on
# https の proxy
ProxyPass /hoge https://hogehoge.com/
ProxyPassReverse /hoge https://hogehoge.com/
# http の proxy
ProxyPass /fuga http://fugafuga.com/
ProxyPassReverse /fuga http://fugafuga.com/

こんな記載方法でも問題なく Proxy できます。