Syntax Error.

[Sy] Amazon Linux(2017.09 release) + Nginx の環境で Let's Encrypt の SSL/TLS 証明書を取得して HTTPS の設定をする手順

2017/10/20

つい先日さくらのレンタルサーバでも設定機能の提供が始まった 無料SSL/TLS証明書 Let’s EncryptAmazon Linux + Nginx でも使いたい! という場合の設定方法を説明します。

※2017/10/21追記 自動更新についても書きました。こちらの記事で証明書取得後、自動更新が必要な場合にどうぞ。

⇒ [Sy] Amazon Linux(2017.09 release) + Nginx の環境で Let's Encrypt の SSL/TLS 証明書を自動更新する設定

0. 参考サイトと必要な準備

Amazon Linux は正式サポートはされてないですが、以下の certbot 公式サイトの Nginx + CentOS 6 の手順のとおり進めていきます。(Amazon Linux に一番近いのは CentOS 6 っぽいので)

⇒ Certbot公式サイト(certbot.eff.org)

NginxCentOS 6 を選択すると、この記事で説明する手順が表示されます。

certbot(Let's Encrypt)

続いて準備ですが、以下を満たす環境を構築しておいてください。

準備1:Amazon Linux + Nginx で構築されたサイトがあること

以下のようなサイトを準備してください。

⇒ [Sy] Amazon Linux (2017.09 release) でのPHP7(+php-fpm)とnginxの設定方法(インストール、設定、自動起動)

準備2:証明書を発行するドメイン(サブドメイン)が準備1のサイトに紐付けられていること

DNSレコードの設定を行っておき、 どんなネットワークからアクセスしてもきちんとサイトが表示されるようにしておきます。

上記2つの準備ができないうちは、証明書の発行はできません。しっかり準備できてから進みましょう。

ということで、今回は、http://lets-test.utano.meというURLでサイトを表示できる状態からの設定手順について説明をしていきます。

https://lets-test.utano.me でSSL化することを目指します)

なお、 前は nginx を起動したままだと証明書を発行できなかったのですが、今回説明する手順どおりだと今は止めなくて大丈夫でした!

また、細かく分けて説明しているので記事は長めになってますが、時間としては 10 分もあれば終わります。

1. certbot-auto を取得

まずは、対象のサーバにSSH等でログインして、以下のコマンドで certbot-auto というファイルを落としてきます。(今回はルートディレクトリ上に作成します)

$ cd
$ wget https://dl.eff.org/certbot-auto

$ ll
total 56
-rw-rw-r-- 1 ec2-user ec2-user 57312 Oct  5 00:05 certbot-auto

ダウンロードされた certbot-auto に実行権限を付けます。

$ chmod a+x certbot-auto
$ ll
total 56
-rwxrwxr-x 1 ec2-user ec2-user 57312 Oct  5 00:05 certbot-auto

2. certbot-auto を実行する

さっそく実行してみますが、その前に注意があります。

実行時、必ず –nginx, –debug オプションを付けるようにしてください。

それぞれのオプションの意味はこうです。

--nginx オプション

certbotnginxapache(httpd)設定ファイルを自動でチェックしに行きます。 このオプションを付けなかった場合、 デフォルトで apache の設定ファイルを見に行ってしまう ため、正しく証明書の対象ドメインを certbot が理解できずエラーになる可能性があります。

--debug オプション

最初に書いたとおり、 Amazon Linuxcertbot で正式サポートされていません。そのため、 このオプションを付けないと先に進めない です。

では実行してみます。

$ sudo ./certbot-auto --nginx --debug
・
・
(必要なパッケージがインストールされる)
・
・
Installed:
・
・
(インストールされたパッケージのリスト)
・
・
Dependency Installed:
・
(依存関係のあるパッケージのリスト)
・
・
Complete!
Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx

Pythonの環境作成などを自動でしてくれました。

続けて5つほど質問されるので、答えていきます。

急いでいる人のためにまとめると、

  1. 緊急時などの通知用メールアドレスを入力 してEnter
  2. 「A」と入力 してEnter(利用規約への同意)
  3. 「N」と入力 してEnter(Electronic Frontir Foundation へのメールアドレス共有を拒否)
  4. 対象ドメイン選択 (リストを確認し、数字をカンマ区切りで入力)してEnter
  5. 「2」と入力 してEnter(HTTPへのアクセスをHTTPSに自動リダイレクト)

という感じで回答していきます。(一応ちゃんと選択肢などは確認して入力してください)

以下に詳しく説明します。

質問1:メールアドレス

Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): xxxxx@example.com  <- メールアドレスを入力

緊急時、セキュリティに関する通知の宛先メールアドレスになります。例えばSSL証明書の有効期限が近づいてきた時に通知がきたりするので、 必ずちゃんと日常的にチェックできるメールアドレスにしておきましょう。

質問2:利用規約への同意

-------------------------------------------------------------------------------
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   <- 「A」と入力(同意)

利用規約への同意が求められます。当然同意しないと使えませんので、「A」と入力して先へ進みます。同意出来ない場合は「C」と入力すると終了します。

質問3:Electronic Frontir Foundation へのメールアドレス共有をするかどうか

-------------------------------------------------------------------------------
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: N

Electronic Frontir Fundation という非営利団体があるようで、そこからのメールを受け取るかどうかということになります。よくわからないので、今回はとりあえず拒否(「N」と入力)しておきます。

質問4:SSL証明書を発行する対象ドメインの選択

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: lets-test.utano.me
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1

これ便利だなと思いました。

自動で nginx の設定ファイルを読み込んで、 SSL化の対象ドメインの候補をリストアップしてくれる みたいです。今回は1つしか設定してなかったので、「1」と入力(lets-test.utano.me を選択)してEnterを押します。もし複数(1, 2, 3みたいに)表示された場合は、 カンマまたはスペースで数字を区切って入力すれば良いようです。

ここで「1」を選択してEnterを押すと、以下のようにログが流れます。

Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for lets-test.utano.me
Waiting for verification...
Cleaning up challenges
Deployed Certificate to VirtualHost /etc/nginx/conf.d/01_lets-test.utano.me.conf for set(['lets-test.utano.me'])

証明書を発行して、 自動で nginx の設定ファイルを更新してくれてます。

素晴らしいですね。

あとから設定ファイルを見てみましたが、 以下の設定が server ディレクティブ内に追記されていました。

server {
  listen 80;
  server_name lets-test.utano.me;
  root /var/www/test;
  ・
  ・
  (↓ここから)
  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/lets-test.utano.me/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/lets-test.utano.me/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
  (↑ここまで)
}

最後にもう一つ質問があるので、戻ります。

質問5: HTTPでのアクセスをHTTPSにリダイレクトさせるかどうか

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): 2

ここは特に理由がなければ、「2」のリダイレクトを選択で良いでしょう。

すると、続けてこのようなログが流れます。

Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/01_lets-test.utano.me.conf

またまた自動で設定ファイルが更新されています。

このタイミングで、以下の部分が server ディレクティブに追加されているようでした。

server {
  listen 80;
  server_name lets-test.utano.me;
  root /var/www/test;
  ・
  ・
  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/lets-test.utano.me/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/lets-test.utano.me/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

  (↓ここから)
  if ($scheme != "https") {
      return 301 https://$host$request_uri;
  } # managed by Certbot
  (↑ここまで)
}

以上ですべての質問への回答は終わりになり、最後に「おめでとう」メッセージが表示されて certbot-auto の処理が終了します。

-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https://lets-test.utano.me

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=lets-test.utano.me
-------------------------------------------------------------------------------

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/lets-test.utano.me/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/lets-test.utano.me/privkey.pem
   Your cert will expire on 2018-01-18. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again with the "certonly" option. To non-interactively renew *all*
   of your certificates, run "certbot-auto renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

3. ブラウザでの表示確認

無事に証明書が発行できたので、ブラウザ上での変化を確認していきます。(Chromeでの表示)

試しに http://lets-test.utano.meとアクセスすると、自動でhttps://lets-test.utano.meにリダイレクトされ、次のようにアドレスバーに 「Secure」という文字と鍵マークが表示されてるのが確認できます。

Chrome HTTPSラベル

続いて、Developer Tools を起動します。

( Mac だと Cmd + Opt + I、Windows だと Ctrl + Shift + I

Developer Tools が起動したら、上にある Security のタブをクリックすると、 View certificate というボタンが現れるのでそれをクリックします。

Chrome Devtools Securityタブ

すると小さいウィンドウが表示され、証明書の情報が確認できます。

Chrome View certificate

Let's Encrypt という文字と、対象となっているドメイン(サブドメイン)が書かれているのがわかります。

以上で、Let’s Encrypt による SSL 証明書の発行は完了です。

ひとこと

公開当初に比べ、だいぶ洗練されてきていて使いやすくなってる気がします。

SSL証明書を無料で様々な環境で自由に使えるのは、ものすごく魅力的です。

さくらレンタルサーバのように簡単な設定機能も提供されてきていますが、もし自分でやらないといけない、という場合に参考になれば!

自動更新についても後日まとめます。

※2017/10/21追記 自動更新について書きました。

⇒ [Sy] Amazon Linux(2017.09 release) + Nginx の環境で Let's Encrypt の SSL/TLS 証明書を自動更新する設定