AWSのEC2でEC-CUBE4系をベースとしたサイトを構築し、HTTPSを導入した。
導入には、Let’s Encryptのcertbotを使うか、AWSのCertificate Managerを使う方法がある。

Certificate Managerを使うと、無料でSSL証明書を発行することができ、更新も自動的に行われる。
また、cronやapacheでの設定も簡単になる。
そこで今回は、Certificate Managerを使うことにした。

まず、Certificate Managerを使ってSSL証明書を発行する。
https://qiita.com/hellscare/items/1f515bc21111a5cf3fdb

上記の注意点を一つ挙げると、最後のAmazon LinuxでのApache設定だが、
Amazon Linux2にmod24_sslは入っていませんでした。
Amazon Linux2では、mod_sslをインストールするとapache2.4に対応したものが入手できる。

導入できたら、以下の記述を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に変換します。

なお、RewriteCond の1〜2行目の記述は、AWSのELBによるヘルスチェックはリダイレクトしないという設定。
ヘルスチェックはステータスコードが200を返すことで問題なしと判断させることが多いため、
リダイレクトさせてしまうと301のコードを返してしまう。

そして、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が利用できるようになる。

Contact
EC-CUBE に関するお問い合わせは、当サイトのContactページのフォームよりお問い合わせください。