Linux VMの証明書を完全無料で自動更新する方法

この記事の内容

  • Azure上にLinux VMを作成し、Apache Webサーバーを構築する手順を解説します
  • 無料のSSL証明書発行局「Let’s Encrypt」とCertbotを使って、HTTPSを有効化します
  • DNSレコードの設定からCertbotの実行まで、一連の流れを紹介します
  • 証明書の自動更新の仕組みについても確認します
  • SSHアクセスができる環境であれば、誰でも無料でHTTPS対応のWebサーバーを構築できます

Azure上にLinux VMを作成する

まずAzure上にLinux VMを作成します。ディストリビューションはDebian系(Ubuntu)を使用します。

VMの作成時には、公開キーを新規生成してAzureに登録します。ポートの設定では、以下の3つを開放しておきます。

  • SSH(22番):接続用
  • HTTP(80番):証明書発行時に必要
  • HTTPS(443番):HTTPS通信用

80番ポートを開放しておく理由は、Let’s Encryptが証明書を発行する際にHTTPでドメインの所有確認を行うためです。最初の段階でポートが閉じていると、証明書の発行に失敗する可能性があります。


VMにSSH接続する

VMの作成後、秘密キー(.pemファイル)をダウンロードし、ローカルのシェルからSSH接続します。

ssh -i ~/Downloads/cert-test.pem azureuser@<パブリックIP>

接続後、IPアドレスを確認しておきます。

ip a

Apacheをインストールする

次に、Webサーバーとしてapache2をインストールします。

sudo apt update
sudo apt install apache2

インストール後、VMのパブリックIPアドレスにブラウザでアクセスし、Apacheのデフォルトページが表示されることを確認します。


DNSレコードを設定する

IPアドレスのままでは扱いにくいため、独自ドメインのDNSにAレコードを追加します。今回はAzure DNSを使用し、以下のようなホスト名を設定します。

cert-test1.example.net<VMIP>

DNSの反映後、nslookupコマンドなどで名前解決できることを確認します。

nslookup cert-test1.example.net

ブラウザでもホスト名を使ってアクセスできることを確認してください。


Let’s EncryptとCertbotについて

Let’s Encryptは、無料で使える自動化されたオープンな認証局です。主要なブラウザやOSに最初から信頼されているため、追加のルート証明書インストールなしに利用できます。

SSHでサーバーにアクセスできる環境では、Certbotというクライアントを使うのが推奨されています。


CertbotをインストールしてHTTPSを有効化する

Snapdの確認

UbuntuにはSnapdが初めから含まれています。インストール済みであればそのまま進みます。

既存のCertbotパッケージを削除する

古いバージョンが入っている場合は事前に削除します。

sudo apt remove certbot

Certbotをインストールする

sudo snap install --classic certbot

Certbotコマンドへのシンボリックリンクを作成する

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

これにより、どのディレクトリからでもcertbotコマンドを実行できるようになります。

証明書の取得とApache設定の自動変更を一括で行う

sudo certbot --apache

このコマンドを実行すると、対話形式で以下の情報を入力します。

  1. メールアドレス:緊急時の通知や期限切れ警告の送信先
  2. 利用規約への同意Yを入力して同意
  3. EFFへのメール共有:任意(YまたはN
  4. ドメイン名:設定したホスト名(例:cert-test1.example.net

入力後、Certbotが自動でLet’s Encryptから証明書を取得し、Apacheの設定も更新してくれます。ブラウザでアクセスすると、HTTPSで接続でき、証明書の警告も表示されません。


証明書の有効期間と自動更新の仕組み

Let’s Encryptが発行する証明書の有効期間は約3ヶ月です。ただし、Certbotをインストールすると、自動更新の仕組みも同時に設定されます。

systemdのタイマーとして登録されているため、定期的に更新が実行されます。

sudo systemctl list-timers

上記コマンドで確認すると、次回の更新予定時刻も表示されます。

自動更新のテスト(ドライラン)

実際には更新せずに動作確認だけしたい場合は、--dry-runオプションを使います。

sudo certbot renew --dry-run

ドライランが成功すれば、自動更新の仕組みが正しく機能していることが確認できます。

また、--dry-runを付けずに実行すると本当の更新も可能ですが、まだ期限が来ていない場合はスキップされます。

sudo certbot renew
Norenewalswereattempted.

このようにスキップされるのは正常な動作です。


まとめ

Azure上のLinux VMにApacheをインストールし、Let’s EncryptとCertbotを組み合わせることで、完全無料でHTTPS対応のWebサーバーを構築できます。

重要なポイントをまとめると以下の通りです。

  • 80番ポートを開放しておくことが証明書発行の前提条件
  • sudo certbot --apacheワンコマンドで証明書取得とApache設定が完了する
  • Certbotはsystemdタイマーを自動登録するため、手動での更新作業は不要
  • 証明書の有効期間は約3ヶ月だが、自動更新により継続利用できる
  • --dry-runオプションで更新ロジックの動作確認が可能

SSHで接続できるサーバーがあれば、難しい設定なしにHTTPSを有効化できます。個人用サーバーや学習環境に、ぜひ活用してみてください。