Let’s Encryptを導入(Ubuntu16.04LTS + Apache2.4.18 + WordPress)

encryption photo

Certbotのインストールから証明書の取得、インストール

Ubuntu 16.04 LTS向けの公式推奨 https://certbot.eff.org/#ubuntuxenial-apache 手順に従って実施。まずは apt-getでCertbot パッケージをインストールします。

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-apache

念のため追加で $ sudo apt-get upgrade も実施。証明書の取得は以下のコマンドから、対話型で設定できます。

$ sudo certbot --apache

以下、赤字部分が入力が必要な箇所。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): (メールアドレスを入力)

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: (Aで利用条件に同意)

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: (EFFにメールアドレスを知らせて良いか)

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: (自分のドメイン1)
2: (自分のドメイン2)
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): (HTTPSを有効にするドメインをカンマかスペースで区切って列挙)

Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for (自分のドメイン1)
tls-sni-01 challenge for (自分のドメイン2)
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/(ドメイン1のSSLアクセス用のApacheのconf)
Deploying Certificate for (自分のドメイン1) to VirtualHost /etc/apache2/sites-available/(ドメイン1のSSLアクセス用のApacheのconf)
Enabling available site: /etc/apache2/sites-available/(ドメイン1のSSLアクセス用のApacheのconf)

(他にも対象ドメインがあれば繰り返し)

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): (HTTPとHTTPSを共存させる場合は1、HTTPへのアクセスをHTTPSにリダイレクトしてHTTPSのみのアクセスに限定する場合は2。ここでは2を選択。ただし、WordpressなどがHTTPSで動くことを確かめられていないうちは1を選択するほうが安全)

Redirecting vhost in /etc/apache2/sites-available/(ドメイン1のHTTPアクセス用のApacheのconf) to ssl vhost in /etc/apache2/sites-available/(ドメイン1のSSLアクセス用のApacheのconf)

-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https://(ドメイン1) and
https://(ドメイン2)

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=(ドメイン1)
https://www.ssllabs.com/ssltest/analyze.html?d=(ドメイン2)
-------------------------------------------------------------------------------

というわけで、幾つかの質問に答えるだけで証明書の取得とインストールが終了します。

証明書は90日で期限切れになるため、cronで自動更新するよう設定したいところ。まずは自動更新のシミュレーションをして、問題がないか確かめます。

$ sudo certbot renew --dry-run

問題がなければ、下記のような感じでcrontabに登録します。

30 5 1 * * sudo certbot renew && sudo service apache2 reload #letsencryptの証明書自動更新

毎月1日の5:30に証明書を自動更新し、apacheをリロードする設定です。

WordPressへの対応

まずは、WordPressの一般設定にて、WordPressアドレスとサイトアドレスをhttpsから始まるように修正します。

次に、HTTPSでWordPressのサイトにアクセスしたところ、403エラーで弾かれてしまいました。勝手に作られた(?)と思われる /etc/apache2/sites-available/default-ssl.conf が有効になっていたために、Wordpressのドキュメントルートにアクセスできない状態になっていたようで、以下のコマンドでdefault-sslを無効化しました。

$ sudo a2dissite default-ssl

最後に、サイトをHTTPSで確認し、HTTPコンテンツが混在していないかをチェックします。Chromeの検証ツール等を利用して確認したところ、faviconのリンクなどがhttpリンクになっていたので、httpsに修正しました。以上でHTTPS化が完了したので、もう一度下記を実行し、

$ sudo certbot --apache

httpリクエストをhttpsへリダイレクトする設定に変更して、完了です。