Let’s Encryptで複数のドメインに対応したサーバー証明書を発行する方法

Let’s Encryptで複数のドメインに対応したサーバー証明書を発行する方法

無料でサーバー証明書を発行できるサービスとして人気のある「Let’s Encrypt」では、複数の異なるドメイン名・サブドメイン名で使用できる、サブジェクト代替名(SAN : Subject Alternative Name)という仕組みを使用したサーバー証明書を発行することができます。

Memo

SAN対応のサーバー証明書を発行するときは、すべてのドメイン名(aaa.example.com、bbb.example.netなど)を指定して発行する必要があり、後から対応するドメイン名を増やしたい場合は、証明書の再発行が必要になります。

SAN対応の証明書は、ワイルドカード証明書に比べ自由度は下がりますが、複数のドメイン名やサブドメイン名に対応したサーバー証明書を作成したいときに有効な方法です。

そこでここでは、CentOS 7のWebサーバー(Nginx)環境で、Let’s EncryptのSAN対応証明書を発行する手順を紹介します。

動作環境

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS Linux7.9.2009

SAN対応のサーバー証明書を発行する

ここでは、Let’s Encryptでサーバー証明書を発行・更新するために必要なツール「certbot」はすでにインストールされていることを前提とします。

「certbot」のインストール方法は、以下の投稿をご覧ください。

CentOS 7上のWordPress環境を常時SSL化する方法
ここでは、CentOS 7+Nginx環境に構築したWordPress環境を、常時SSL化したときの手順を紹介します。

証明書の発行

SAN対応の証明書を発行するときは、発行する証明書を利用するすべてのドメイン名を指定して、コマンドを実行します。

たとえば「example.com」と「aaa.example.com」という2つのドメイン名に対応した証明書を発行したいときは、次のようにコマンドを実行します。

なお、Webサーバーがすでに稼働しているときは、いったんWebサーバーのサービスを停止してからコマンドを実行します。

# certbot certonly --standalone -d example.com -d aaa.example.com

すでに「example.com」というサーバー証明書を取得しており、後から証明書に「aaa.example.com」というサブドメインを追加したい場合は、Webサーバーのサービスを停止してから、次のようにコマンドを実行します。

# certbot certonly --force-renew --cert-name example.com -d example.com -d aaa.example.com

なお、certbotコマンドではWebサーバーのサービスを停止させずにサーバー証明書を発行したいときなどのオプションも用意されているので、詳しくは以下の公式サイトをご参照ください。

コマンド解説 - Let's Encrypt 総合ポータル

動作の確認

発行した証明書をWebサーバーに設定したあとは、ブラウザでサイトへアクセスして、証明書を確認すれば、証明書の「サブジェクト代替名」フィールド欄に、証明書発行時に指定したドメイン名が列挙されているはずです。

あとがき

ワイルドカード証明書作れなくても、全然問題ない感じです。