Let’s EncryptでワイルドカードSSL証明書を取得して複数Webサイトを運営する。(Tomcat 8.5 + CentOS)
Let’s Encrypt とは無料でSSL証明書を発行してくれるサービスおよびその認証局のことを指します。前回、Let’s Encryptを利用して取得したSSL証明書を取得した後、Tomcatにインストールする手順を紹介しましたが、今回はその第二弾、応用編です。Let’sEncryptを利用してワイルドカード証明書を取得します。
目次
ワイルドカード証明書が有効な場面
一つのサーバーでWebサイトを運用する場合、複数のドメイン宛てのコネクションを処理する必要があるため、https化には一工夫必要です。一般的に利用される方法としては以下の2つがあります。
1. SNI (Server Name Indication) の利用。
2. ワイルドカード証明書の利用
SNIは多くのレンタルサーバーサービスで利用されている一般的な方法です。SSL通信時にドメイン名を通知することで、サーバー側がどのSSLサーバー証明書を利用すべきか判別できるようになります。このため1台のサーバーで複数のSSLサーバー証明書を取り扱うことができます。
もう一つの方法として、ワイルドカード証明書を使用するという方法があります。これは、例えば以下のようにドメインは同じですが、サブドメインが違うWebサイトの運用に効果的です。
- https://aaa.callcenter-trend.com
- https://bbb.callcenter-trend.com
- https://ccc.callcenter-trend.com
もしこういったWebサイトを運用していた場合、それぞれのサブドメインに対してSSL証明書を取得するのではなく、”*.callcenter-trend.com”のようなワイルドカード証明書を一つ取得することを考えてみましょう。この証明書は上記3つのいずれのサイトのhttps化にも有効です。
今回はこのワイルドカード証明書をlet’s Encryptで取得するお話です。
Let’s EncryptでワイルドカードSSL証明書が取得可能
2018年中頃からLet’s Encryptがワイルドカード証明書に対応しました。以下、取得手順を紹介します。
Certbot をインストール
通常のLet’s Encryptでサーバ証明書を取得する場合と同様に、まずはクライアントソフトウェアである、Certbotをインストールします。古いバージョンではワイルドカード証明書取得には対応していない可能性がありますので必ず最新版をインストールしてください。
#wget https://dl.eff.org/certbot-auto #chmod a+x certbot-auto #./certbot-auto
Certbotを実行してSSL証明書を取得
以下のようにコマンドを実行してワイルドカード証明書を取得します。コマンドが通常のSSL証明書取得時とちょっと異なります。
#certbot-auto certonly --manual -d *.<証明書を取得したいドメイン> -m <メールアドレス> --preferred-challenges dns-01
次に以下のように訊かれますので「y」を入力してEnterを押します。
すると、次のように”XXXXXXXXXXXXXX”の部分に書かれてある文字列を含んだDNSのTXTレコード“_acme-challenge.<証明書を取得したいドメイン>”を作成することを求められます(例としてここでは”_acme-challenge.callcenter-trend.com”としてあります)。“Press Enter to Continue”と表示されますが、実際にDNSレコードを作成するまでEnterを押してはいけません。)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please deploy a DNS TXT record under the name _acme-challenge.callcenter-trend.com with the following value: -XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Before continuing, verify the record is deployed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Press Enter to Continue
実際にDNSレコードを作成しても反映には多少の時間がかかります。作成後はnslookup等を利用してDNSレコードが正しく表示されるか確認しましょう。
nslookup -q=txt _acme-challenge.<ドメイン名>
DNSレコードの内容が表示されることを確認後、上記”Press Enter to Continue”が表示されているコンソールでEnterを押します。
“Congratulations!”の文字が出現するとSSL証明書の取得成功です。
取得した証明書は通常”/etc/letsencrypt/live/<ドメイン名>/”配下にあります。
- サーバ証明書 (公開鍵) cert.pem
- 中間証明書 chain.pem
- サーバ証明書と中間証明書が結合されたファイル fullchain.pem
- 秘密鍵 privkey.pem
その後のTomcatへのインストールは通常のSSL証明書の場合と同じです。詳細を知りたい方はこちらの記事をご覧ください。