Ubuntu ServerにCertbotを導入する

個人情報やパスワード、クレジットカードなどの機密情報を扱わないようなページだとしても、今や標準ともいえるhttpsでアクセスできるようにしたいですよね?

少なくとも自分においては、情シスに転職する前の就活中に、企業のホームページがhttps対応していなかったために応募をやめたことがあるので、この対応は必須だと思っています。

というわけで、Apacheをhttps(SSL)に対応させるべく、Certbotを導入します。

Cerbotとは?

Certbot is a free, open source software tool for automatically using Let’s Encrypt certificates on manually-administrated websites to enable HTTPS.

Certbot は、手動で管理されている Web サイトで Let’s Encrypt 証明書を自動的に使用して HTTPS を有効にする、無料のオープンソース ソフトウェア ツールです。

https://certbot.eff.org/pages/about

まさに自前でサーバー運用する人のためのツール!

Certbotをインストール

Certbot Instructions
Tagline

インストールする環境はUbuntu Server22.04.3LTSで、公式の手順はUbuntuのバージョンが20となっていますが、とりあえず公式の手順でやってみます。

準備

Certbotを使用するには、以下が必要。

  • SSHが使えること
  • 管理者権限(sudo)
  • Apacheが80番ポートで起動中

SSHでログイン

HTTP Web サイトを実行しているサーバーに SSH 接続します。

WindowsのコマンドプロンプトでSSH接続する場合は以下のコマンドを入力します。

ssh <OSユーザー名>@<接続先>

接続するか確認するメッセージが表示された場合は、yesを入力してEnterを押せばOK。

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

好みの問題で自分はTeraTerm使うんですけどね。

snapdをインストール

snapdというものが必要な様子。公式は次のリンクを参照。

Installing snap on Ubuntu | Snapcraft documentation
Snaps are containerised software packages that are simple to create and install. They auto-update and are safe to run. And because they bundle their dependencie...

ドキュメントを見る限り、今回使用するUbuntuには既にインストール済みのようです。

Snap is pre-installed and ready to go on all recent releases of Ubuntu.

This means, if you’re running Ubuntu 16.04 LTS (Xenial Xerus) or later, including Ubuntu 22.04 LTS (Jammy Jellyfish) and Ubuntu 23.04 (Lunar Lobster), you don’t need to do anything.

Snap はプリインストールされており、Ubuntu の最近のすべてのリリースですぐに使用できます。

つまり、Ubuntu 16.04 LTS (Xenial Xerus) 以降 (Ubuntu 22.04 LTS (Jammy Jellyfish) および Ubuntu 23.04 (Lunar Lobster) を含む) を実行している場合は、何もする必要はありません。

https://snapcraft.io/docs/installing-snap-on-ubuntu

念のため、実行中のUbuntuのバージョンを確認します。

lsb_release -a
ubuntu@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy

もしインストールされていなければ、以下のコマンドでsnapdをインストールします。

sudo apt update
sudo apt install snapd

デフォルトのCerbotを削除

you should remove them before installing the Certbot snap to ensure that when you run the command certbot the snap is used rather than the installation from your OS package manager

コマンド certbot を実行するときに、OS パッケージ マネージャーからのインストールではなくスナップが使用されるようにするために、Certbot スナップをインストールする前にそれらを削除する必要があります。

snapdからCertbotを使用するため、インストール済みのCertbotを削除します。
入ってなくても問題はないので、とりあえず削除するコマンドを実行してみます。

sudo apt-get remove certbot
Package 'certbot' is not installed, so not removed

インストールされていなかったので、削除もされませんでした。

Certbotをインストール

ここまできてようやくインストールします。

sudo snap install --classic certbot
certbot 2.8.0 from Certbot Project (certbot-eff✓) installed

シンボリックリンクを作成して、certbot コマンドを実行できることを確認します。

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Certbotの設定

設定はコマンド1つで以下の作業を全て自動でやってくれます。素晴らしい!

  • 証明書の取得
  • apacheの設定ファイルの構成
  • httpアクセスの有効化
sudo certbot --apache
ubuntu@ubuntu:~$ sudo certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): <自分のメールアドレス>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
404 Page not found - Let's Encrypt
Let's Encrypt is a free, automated, and open certificate authority brought to you by the nonprofit Internet Security Research Group (ISRG). Read all about our n...
You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y 規約に同意しないと多分進まないのでYを入力。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, 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? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: N いろんなメールは必要ないのでNを入力。 Account registered. Please enter the domain name(s) you would like on your certificate (comma and/or space separated) (Enter 'c' to cancel): private.sysmemo.com 証明書に記載するドメインを入力。 Requesting a certificate for private.sysmemo.com Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/private.sysmemo.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/private.sysmemo.com/privkey.pem This certificate expires on 2024-04-18. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for private.sysmemo.com to /etc/apache2/sites-available/000-default-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https://private.sysmemo.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

自動更新の確認

ログを見る限り、証明書を発行してくれるLet’s Encryptから発行される証明書の有効期間は3ヶ月のようですが、Certbotは自動的に有効期限を更新する機能もあります。

自動更新ができるかどうかは、以下のコマンドで確認できます。

sudo certbot renew --dry-run

httpsでのアクセスを確認

対応できたか確認するために、ドメインでアクセスしてみます。

コメント