【Apache SSL講座 第2回】警告画面にサヨナラ!無料証明書「Let’s Encrypt (Certbot)」の導入と完全自動更新

「無料」で「安全」な証明書が、Webの常識を変えた。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回は、SSL/TLSの仕組みを学び、自己署名証明書(オレオレ証明書)を作ってHTTPS通信を体験しました。

でも、ブラウザには「保護されていない通信」という無慈悲な警告が出たままですよね。
これでは、Webサイトを一般公開することはできません。
かといって、年間数万円もする有料の証明書を買う予算も(個人や小規模サイトでは)なかなか出ないものです。

コウ君

先生、そうなんです!
僕のブログもSSL化したいんですけど、お金はかけたくなくて…。
でも警告画面が出るのは嫌だし、Googleの検索順位も落としたくないんです。
なんとか「無料で」「ちゃんとした(警告が出ない)」証明書を手に入れる方法はないんですか?

リナックス先生

それが、あるのよ!
今や世界のWebサイトの過半数が使っている「Let’s Encrypt(レッツ・エンクリプト)」を使えば、誰でも完全無料で信頼された証明書を発行できるわ。
しかも、コマンド一つで取得からApacheの設定まで自動でやってくれるの。
今回は、この魔法のようなツールを使って、あなたのサイトに「鍵マーク」をつけましょう!

本記事では、AlmaLinux 9 環境にて、Let’s Encrypt の公式クライアント「Certbot」を導入し、正式なSSLサーバー証明書を取得・適用するまでの全手順を解説します。
さらに、運用で最も重要な「自動更新」の仕組みについても深掘りします。

🔒 Apache SSL/TLS 完全攻略講座(バックナンバー)

現在地:【第2回】無料証明書のスタンダード!Let’s Encrypt (Certbot) の導入と自動更新

  • 【第1回】Webサーバーの常時SSL化!TLSの仕組みと自己署名証明書の作成
  • 【第2回】無料証明書のスタンダード!Let’s Encrypt (Certbot) の導入と自動更新
  • 【第3回】企業サイトならこれ!有料証明書(JPRS/GlobalSign)のCSR生成とインストール
  • 【第4回】セキュリティ強度を上げる!プロトコル(TLS1.3)と暗号スイートの最適化
  • 【第5回】1つのIPで複数ドメイン!バーチャルホストでのSSL設定とSNIの仕組み
  • 【第6回】「繋がらない」を解決!中間証明書チェーンとトラブルシューティング
  • 【第7回】運用を楽にする!証明書期限監視と更新プロセスの自動化
  • 【第8回】大規模構成!ロードバランサ連携とHTTP/2・HTTP/3 (QUIC) 対応

第1章:Let’s Encrypt とは何か?

作業に入る前に、なぜ無料で証明書がもらえるのか、その仕組みを理解しておきましょう。

1. 誰が運営しているの?

Let’s Encrypt は、Mozilla(Firefoxの開発元)、Cisco、Google、Facebook(Meta)などの大手IT企業がスポンサーとなり、ISRG (Internet Security Research Group) という公益法人が運営しています。
「全てのWebサイトを暗号化(HTTPS化)して、安全なインターネットを作る」という目的のために活動しているため、営利目的ではなく、無料で証明書を発行してくれるのです。

2. 証明書の種類は「DV証明書」

SSL証明書には認証レベルがいくつかありますが、Let’s Encrypt が発行するのは「ドメイン認証型(DV: Domain Validation)」です。

  • 確認すること: 「あなたがそのドメイン(例: example.com)の持ち主であるか」だけを確認します。
  • 確認しないこと: 「あなたが実在する企業か」「怪しい組織ではないか」は確認しません。

そのため、個人ブログやメディアサイト、社内システムなどには最適ですが、銀行や大手ECサイトのような「実在証明」が必要なケースには向きません(その場合は第3回で解説するOV/EV証明書を使います)。

3. 有効期限は「90日間」

ここが最大の特徴であり、注意点です。
一般的な有料証明書が「1年」なのに対し、Let’s Encrypt は「90日」で期限が切れます。
「えっ、3ヶ月ごとに更新作業するの? 面倒くさい!」と思いましたか?

安心してください。Let’s Encrypt は「自動化(Automation)」を前提に設計されています。
Certbot というツールを使えば、期限が近づくと勝手に更新してくれるため、管理者は何もしなくて良いのです。


第2章:導入前の絶対条件(Prerequisites)

Let’s Encrypt を使うには、自己署名証明書の時にはなかった「厳しい条件」があります。
ここをクリアしていないと、100%エラーになります。

条件1:グローバルなドメインを持っていること

192.168.1.100 のようなIPアドレスや、localhosttest.local のようなローカルドメインには発行できません。
必ず、インターネット上で有効なドメイン(例: linux-kobo.com)を取得し、DNSの設定が完了している必要があります。

条件2:80番ポート(HTTP)で外部からアクセスできること

証明書を発行する際、Let’s Encrypt のサーバーがあなたのサーバーに対して「本当にドメインの持ち主か?」を確認しに来ます(ACMEチャレンジ)。
この確認通信は HTTP (TCP 80番ポート) を使って行われます。

ファイアウォールで 80番ポートを閉じていると、認証に失敗します。
「SSL化するから443だけ開ければいいや」と80番を閉じてしまうと、更新もできなくなるので注意が必要です。


第3章:Certbot のインストール

それでは、AlmaLinux 9 に公式クライアントツール「Certbot」をインストールします。

1. EPELリポジトリの追加

Certbot は標準リポジトリ(AppStream)には含まれていないため、Fedoraプロジェクトが提供する拡張リポジトリ EPEL (Extra Packages for Enterprise Linux) を有効にします。

sudo dnf install epel-release -y

2. Certbot と Apacheプラグインのインストール

Certbot本体と、Apacheの設定を自動で書き換えてくれるプラグインをインストールします。

sudo dnf install certbot python3-certbot-apache -y

インストールが完了したら、バージョンを確認してみましょう。

certbot --version
# certbot 1.32.0 などの表示が出ればOK

第4章:証明書の取得とApacheへの自動設定

いよいよ証明書を取得します。
本来なら、CSRを作って、申請して、ダウンロードして、設定ファイルを書き換えて…という長い手順が必要ですが、Certbotならコマンド1行です。

1. 魔法のコマンドを実行

以下のコマンドを実行します。
※Apacheが起動している必要があります(systemctl start httpd)。

sudo certbot --apache

2. 対話形式での設定

コマンドを実行すると、いくつか質問されます。画面に従って入力していきましょう。

(1) メールアドレスの登録

Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): admin@linux-kobo.com (あなたのメールアドレス)

更新エラーや緊急時の連絡用です。必ず受信できるアドレスを入力します。

(2) 利用規約への同意

Please read the Terms of Service at
...
(Y)es/(N)o: Y

利用規約に同意します。

(3) ニュースメールの購読(任意)

Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation...
(Y)es/(N)o: N

EFFからのニュースメールです。不要なら N でOKです。

(4) ドメインの選択

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: linux-kobo.com
2: www.linux-kobo.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1

Apacheの設定ファイル(ServerName)からドメイン名を自動検出してリストアップしてくれます。
証明書を取得したい番号を入力します。

3. 処理完了

認証に成功すると、以下のようなメッセージが表示されます。

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/linux-kobo.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/linux-kobo.com/privkey.pem
...
Deploying Certificate to VirtualHost /etc/httpd/conf.d/linux-kobo.conf
Redirecting vhost in /etc/httpd/conf.d/linux-kobo.conf to ssl vhost in /etc/httpd/conf.d/linux-kobo-le-ssl.conf

この時点で、Certbotは以下の作業を勝手にやってくれています。

  1. ドメインの所有権確認(ACMEチャレンジ)。
  2. 証明書と秘密鍵のダウンロード。
  3. Apacheの設定ファイルを複製し、SSL設定を追加(-le-ssl.conf というファイルが作られます)。
  4. http → https へのリダイレクト設定(オプション)。
  5. Apacheの再読み込み。

まさに「魔法」ですね!


第5章:動作確認とセキュリティ評価

ブラウザを開いて、あなたのサイト(https://your-domain.com)にアクセスしてみましょう。

1. 鍵マークの確認

アドレスバーを見てください。
前回の自己署名証明書の時のような赤い警告は消え、きれいな「鍵マーク」が表示されているはずです。
鍵マークをクリックして「証明書」を確認すると、「発行者: R3 (Let’s Encrypt)」となっていることが分かります。

2. SSL Labs での評価

正しく設定できているか、第三者機関のツールで診断してみましょう。
Qualys社が提供する無料ツール SSL Server Test にアクセスし、ドメイン名を入力します。

Certbotのデフォルト設定であれば、通常は「A」ランクが取れるはずです。
これで、あなたのサイトはセキュリティ的にも信頼できる状態になりました。


第6章:証明書ファイルの場所と自動更新の仕組み

「コマンド一発で終わったけど、証明書ファイルはどこにあるの? 更新はどうするの?」
運用者のために、裏側の仕組みを解説します。

1. 証明書の実体

証明書ファイルは /etc/letsencrypt/live/(ドメイン名)/ ディレクトリに保存されています。
ここにあるファイルは「最新の証明書へのシンボリックリンク」になっており、更新されるとリンク先が自動的に切り替わります。

  • cert.pem: サーバー証明書
  • chain.pem: 中間証明書
  • fullchain.pem: サーバー証明書+中間証明書(Apacheの SSLCertificateFile はこれを指定)
  • privkey.pem: 秘密鍵(Apacheの SSLCertificateKeyFile はこれを指定)

2. 自動更新(Auto-Renew)の設定確認

Let’s Encrypt の証明書は90日で切れますが、Certbotパッケージをインストールした時点で、自動更新用のタイマーがセットされています。
AlmaLinux 9 では systemd のタイマー機能が使われています。

# タイマーの状態確認
systemctl list-timers | grep certbot

snap.certbot.renew.timer のような行が表示されれば、自動更新が有効になっています。
このタイマーは1日2回起動し、「期限まで30日を切った証明書」があれば自動的に更新し、Apacheをリロードしてくれます。

3. 更新テスト(Dry Run)

「本当に自動更新できるの?」と不安な場合は、リハーサル(Dry Run)を行うことができます。

sudo certbot renew --dry-run

Congratulations, all simulated renewals succeeded と表示されれば、将来の自動更新も成功すること間違いなしです。


第7章:トラブルシューティング

Q1. “Problem binding to port 80: Could not bind to IPv4 or IPv6.”

原因: ポート80番を使おうとしたが、すでにApacheなどが動いていて使えなかった、あるいはCertbotがstandaloneモードで動こうとしている。
対策: --apache オプションを付け忘れていませんか?
Apacheを止める必要はありません。プラグインを使えばApacheを動かしたまま認証できます。

Q2. “Timeout during connect (likely firewall problem)”

原因: Let’s Encrypt のサーバーからあなたのサーバーの80番ポートにアクセスできませんでした。
対策: ファイアウォール(firewalld)の設定を確認してください。AWSなどのクラウドを使っている場合は、セキュリティグループでHTTP(80)を開放してください。

Q3. “Too many certificates already issued for exact set of domains”

原因: 発行制限(Rate Limit)に引っかかりました。短時間に何度も失敗したり、発行を繰り返したりするとロックされます。
対策: テストをする時は必ず --dry-run オプションまたは --staging オプションを使ってください。
制限にかかってしまった場合は、1週間待つ必要があります。


まとめ:HTTPS化はもはや「標準装備」

お疲れ様でした!
これで、あなたのWebサイトは「保護された通信」になり、訪問者からの信頼も得られるようになりました。

今回の重要ポイント:

  • Let’s Encrypt は無料で信頼できる証明書を発行してくれる。
  • Certbot を使えば、取得から設定まで全自動。
  • 有効期限は90日だが、自動更新機能でメンテナンスフリー。
  • 導入には「ドメイン」と「80番ポートの開放」が必須。

個人サイトやブログなら、これで完璧です。
しかし、もしあなたが「企業の公式サイト」や「会員情報を扱うECサイト」を担当しているなら、無料のDV証明書だけでは不十分な場合があります。
「この会社は実在するのか?」という信頼性を証明するためには、有料の証明書(OV/EV)が必要です。

次回、第3回は「企業サイトならこれ!有料証明書(JPRS/GlobalSign)のCSR生成とインストール」です。
認証局への申請に必要な「CSR」の正しい作り方から、審査を経て届いた証明書を手動でインストールする、プロのインフラエンジニアの実務手順を解説します。
お楽しみに!

▼ エンジニアとしてのキャリアを加速させる ▼

Certbotを試してみる
「VPS」で自分専用環境

おすすめVPSを見る

サーバー知識を年収に
「ITエンジニア転職」

転職エージェントを見る

コメント