EC2 Amazon LinuxでWordPressを無料でHTTPS化する方法


今までEC2にWordpressを自前で構築しhttpでブログを運営していましたが、昨今は常時https化することが望ましいとされているため、httpsに切り替えてみましたのでその時の手順をまとめました。

個人のブログ運営ですので、基本的には無料で出来る方法を探した結果となっています。

SSL証明書発行はLet’s Encryptを利用

無料でSSL証明書を発行するためのLet’s Encryptという無償サービスがありますので、これを利用します。無償だと選択肢はこれ一択かと思います。

AWSの「AWS Certificate Manager」というSSL証明書を発行するサービスがありますが、無料で利用するにはELBにアタッチする必要があります。ELBを使うと維持費に月2,000円ぐらいかかってしまいますので、Let’s Encryptを使うことにしました。

Let’s Encryptの導入方法

Let’s EncryptをLinuxサーバに入れるには、certbot-autoをインストールする必要があります。詳しい説明は下記にありますが、ここでは手順だけかいつまんで紹介します。

Let’s Encrypt公式サイト
Certbot公式サイト

1. サーバにCertbotをインストールする

まずはSSL証明書を入れるサーバにCertbotをインストールします。

$ wget https://dl.eff.org/certbot-auto
$ sudo mv certbot-auto /usr/local/bin/certbot-auto
$ sudo chown root /usr/local/bin/certbot-auto
$ sudo chmod 0755 /usr/local/bin/certbot-auto

2. Certbotを使ってSSL証明書を発行する

以下のコマンドでSSL証明書を発行します。
「certonly」はSSL証明書を作るがWebサーバへのインストール(設定変更)は行わないことを意味します。「–webroot -w」オプションでWebサーバのドキュメントルートを指定します。「-d」でサイトのドメインを指定します。「–email」でLet’s Encryptの通知などが届くメールアドレスを指定します。

$ certbot-auto certonly --webroot -w /var/www/html -d mysite.co.jp --email mymail@sample.com

通常はこのコマンドでSSL証明書が作られるのですが、Amazon Linuxの場合はFATALエラーが出てしまいます。

FATAL: Amazon Linux support is very experimental at present...
if you would like to work on improving it, please ensure you have backupsand then run this script again with the --debug flag!
Alternatively, you can install OS dependencies yourself and run this script
again with --no-bootstrap.

メッセージに従い、certbotを–debugオプションを付けて実行し、必要な依存ライブラリをインストールする必要があります。大丈夫だとは思いますが、念のため事前にスナップショットをバックアップしておくと安心です。

$ certbot-auto --debug

上記コマンドでいろいろ依存ライブラリがダウンロードされますが、最後に「ImportError: No module named cryptography」というエラーがでました。どうもPythonのcryptographyモジュールが足りていないようです。以下のコマンドで追加します。

$ sudo /opt/eff.org/certbot/venv/bin/pip install cryptography

このあと再度certbot-autoを実行しようとすると別のモジュールが足りずエラーとなるので、追加で以下のモジュールもインストールします。

$ sudo /opt/eff.org/certbot/venv/bin/pip install interface
$ sudo /opt/eff.org/certbot/venv/bin/pip install zope

以上でCertbotが動くようになりますので、再度CertbotでSSL証明書を発行するコマンドを実行します。

$ certbot-auto certonly --webroot -w /var/www/html -d mysite.co.jp --email mymail@sample.com

コマンド実行後、以下のフォルダに証明書ファイルが作成されます。

$ ls /etc/letsencrypt/live/mysite.co.jp/
cert.pem  chain.pem  fullchain.pem  privkey.pem

3. SGのインバウンドで443を許可する

AWSのEC2に設定しているSGのインバウンドにポート443(HTTPS)を許可します。

4. WordPressのサイトURLを変更する

MySQLコンソールにログインしWordpressのデータベースに切り替え、以下のSQLでWordpressに登録しているサイトのURLを変更します。

$ update wp_options set option_value = 'https://mysite.co.jp/path' where option_name = 'siteurl';
$ update wp_options set option_value = 'https://mysite.co.jp/path' where option_name = 'home';

5. nginxにSSL証明書の設定を行う

nginxに443ポート(SSL)を受けるための設定を行います。現状受けている80番ポートにはHTTPSへのリダイレクトを行います。

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
server {
  listen 443 ssl;

  ssl_certificate /etc/letsencrypt/live/mysite.co.jp/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/mysite.co.jp/privkey.pem;
...
}

6. GAやサーチコンソールなどサイトのURLを登録しているサービスのURLを変更する

GAを使っている場合は「設定」->「プロパティ」のデフォルトURLと「ビュー」のデフォルトURLをHTTPSに変更します。

サーチコンソールにサイトを登録している場合、既存のプロパティのURLは変更できないため、新しくhttpsのURLで新規登録する必要があります。

そのほかSNSのプロフィールのURLなどがあればhttpsに変更します。

7. cronにSSL証明書の自動更新を設定する

Let’s Encryptの証明書は3カ月で有効期限が切れるため、短い頻度で更新が必要です。手動だと大変なのでcronで月次の更新コマンドを設定します。

0 3 10 * * /usr/local/bin/certbot-auto renew && /sbin/service nginx reload

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です