Edited at

Let's Encrypt で DNS-01を利用したSSL証明書の取得方法

More than 1 year has passed since last update.


DNS-01 方式

Let’s EncryptでSSL証明書を取得する方法で、WEBサーバが1つのみ稼働させている時はHTTP-01方式として沢山紹介されています。

負荷分散させている場合などでは、ドメイン確認が出来ません。

そこで、Let’s Encryptでは、ドメイン認証方式による確認方法として、DNS−01方式が用意されています。

Let’s EncryptのAutomatic Certificate Management Environment(ACME)の仕様には、ドメイン認証方式(DNS-01)がありますので、詳しい仕様についてはサイトを確認して下さい。

ここでは、サクッと認証とSSL証明書の生成方法だけを説明します。

※ ApacheやNginxなどのSSL証明書の設定方法は割愛してます。


インストール&セットアップ

現時点で、DNS-01方式のスクリプトが、公式で用意されていませんので、

クライアントはサードパーティ製のletsencrypt.shを使用します。

以下のgitより取得して下さい。

以降、letsencrypt.shディレクトリにて作業します

git clone  https://github.com/lukas2511/letsencrypt.sh

cd letsencrypt.sh

DNS認証では、Hookスクリプトでトークン認証を行います。

サンプルはdocs/examples/hook.shとして、Hookスクリプトが用意されていますのでコピーします。

cp -pr docs/examples/hook.sh .

以下の通り、deploy_challengeメソッド部分を修正します。

vi hook.sh

function deploy_challenge {
local DOMAIN="${1}" TOKEN_FILENAME="${2}" TOKEN_VALUE="${3}"

echo "Set TXT record of _acme-challenge.$DOMAIN to $TOKEN_VALUE"
read
}


証明書取得

letsencrypt.shを実行します。

hookスクリプトにより、readの箇所で停止し、認証用のトークンが表示されます。

./letsencrypt.sh -c -d hogehoge.com --challenge dns-01 -k ./hook.sh

Set TXT record of _acme-challenge.hogehoge.com to PMulhL3LmSiTgd00xORGZUNknemC0zPFWew7ToqcKm4

表示されたトークンを、TXTレコードとして、DNSに設定します。

上記の例では、 _acme-challenge.hogehoge.comをTXTキーとして、PMulhL3LmSiTgd00xORGZUNknemC0zPFWew7ToqcKm4を値に設定します。

DNS設定後は、反映にある程度時間が掛かると思いますので、1時間程度待つ必要があるでしょう。

その間、シェルのWindowを閉じないようにして下さい。

再度実行するとトークンが変更されますので、DNSレコードも再設定が必要です。

ある程度待ったら、Enterキーで実行を続け、以下の通り成功すればOKです。

 + Responding to challenge for kosokubus.ex-xyz.xyz...

+ Challenge is valid!
+ Requesting certificate...
+ Checking certificate...
+ Done!
+ Creating fullchain.pem...
+ Done!

成功すると、以下のディレクトリに認証キーなどが生成されます。

letsencrypt.sh/certs/hogehoge.com/

概ね、利用するのは、次のファイルです。

lrwxrwxrwx 1 root root   19 Aug  4 07:16 cert.csr -> cert-1470260375.csr

lrwxrwxrwx 1 root root 19 Aug 4 07:16 cert.pem -> cert-1470260375.pem
lrwxrwxrwx 1 root root 20 Aug 4 07:16 chain.pem -> chain-1470260375.pem
lrwxrwxrwx 1 root root 24 Aug 4 07:16 fullchain.pem -> fullchain-1470260375.pem
lrwxrwxrwx 1 root root 22 Aug 4 07:16 privkey.pem -> privkey-1470260375.pem

ここまで取得できれば、あとは各WEBサーバにファイルをコピーするなり、rsyncするなり好きに料理しましょう。