Ubuntu サーバー 20.04 に Let’s encrypt を使って https 接続を実現する

二度やったんでだいたいの流れはわかりました。表題の通りなのですが、順番にやれば何とかなります。手順は多いですが、難しくはないのでやってみてください。需要があるかどうかは知りませんけどね。

前提

Ubuntu サーバー 20.04 を使います。すでに WordPress などを Apache2 を利用して表示できるようになっている。そこから始めます。 Apache のインストールなどは他にもたくさん書かれている情報があるので、そちらを参照してもらうとして省略させていただきます。

Apache サーバーのホームディレクトリは、 /var/www/html が標準ですね。ここに WordPress などを展開しても良いのですが、 /var/www/your_domain というフォルダを新たに作ってそこに WordPress を展開しました。 WordPress のインストールも省略させていただきます。

さて順番に始めますね。

Apache 仮想ホストの設定

あとで certbot というスクリプトをインストールして利用します。 certbot が問題なく動くために Apache 仮想ホストを設定します。設定ファイルを /etc/apache2/sites-available/your_domain.conf という名前で作ります。いうまでもありませんが、 your_domain の部分は各自のドメイン名を使います。私は kaizawa.jp というドメイン名を使いましたので、 /etc/apache2/sites-available/kaizawa.jp.conf というファイルを作りました。このファイルの中身は次の通りです。

<VirtualHost *:80>
    ServerAdmin ≪メールアドレス≫
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

作っただけでは Apache サーバーは認識してくれないので、 Apache サーバーに認識させます。

$ sudo a2ensite your_domain.conf

このコマンドで、 Apache サーバーは仮想ホストを認識します。更に、デフォルトでは /etc/apache2/sites-available/000-default.conf というファイルがあって /var/www/html をアクティブにしています。これを無効にしてやります。

$ sudo a2dissite 000-default.conf

これで良いですね。 your_domain が有効になりました。念のためシンタックスチェックをかけます。

$ sudo apache2ctl configtest

エラーが出なければ OK です。 Apache を再起動させましょう。

$ sudo systemctl restart apache2

certbot のインストール

さて自動的にセキュア接続の処理をしてくれる certbot ですが、標準ではインストールされていないので、インストールします。 apt でインストールできますので簡単です。 certbot と使用するライブラリーをインストールします。

$ sudo apt install -y certbot python3-certbot-apache

ファイアウォールの設定

おそらく 80 番のポートは空いていて 442 番 (https) は閉じているはずですね。下記のコマンドを実行します。二行目は重複する設定を削除しているものです。

$ sudo ufw allow 'Apache Full'
$ sudo ufw delete allow 'Apache'

certbot の実行

$ sudo certbot --apache

SSL 証明書を入手する必要があります。基本 certbot がやってくれるので、こちらは質問に答えていくだけで OK です。 Apache ではなく、 Nginx を使っている場合は、ここで引数が変わるはずです。詳しく調べていないのですが、 Welcome to the Certbot documentation! — Certbot 1.22.0 documentation に引数の事も書いてあったと思います。参照してみてください。英語ですが …

さて、上記コマンドを入力するといくつか質問が出てきます。実はその部分記録を取っていなかったので、ここには転記できません。 your_domain を答える部分。そして各種質問事項。 5 〜 6 問あったはずです。英文ですが平易な文章なのでゆっくり読んで答えてください。最後に Congratulations! というメッセージとともに、あなたのサイトは SSL 接続できるようになったよ。と教えてくれます。ひとまずこれで OK ですね。

証明の期限と自動通知の確認

Let’s encrypt は 90 日で期限切れとなります。期限が切れる度にスクリプトを実行しても良いのですが、人間忘れますからね、気がついたらセキュア接続できなくなっていたっていうのは悲しいですね。 certbot はその辺もちゃんと考えてあります。一日に二度自動的にサーバーに問合せを出してくれるようになっているんですね。それを確認してみます。

$ sudo systemctl status certbot.timer

● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; disabled; vendor preset: enabled)
     Active: active (waiting) since Thu 2021-12-09 20:25:30 JST; 1 day 1h ago
    Trigger: Sat 2021-12-11 01:52:05 JST; 4h 4min left
   Triggers: ● certbot.service

12月 09 20:25:30 ubuntu2 systemd[1]: Started Run certbot twice daily.

一行目を実行してみたら、私の環境ではその下の部分が表示されました。アクティブになってますね。次の通知が 12/11 の 01 : 52 に行われるようです。


以上簡単でしたがセキュア接続までの説明でした。参考になれば幸いです。

投稿者プロフィール

kaizawa
kaizawaブロガー
新潟県在住。1964年生まれ、東京オリンピックの年ですね。
突然燃え上がったり、鎮火したり興味の波が激しいので注意が必要です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA