Let’s Encryptでワイルドカード証明書を取得する方法

目次

概要

今まで、Let’s Encryptでは無料のSSL証明書を取得することができましたが、ワイルドカード証明書は取得できませんでした。

しかし、来たる2018年3月にワイルドカード証明書が取得できるようになりました。

ここでは、Let’s Encryptのワイルドカード証明書の取得方法を紹介します。

環境

  • Ubuntu 16.04

ドメイン認証

通常、Let’s Encryptで証明書を取得するための方法として、Webサーバを使い証明書を取得したいドメインからIPアドレスを引き、そのIPアドレスでLet’s Encryptの認証のために作られたファイルにアクセスできるかどうかを確認して認証をしていました。

ワイルドカード証明書の場合、この方法は使えないのでDNSのTXTレコードを用います。

TXTレコードは、通常ドメインからIPアドレスを引くAレコードやドメインからドメインをひくCNAMEレコードとは違い、DNSサーバにTXTレコードの要求をすると文字列が返ってきます。

なので、ワイルドカード証明書を取得するための認証ではこのTXTレコードにLet’s Encryptの方から発行される認証のための文字列を利用者の方でDNSサーバに設定して、適切なTXTレコードを引くことができれば認証をパスできるという仕組みで認証します。

ちなみに、この方法は今までのワイルドカードではない証明書の取得の方法としても使うことができました。

証明書の取得

まず最初に、Let’s Encryptの認証などをしてくれるcertbot-autoコマンドをインストールします。

curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
chmod 700 /usr/bin/certbot-auto

インストールが済んだら、証明書の取得をします。

ここでは仮に、*.example.comのワイルドカード証明書を取得しようとします。

certbot-auto certonly \
--server https://acme-v02.api.letsencrypt.org/directory \
--manual \
--preferred-challenges dns \
--domain *.example.com

重要な部分としては、--serverオプションで認証サーバを指定しているということです。

現在、ワイルドカード証明書の場合、認証サーバが異なるためこれを指定していないとエラーになります。

このコマンドを実行すると、いくつか利用規約に同意しなくてはならない画面があるので、同意しながら進みます。

進んでいくと、_acme-challenge.example.comにTXTレコードとして書き込むべき文字列が表示されるので、DNSにそれらの設定を反映させます。

DNSの情報が反映されるまでは時間がかかるため、待ちましょう。

あくまで参考程度ですが、下記のようにdigコマンドを使ってTXTレコードを引くことができます。

dig _acme-challenge.example.com TXT

反映されたようであれば、エンターキーなどを押して次に進みます。

この時、うまくいっていればCongratulationsなどと表示されます。

取得した証明書は、/etc/letsencryptディレクトリ以下で確認できます。

さいごに

待ちに待っていたワイルドカード証明書の取得ができるようになり、非常にうれしく思っています。

これが使えるようになれば、さらに色々なものをセキュアにつなぐことができるようになるので、利用の幅が広がりそうです。