まとめ
- Apacheのmod_envで
SetEnv HTTPS on - Apacheのconfファイルで
ServerName https://www.example.com:443 - アプリケーション内の非SSLなURLの定数をつぶす()
何が問題か?
SSL処理はSSLアクセラレータが受け持つので、HTTPサーバとアプリケーションは素のHTTP環境下で動作することになります。
アプリケーション自体は通信が暗号化されていようがいまいが、特に関係ありません。
とあるプロジェクトで発覚した問題は、以下2パターンでした。
- (HTML中や、Locationヘッダでリダイレクト先として使う)URLを生成する際にSSLでないアドレスが生成される場合がある。
- SSLを強制したいシーンで、自分がSSL環境下にあるかどうか判定できずエラーになったり、再帰的リダイレクトが発生する。
解説
環境変数 HTTPS
仕様があるのか不明ですが、mod_sslのマニュアルとかPHPの$_SERVERのマニュアルには記述があります。SSL環境下では on ないし ON が設定されます。SSL環境下 でない 場合は設定されませんが、IISの場合のみ、SSL でない 状態で off が入っているそう。
アプリケーションが、SSL環境下で動作しているかどうか判定に使っていました。
ServerNameの変更
スクリプトが実行されているサーバの名前として、環境変数 SERVER_NAME に設定されます。
URL生成のネタとして使用している部分がありました。
定数値
なんともできません。grepしましょう。
設定例
Apacheのバーチャルホスト機能を使って、SSLアクセラレータとやりとりするポートを専用に割り当て、その中で設定するのがベターでしょうか。
尚、ServerNameのホスト名は、SSLアクセラレータのホスト名と同じになります。
<VirtualHost *:10443>
ServerAdmin webmaster@www.ssl-axl.com
DocumentRoot "c:/prg/Apache24/htdocs"
ServerName https://www.ssl-axl.com:443
ErrorLog "logs/www.ssl-axl.com-error.log"
CustomLog "logs/www.ssl-axl.com-access.log" common
SetEnv HTTPS on
</VirtualHost>