blogをhttps化した

ようやく重い腰を上げて長いこと先延ばしにしていたこのブログ(WordPress)のhttps化をした。
ご多分に漏れず証明書の発行にはLet’s Encryptを使用したのだが、非常に簡単だった。以下作業ログ。
環境はConohaのVPSでCentOS7.2 + NGINX。

Certbotをダウンロード

Let’s Encryptの証明書の発行、更新をやってくれるCertbotを任意のディレクトリにGithubからクローンする。

git clone https://github.com/certbot/certbot

Certbotを使って証明書の発行

cloneしてきたcertbotディレクトリの中にcertbot-autoというシェルスクリプトが入っていて、以下のコマンドを実行すると

./certbot/certbot-auto certonly

対話形式で証明書の発行が進んでいく

How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Apache Web Server plugin - Beta (apache)
2: Nginx Web Server plugin - Alpha (nginx)
3: Spin up a temporary webserver (standalone)
4: Place files in webroot directory (webroot)
-------------------------------------------------------------------------------
Select the appropriate number [1-4] then [enter] (press 'c' to cancel): 2

NIGNXだから2を選択

Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): xxx@xxx.com

メールアドレスを入力

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.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: Y

Certbot作ってる会社からメールを受け取りたいか聞かれているのでなんとなくYes。どっちでもよい。

Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): xxx.com

https化したいドメインを入力

ここまでやって Congratulations! と表示されれば証明書の発行は完了。

NGINXの設定

NGINXの設定ファイルを変更する。80番ポートの設定を443番に変更して、証明書の記述を追加。

これを

server {
  listen 80;
  server_name xxx.com;
  

こう

server {
  listen 443 ssl;
  server_name xxx.com;

  ssl_certificate     /etc/letsencrypt/live/xxx.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.pem;
  

httpをhttpsにリダイレクトさせる設定も追加。

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

設定がうまくできていればNGINXを再起動すればhttps化完了!

systemctl restart nginx.service

WordPressの管理画面でURLの変更

設定>一般のWordPress アドレス (URL), サイトアドレス (URL)のhttpをhttpsに変更した。
これやらないとパーマリンクがhttpのままなのかな?多分。

証明書の自動更新

Let’s Encryptの証明書の有効期間は90日間なのでcronで自動更新するように設定した。

crontab -e

で設定ファイルを開いてcertbot-autoで更新する設定を書く。以下では毎月24日17時55分に更新するように設定している。

55 17 24 * * /bin/bash -l -c '{任意のパス}/certbot/certbot-auto renew --force-renewal && service nginx restart'

これで証明書を手動で更新する煩わしさがなくなった。

特にハマりどころもなく、さくっとhttps化できた。さっさとやっておけばよかった〜

参考ページ

Let’s Encryptを使ってみた
Let’s Encrypt+NginxでSSL証明書発行、自動更新の設定方法
nginxでhttpでのアクセスをhttpsにリダイレクト