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
するなり好きに料理しましょう。