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

以前に「Ubuntu18.04 で Certbot を使った SSL 証明書の発行と更新」の記事を投稿しましたが、OS を Ubuntu20.04 にした内容となります。

Certbot

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

Apache インストール

まずは Ubuntu20.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 をインストールします。以前は「 python-certbot-apache 」をインストールしていましたが、 Python3 に変わっていることに注意してください。

$ sudo apt-get install certbot python3-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ヶ月と短いです。以前は cron を使って自動で更新できるようにしていました。しかし、最新の certbot には自動更新の機能がありますので、特別何かを設定する必要はありません。念のため正しく動作しているか確認してみましょう。

$ sudo systemctl status certbot.timer
● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Wed 2021-10-06 12:42:41 UTC; 5min ago
    Trigger: Thu 2021-10-07 05:34:19 UTC; 16h left
   Triggers: ● certbot.service

Oct 06 12:42:41 ip-172-31-21-72 systemd[1]: Started Run certbot twice daily.

このように表示されていれば問題ないでしょう。1日に2回実行されているようですね。

まとめ

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

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