Ubuntu18.04 で Certbot を使った SSL 証明書の発行と更新

こちらの記事は古い内容になります。より最近のものは「 Ubuntu20.04 で Certbot を使った SSL 証明書の発行と更新 」を確認してください。

Certbot

Certbot は無料で SSL 証明書を発行・更新できるサービスです。従来は、SSL 証明書の発行は面倒な手続きが多く、時間のかかる作業でした。しかし今では、 Certbot で Let's Encrypt 認証局の SSL 証明書発行から Apache や Nginx の設定まで自動で設定するのが一般的になりました。
ここでは AWS EC2 にある Ubuntu18.04 サーバの Apache に Certbot を使って SSL対応する流れを紹介したいと思います。

Apache インストール

まずは Ubuntu18.04 に Apache をインストールします。

$ sudo apt update
$ sudo apt install apache2

Certbotで正しく処理するには、ドメイン名またはFQDNの設定が必要になります。Apache の設定ファイルに ServerName を指定します(ここでは xxx.yyy.co.jp )。 www などエイリアスがある場合は、 ServerAlias の設定も行いましょう。

$ sudo vi /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerAdmin xxx@yyy.co.jp
DocumentRoot /var/www/html
ServerName xxx.yyy.co.jp

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

設定が終わったら、 Apache を再起動します。

$ sudo service apache2 restart

Certbot インストール

次に Certbot をインストールします。

$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot python-certbot-apache

インストールが終わったら Certbot を実行しましょう。以下では apache オプションをつけています。以下重要な箇所のログのみ記します。

$ sudo certbot --apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): xxx@yyy.co.jp

You must agree in order to register with the ACME server at
https://acme-v02.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?
(Y)es/(N)o: N

Which names would you like to activate HTTPS for?
----------------------------------------
1: xxx.yyy.co.jp
----------------------------------------
 (Enter 'c' to cancel): 1

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
----------------------------------------
1: No redirect
2: Redirect
----------------------------------------
(press 'c' to cancel): 2

Congratulations! You have successfully enabled https://xxx.yyy.co.jp

途中の質問は

  • メールアドレス
  • 規約の同意
  • メール受信
  • SSL化するドメイン名, FQDNまたはエイリアス
  • http をhttps にリダイレクトするか

などがあります。
最後の方に「Congratulations! You have successfully enabled https://xxx.yyy.co.jp」と表示されていれば SSL 対応が完了です。

SSL 証明書の更新

Let's Encrypt の SSL 証明書は期限が3ヶ月と短いです。3ヶ月毎に手動で更新手続きを行ってもいいですが、私なら確実に忘れてしまうでしょう。そのため cron を使って自動で更新できるようにしておきます。

$ sudo crontab -e
@weekly /usr/bin/certbot renew >> /var/log/letsencrypt-renew.log

これで毎週更新チェックが行われるので SSL 証明書が切れることはないでしょう。

まとめ

Webシステムを作成するにあたり、SSL対応はセキュリティ上必須です。以前は、ある程度知識を持ったエンジニアが時間をかけて作業していましたが、 Certbot を利用すると素人でも簡単に設定できるようになりました。いい時代になったなぁと感じますね。

TKS2では特殊なサイトのSSL化も対応可能です。 もしお困りのときはぜひお声がけください。