Let’s Encryptの導入 (SAN証明書, ワイルドカード証明書)

Let’s Encrypt とは、無料でSSL証明書を発行するための認証局 (CA: Certificate Authority) で、ウェブサイトのセキュリティを簡単かつ手頃な価格で向上させることができます。Let’s Encrypt は、非営利団体である Internet Security Research Group(ISRG)によって運営されています。

目次

主な特徴

  • 無料: Let’s Encrypt の SSL 証明書は無料で提供されています。
  • 自動化: 証明書の取得、インストール、更新が自動化されており、効率的に管理できます。
  • オープン: Let’s Encrypt はオープンスタンダードに基づいて開発されており、アクセスしやすいです。
  • 透明性: 発行した証明書はすぐに公開され、誰でも確認することができます。
  • 広範: 多くのプラットフォームや環境で利用可能です。

前提条件

  • ドメイン名(例:example.com)
  • ドメインを指す A レコードまたは CNAME レコードが DNS に登録済み
  • ウェブサーバーがインストール及び設定済み (例: Apache, Nginx)
あわせて読みたい
DNSサーバー PowerDNS の導入 PowerDNSは、高性能で安定したDNSサーバソフトウェアです。オープンソースのプロジェクトとして開発されており広く普及しています。 【特徴】 モジュール式アーキテクチ...
あわせて読みたい
Apache, PHP 8.3 (PHP-FPM) の導入 更新:PHP8.2からPHP8.3へ変更しました。 PHP8.2の場合は 8.3を8.2に置き換えるだけです。CentOSでApache, PHP 8.3 (PHP-FPM) とMariaDBを使用してセキュアなWEBサーバ...

Certbot の導入

Certbot をインストール

EPEL リポジトリを有効化し、Certbot をインストールします。

sudo yum install epel-release
sudo yum install certbot

Webサーバー用の Certbot プラグインをインストール

ウェブサーバー(Apache または Nginx)に対応する Certbot プラグインをインストールします。

Apache

sudo yum install certbot-apache

Nginx

sudo yum install certbot-nginx

SAN (Subject Alternative Name) 証明書 

Certbotを使用してHTTP認証でSAN証明書を取得する手順は以下の通りです。ここでは、例としてwww.example.com と example.com の証明書を取得する方法を説明します。

SAN証明書は、HTTP認証、DNS認証のどちらも対応していまが、ここでは、HTTP認証での手順を説明します。

SAN 証明書の主な特徴

  • 複数のドメインとサブドメインの対応: SAN 証明書には、複数のドメインとサブドメインを登録して、1枚の証明書で保護することができます。これにより、証明書管理の手間やコストを削減できます。
  • 柔軟性: 追加のドメインやサブドメインを後から追加・変更することが可能です。ただし、追加や変更のたびに証明書の再発行が必要になります。
  • 互換性: SAN 証明書は、ほとんどのウェブブラウザーとデバイスでサポートされており、広い範囲の互換性があります。

ただし、SAN 証明書はワイルドカード証明書と違って、指定されたドメインおよびサブドメインのみをカバーし、全てのサブドメインを自動的にカバーするわけではありません。大量のサブドメインを持つ場合はワイルドカード証明書の利用も検討してください。

Certbot を使用して SSL/TLS 証明書を取得

Certbot を使用して SSL/TLS 証明書を取得し、ウェブサーバーに自動的にインストールします。

Apache の場合
sudo certbot --apache -d example.com -d www.example.com
Nginx の場合
sudo certbot --nginx -d example.com -d www.example.com

ワイルドカード証明書

Certbotを使用してDNS認証でワイルドカード証明書を取得する手順は以下の通りです。ここでは、例としてexample.comとそのワイルドカード(*.example.com)の証明書を取得する方法を説明します。

ワイルドカード証明書は、DNS認証のみに対応しています。
DNS認証は、HTTP認証と異なり外部のDNSと連携する仕組みが必要になるため動作が複雑です。

ワイルドカード証明書の主な特徴

  • 無制限のサブドメインの保護: ワイルドカード証明書は、無制限のサブドメインを保護できます。これにより、新しいサブドメインを追加した場合でも、その都度証明書を再発行する必要がありません。
  • 互換性: ワイルドカード証明書は、ほとんどのウェブブラウザーとデバイスでサポートされており、広い範囲の互換性があります。

ただし、ワイルドカード証明書は、サブドメインのみを保護し、複数の異なるドメイン(例:example1.comexample2.com)を保護することはできません。そういった場合は、SAN (Subject Alternative Name) 証明書の利用を検討してください。
また、階層が違うドメインは無効です。
(例:*.example.com 証明書で、 *.sub.example.com は保護できません)

CertBot を使用してワイルドカード証明書の取得

Certbotを実行してDNSプラグインを指定し、ワイルドカード証明書をリクエストします。サーバーによっては sudo が必要です。

sudo certbot certonly --manual --preferred-challenges dns -d example.com -d *.example.com

Certbotは、DNS認証用のTXTレコードを追加するよう指示します。表示された値をメモしてください。

Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

abcdef1234567890abcdef1234567890abcdef12

Before continuing, verify the record is deployed.

DNSプロバイダの管理画面にアクセスし、指示されたTXTレコードを追加します。次のような形式で入力してください。

Type: TXT
Name: _acme-challenge.example.com
Value: abcdef1234567890abcdef1234567890abcdef12

TXTレコードが適切に反映(プロパゲーション)されるまで待ちます。通常、数分から数時間かかります。https://dnschecker.org/ などのツールを使用して、TXTレコードが正しく認識されているか確認できます。

反映後、Certbotのウィンドウに戻って認証を続行します。Press Enter to Continueと表示されている場所でEnterキーを押してください。

認証が成功すると、証明書ファイル(fullchain.pem)と秘密鍵ファイル(privkey.pem)へのパスが表示されます。

Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem

証明書の更新を自動化 (オプション)

Let’s Encrypt 証明書は 90 日間の有効期限があります。以下のコマンドで Certbot の自動更新機能をテストできます。

sudo certbot renew --dry-run

DNSチャレンジを使ってワイルドカード証明書を取得する場合、CertbotにDNSプロバイダ用のプラグインをインストールして設定すると、自動更新が可能になります。これらのプラグインは、DNSレコードを自動的に更新して、証明書のリニューアルを簡単に行えるようになります。

例として、Google Cloud DNSを使用している場合、次のような手順で証明書の取得と自動更新が可能です。

CertbotのGoogle Cloud DNSプラグインをインストール
sudo apt-get install certbot-dns-google
Google Cloudの認証用JSONキーファイルを作成し、サーバーにアップロード
証明書の取得時に--dns-googleプラグインと--dns-google-credentialsオプションを使用
sudo certbot certonly --dns-google --dns-google-credentials /path/to/your/credentials.json -d example.com -d *.example.com

これで、証明書が取得され、sudo certbot renew --dry-runを使って自動更新が確認できます。更新時には、CertbotがGoogle Cloud DNSのTXTレコードを自動的に更新します。

他のDNSプロバイダも同様の方法で対応している場合があります。

証明書が正しくインストールされているか確認

ウェブブラウザで https://example.com や https://www.example.com にアクセスして、鍵のアイコンが表示されることを確認してください。これで、証明書が正しくインストールされていることがわかります。

証明書の自動更新

最後に、証明書の自動更新を有効にするために、以下のコマンドを使用してcronジョブを作成します。

sudo crontab -e

ファイルを開いたら、以下の行を追加して保存してください。

0 2 * * * /usr/bin/certbot renew --apache && systemctl restart httpd

これにより、毎日午前2時に証明書が更新され、Apacheが再起動されるようになります。

証明書のディレクトリ

Certbotで取得したLet’s Encrypt証明書は、通常次のディレクトリに配置されています。

/etc/letsencrypt/live/your_domain_name/

このディレクトリ内には以下のファイルが含まれています。

  • cert.pem: サーバー証明書(公開鍵)
  • chain.pem: 中間証明書チェーン
  • fullchain.pem: cert.pemとchain.pemを組み合わせたもの。これはサーバー証明書と中間証明書チェーンを含む単一のファイルです。
  • privkey.pem: 秘密鍵

証明書を使用するサービスやアプリケーションの構成ファイルに適切なパスを指定してください。

例えば、Nginxで証明書を使用する場合、次のように設定ファイルに追加します。

ssl_certificate /etc/letsencrypt/live/your_domain_name/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain_name/privkey.pem;

Apacheの場合は、次のように設定ファイルに追加します。

SSLCertificateFile /etc/letsencrypt/live/your_domain_name/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/your_domain_name/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/your_domain_name/chain.pem

証明書が適切にインストールされた後、Webサーバーを再起動して変更を適用します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次