AWSのEC2でEC-CUBE4系をベースとしたサイトを構築する際に、
HTTPSを導入する方法を紹介します。
方法としては、Let’s Encryptのcertbotを使って導入するか、
AWSのCertificate Managerを使って導入する方法があります。
Certificate Managerを使うと、無料でSSL証明書を発行することができ、
また、更新も自動的に行われます。
cronやapacheでの設定も不要になったり、
簡単になったりするのでオススメです。
今回は、Certificate Managerを使う方法をご紹介します。
まず、Certificate Managerを使ってSSL証明書を発行し、
HTTPSを導入します。
https://qiita.com/hellscare/items/1f515bc21111a5cf3fdb
一つ注意を挙げるとすると、最後のAmazon LinuxのApache設定ですが、
私はAmazon Linux2を利用したのですが、
mod24_sslは入っていませんでした。
Amazon Linux2では、mod_sslをインストールすると
apache2.4に対応したものが入手できます。
HTTPSが導入できたら、以下の記述をapacheのhttpd.conf内に追記します。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Port} !^443$
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^/(.*)?$ https://www.domeinname/$1 [R=301,NE,L]
</IfModule>
これでHTTPアクセスを強制的にHTTPSに変換します。
そして、EC-CUBEのindex.php先頭辺りに以下の記述を追記します。
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
HTTP_X_FORWARDED_PROTOヘッダーは、
クライアントがロードバランサーに接続する前に選択していた
プロトコル(HTTP or HTTPS)を特定するために利用します。
AWSのロードバランサーを利用すると、
HTTPSの環境変数がセットされないので、
ここでセットしてあげることで、
無事EC-CUBE4系でもHTTPSが利用できるようになります。