follow us in feedly

Let’s EncryptをNginxに設定して常時SSL化する

本ブログの常時SSL化対応が完了しました。
約3年ぶりにブログ再開したことと、Let’s Encryptを試す機会になるということで
ずっと温めていたタスクの実行に踏み切ることができました。
Nginxの設定にはほぼ触れず、Let’s Encryptに関わる内容のみですが紹介していきます。

環境

  • CentOS 6.9
  • Nginx 1.12.2
  • Certbot 0.19.0

Certbotのダウンロード & 実行

クライアントソフトウェアのCertbotをダウンロードして実行し、証明書を取得します。

$ cd /usr/local/bin
$ sudo wget https://dl.eff.org/certbot-auto
$ sudo chmod a+x certbot-auto
$ sudo ./certbot-auto certonly --webroot -w /var/www/blog.77dogs.net/ -d blog.77dogs.net

エラーが発生

下記のエラーが発生しました。

certbot-auto: line 864: virtualenv: コマンドが見つかりません

対策

Python 2.7が必要なのでインストールして、その環境下でCertbotを実行します。

$ sudo yum install centos-release-scl
$ sudo yum install python27 python27-python-tools
$ sudo scl enable python27 bash
$ ./certbot-auto certonly --webroot -w /var/www/blog.77dogs.net/ -d blog.77dogs.net

別のエラーが発生

新たに下記のエラーが発生しました。

...
IMPORTANT NOTES:
 - The following errors were reported by the server:

Domain: blog.77dogs.net
   Type:   unauthorized
   Detail: Invalid response from
   http://54.92.40.15/.well-known/acme-challenge/fCmuZYV6nsMPOb_nAvTkH45be_DFHLxvvLuyXUCPrSg:
   "<html>
   <head><title>403 Forbidden</title></head>
   <body bgcolor="
white">
   <center>

<h1>403 Forbidden</h1>

</center>

<hr>

<center>"


To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.
...

対策

/.well-known以下にアクセスできないので、本ブログのNginx設定ファイルに追記します。

<br />
location ^~ /.well-known/ {
  log_not_found off;
  access_log    off;
  autoindex     off;
  try_files     $uri $uri/ =404;
}

Nginxを再起動して、Certbotを再実行します。
これで証明書の取得は完了です。

$ sudo service nginx restart
$ sudo scl enable python27 bash
$ ./certbot-auto certonly --webroot -w /var/www/blog.77dogs.net/ -d blog.77dogs.net

Nginxの設定

証明書が取得できたので、NginxにSSL設定をします。
Qualys SSL Labsの評価をA+にする設定をしてみました。
詳しい設定方法は書かないので参考サイトを参照してください。

自動更新設定

最後に、自動更新するようにcronの設定をします。
毎週日曜の23時に起動するように設定しました。
更新がなければ特に何もおこなわれません。

0 23 * * 0 /usr/bin/scl enable python27 "/usr/local/bin/certbot-auto renew -q --post-hook '/sbin/service nginx reload'"

まとめ

Let’s Encryptの証明書による常時SSL化の手順をご紹介しました。
証明書関連はほとんどCertbotがやってくれるので割りと簡単にできたように思います。
Nginxの設定については他サイトに任せていますが、参考になれば幸いです。

参考

タグ: , ,

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください