Ubuntu 16.04 LTS に Let's Encrypt を導入する方法(更新する方法も)

前提条件

以下の条件のもとで、Ubuntu 16.04 LTSLet's Encryptを導入します。

  • Webサーバ(リバースプロキシ)にはnginxを用いる
  • Let's Encryptapt-getで入れる

全体の流れ

  1. apt-getletsencryptをインストールする
  2. ドメインを指定して証明書を生成する
  3. nginxの設定ファイルに証明書の内容を追加する
  4. nginxを再起動して証明書を有効にする
  5. 3ヶ月以内の間隔で証明書の自動更新をする

1. apt-getletsencryptをインストールする

いろいろな方法での情報が錯綜しているのですが、apt-getでさっさと入れてしまうのがよいです。なお、Apacheですとpython-letsencrypt-apacheも入れる必要があると「非公式解説サイト」に書いてありますが、試していないので分からないです。

$ sudo apt-get install letsencrypt

2. ドメインを指定して証明書を生成する

インストールができたらコマンドを実行して証明書を生成します。ただし、このコマンドは 80番ポート を開けて死活判断するため、すでに 80番ポート で動いているサービス*1は止めておく必要があります。止めておかないと以下のように怒られます。

f:id:gregminster:20171215054608p:plain

80番ポートを使用するサービスをちゃんと停止したら、以下のコマンドを実行して証明書を生成しましょう。簡単です。入力するドメイン名はサブドメインを含みます。

$ sudo letsencrypt certonly --standalone -d ここにドメイン名を入れる

初めて Let's Encrypt を利用する場合には連絡用のアドレスが求められ、さらに規約への同意が求められます。

f:id:gregminster:20170805210253p:plain

f:id:gregminster:20170805210258p:plain

上記のコマンドの結果、Congratulations!を含んだ以下のような文字列が出てくれば成功です。複数のドメインで取得したい場合は上記コマンドを繰り返します。

$ sudo letsencrypt certonly --standalone -d domain.name

IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to your@mail.address.
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/domain.name/fullchain.pem. Your cert will
   expire on 2017-11-03. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let's Encrypt
   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 Let's
   Encrypt so making regular backups of this folder is ideal.
 - If you like Let's Encrypt, 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. nginxの設定を追加し、再起動して証明書を有効にする

nginxに証明書を適用するために、設定を書き加えます。/etc/nginx/sites-available/defaultを編集しましょう*2

主要な追記(変更)内容は以下のところです。

server {
  listen 443;
  ssl on;
  server_name ここにドメイン名を入れる;
  ssl_certificate /etc/letsencrypt/live/ここにドメイン名を入れる/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/ここにドメイン名を入れる/privkey.pem;
  (省略)
}

4. nginxを再起動して証明書を有効にする

nginxを再起動しましょう。証明書が有効になっていることが確認できれば OK です。

$ sudo service nginx restart

5. 3ヶ月以内の間隔で証明書の自動更新をする

Let's Encryptはそのポリシーから、発行から3ヶ月で有効期限に達します。したがって、3ヶ月以内の間隔で定期的に更新をしてあげる必要があります*3

もっとも、更新方法は簡単です。以下のコマンドを実行するだけです。

$ sudo letsencrypt renew

ただし、このコマンドが実行された際は証明書取得時と同じく、80 番ポート へのアクセスがあります。したがって実際にはnginxを止めてこのコマンドを実行し、実行し終わったらnginxを再起動する、という流れになるでしょう。その内容をシェルスクリプトなどにして3ヶ月以内の間隔で実行すれば、ずっと証明書が有効になります。

補足

  • /etc/letsencrptディレクトリは、証明書を一つでも発行して初めて生成されるディレクトリなので、letsencryptをインストールした直後には存在しません
  • 非公式解説サイト」に出てくるcertbot-autoというコマンドは現時点(2017/07/09)においてapt-getで入れた場合には関係ありません
  • 期限が切れたドメインと同じドメインの証明書を再度取得したい場合には、/etc/letsencrypt/archive および /etc/letsencrypt/live 配下にある当該ドメインのディレクトリを削除してから再度取得すればよいです*4

参考(大感謝)

*1:nginxでしょうが

*2:/etc/nginx/sites-enabled/ 配下にドメインごとに分割した設定ファイルを置く場合はこの限りではありません

*3:最新の更新からあまり経っていないと「まだ必要ないよ」と言われますが

*4:そうでなくてもいいんですが、削除したほうが綺麗に入れ直せます

Powered by はてなブログ