BLOGTIMES
2017/02/05

dehydrated をつかって Let's Encript の証明書を取得(dns-01編)

  ssl  systemmanagemant  letsencrypt  sh  tutorial  dns 
このエントリーをはてなブックマークに追加

先日、dehydrated をつかって Let's Encript の証明書を取得で http を使った方法(http-01)で証明書を取得しました。
一番お手軽とも言える方法ですが、この方法の欠点はポートが 80 の HTTP に限定されているので、ポート 443 を使って HTTPS 経由で同様の方法で認証することはできません。

今回はセキュリティ上 80 番が空いていないサーバから証明書を取得したかったので、DNS の TXT レコードを使う方法(dns-01)にチャレンジします。

セットアップ方法はそれほど変わらない

今回は「Let's EncryptのDNS-01を使用して無料のSSL証明書をWebサーバなしで取得する -- ぺけみさお」を参考にさせていただきました。

まず前回と同じように dehydrated セットアップしていきます。
前回と違うのは Apache の設定がなく、途中で dns-01_hook.sh というフック用のスクリプトの生成が入ることくらいです。

# ソースコードの取得 git clone https://github.com/lukas2511/dehydrated.git cd dehydrated/ # WELLKNOWN ディレクトリの作成 chmod o+x . mkdir -p wellknown/acme-challenge sed -e 's|#WELLKNOWN=.*|WELLKNOWN="\'`pwd`'/wellknown/acme-challenge"|' < docs/examples/config > config # 証明書のドメイン名を指定 (SANを使う場合には1行に空白で区切ってドメインを列挙) echo "example.jp hoge.example.jp fuga.example.jp" > domains.txt # hook ファイルを作成 cat << EOS >dns-01_hook.sh #!/usr/bin/env bash function deploy_challenge { local DOMAIN="${1}" TOKEN_FILENAME="${2}" TOKEN_VALUE="${3}" echo "Set TXT record of _acme-challenge.$DOMAIN to $TOKEN_VALUE" read } function clean_challenge { local DOMAIN="${1}" TOKEN_FILENAME="${2}" TOKEN_VALUE="${3}" } function deploy_cert { local DOMAIN="${1}" KEYFILE="${2}" CERTFILE="${3}" FULLCHAINFILE="${4}" CHAINFILE="${5}" TIMESTAMP="${6}" } function unchanged_cert { local DOMAIN="${1}" KEYFILE="${2}" CERTFILE="${3}" FULLCHAINFILE="${4}" CHAINFILE="${5}" } HANDLER=$1; shift; $HANDLER $@ EOS chmod 755 dns-01_hook.sh

証明書取得時の操作

証明書を取得するためには dehydrated を起動したあと、DNS を書き換える必要があります。

# 実際に証明書を取得 ./dehydrated -c --challenge dns-01 -k ./dns-01_hook.sh

上の起動コマンドで dehydrated を起動すると、スクリプトは以下の出力を出したところででブロック(一旦停止)しますが、この操作を行ったターミナルは触らずにそのままにしておいてください。閉じたり、エンターを押したりすると認証用のハッシュが無効になってしまいます。

Set TXT record of _acme-challenge.example.jp to (ここに認証用のハッシュが出力される)

自分の DNS のゾーンに以下のようなレコードを登録してやります。
# 具体的な操作は使っている DNS サービスや DNS サーバに合せて実施してください。

_acme-challenge IN TXT "(認証用のハッシュ)"

登録が終わったら dig コマンドなどで、設定した TXT レコードが引けるか確認します。

dig _acme-challenge.example.jp txt @8.8.8.8

きちんと応答が得られることを確認したら、元のターミナルに戻ってエンターキーを押すと DNS による認証が行われます
成功すれば certs/(FQDN) に証明書が生成されているはずです。
DNS の TXT レコードのハッシュは使い捨てなので、証明書が生成されていることを確認したら削除しておきましょう。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/9124
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン