Let's encryptでSSL証明書を取得

  • Ubuntu 16.04 LTS
  • Apache2
  • ドメイン取得済み

無料で簡単にSSL証明書を発行できる。Let's encryptは安全性の高いSSL通信を広めようとしている公益法人なので、無料でも怪しいところでは無い。

基本的に

手順

インストール

$ sudo apt-get install letsencrypt python-letsencrypt-apache

2つめのpython-letsencrypt-apacheはいらないかも?

確認

$ sudo letsencrypt

上記解説サイトでは、実行コマンドはcertbotとなっているが、Ubuntuの場合はこっち

青い画面に切り替わってビビるが、解説サイト通りNoを選択

証明書発行

$ sudo letsencrypt --help

コマンド指定方法を確認

[SUBCOMMAND]のデフォルトはrunとなっていて、証明書取得と同時にWebサーバ設定もやってくれると書いてあるが、実際やってみると

$ sudo letsencrypt --webroot -w (ApacheのDocRoot) -d (所有ドメイン)
With the webroot plugin, you probably want to use the "certonly" command, eg:

    letsencrypt certonly --webroot

となり、取得だけを実行するcertonlyの指定を薦められた。ここ、後で考えると–webrootでなく–apacheを指定した方が良かったのかも?

とりあえず実践時は、言われるままにcertonlyを選択

$ sudo letsencrypt certonly --webroot -w (ApacheのDocRoot) -d (所有ドメイン)

何かあったときの連絡用メールアドレスを求められるので入力

利用規約に同意

これだけで、証明書が取得でき、秘密鍵などあわせて所定の場所に生成される。

IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to (メルアド).
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/(ドメイン名)/fullchain.pem. Your cert will
   expire on (有効期限). To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
...(略)
  • 資格情報無くしたら、メルアドに送られたメールから回復できるよ
  • /etc/letsencrypt/live/(ドメイン名)以下に、必要な認証ファイル作っといたよ
  • 有効期限は3ヶ月で切れるよ
  • 再取得はもう一回letsencrypt実行すれば出来るよ

Apache設定

/etc/apache2/sites-available/default-ssl.confを編集

# SSLCertificateFile     /etc/ssl/certs/ssl-cert-snakeoil.pem
# SSLCertificateKeyFile  /etc/ssl/private/ssl-cert-snakeoil.key
SSLCertificateFile      /etc/letsencrypt/live/(ドメイン名)/cert.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/(ドメイン名)/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/(ドメイン名)/chain.pem

もしSSL設定を有効にしてなければ、有効化

$ a2enmod ssl
$ a2ensite default-ssl

再起動

$ sudo service apache2 restart

証明書自動更新

有効期限は3ヶ月しか取れないため、定期的に更新の必要があるが、3ヶ月に1回って忘れそうな絶妙なライン。

letsencryptは、取得時もそうだが、更新時もコマンド一発でできるので、サーバのCRONに自動実行させることができる。

具体的には、以下のコマンドで良い。

$ sudo letsencrypt renew
$ sudo service apache2 restart

ただ、有効期限間近で無いと更新できずエラーが返るが、エラー前提で頻繁に問い合わせるのもスマートじゃ無い。かといって期間を空けると運悪く更新タイミングで実行できず、期限切れになるのもやりたくない。

その際、–force-renewalを付けると一定期間内の上限付きで、いつでも更新できるようになる。これを使って1~2ヶ月に1回程度実行しておく。

$ crontab -e
0 0 1 */2 * sudo letsencrypt renew --force-renewal && sudo service apache2 restart

なお、tty経由でないsudoの実行は、以下参照。

programming/web_server/letsencrypt.txt · 最終更新: 2017/09/20 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0