SSLのワイルドカードについて
Let’s Encrypt でも、ワイルドカードなSSL証明書が取得可能です。 会員用とかのマイページ等々で沢山のサブページを管理している場合には便利ですね。 注意点: Let’s Encrypt のワイルドカードの証明書の発行時には DNSのTXTレコードを利用しています。 certbot で証明書を取得する場合の手順です。
- certbot で証明書申請処理をする。
- 処理中に DNSのTXTレコードの登録を促す サーバー名とそのテキスト内容の文字列が発行されディスプレイに表示されます。
- この申請処理を終了する前に、該当するドメインのDNSのtxtレコードを登録する。
注)DNSの反映は設定にもよりますが即時に反映するものではありません。別のターミナルや確認サイトで反映されたのを確認して次のステップに行くほうが無難と思われます。 - 何らかの方法で無事反映されたのを確認後エンターキーをおすと証明書が発行されます。
- 発行された証明書を利用してSSLの登録をしてWebサーバーを再起動等々でSSLのサイトを反映させます
- certonly
- SSL/TLS サーバ証明書の取得のみを行います。
- –manual
- ドメイン名の認証を手動で行い、SSL/TLS サーバ証明書を取得します。
- –server SERVER
- ACME ディレクトリリソースの URI を指定します。 (デフォルト: https://acme-v01.api.letsencrypt.org/directory)
- –preferred-challenges dns
- DNS-01チャレンジタイプで検証するように指定します。
- -d DOMAIN もしくは –domains DOMAIN もしくは –domain DOMAIN
- SSL/TLS サーバ証明書の取得を申請するドメイン名を指定します。
- -m EMAIL もしくは –email EMAIL
- アカウントの登録や回復などに使用する電子メールアドレスを -m webmaster@example.jp もしくは
–email webmaster@example.jp のように指定します(一般公開はされません)。 - –agree-tos
- ACME 利用規約に同意します。 このオプションを有効にした場合、過去に利用規約の同意を行ったことがない場合であっても、利用規約の同意を求める画面が表示されません。
- –manual-public-ip-logging-ok
- グローバルIPアドレスを認証局でロギングすることに対する確認を表示しません。 このオプションを指定した場合、グローバルIPアドレスのロギングが自動的に許可されます。
今回の実行環境
1 2 3 4 5 |
# cat /etc/centos-release; CentOS Linux release 7.5.1804 (Core) # nginx -v nginx version: nginx/1.12.2 |
certbot の実行
1 2 3 4 5 6 7 |
certbot certonly --manual \ --server https://acme-v02.api.letsencrypt.org/directory \ --preferred-challenges dns \ -d *.fal.jp.net -d fal.jp.net \ -m khagiwara \ --agree-tos \ --manual-public-ip-logging-ok |
1 2 3 4 5 6 7 8 |
Please deploy a DNS TXT record under the name _acme-challenge.fal.jp.net with the following value: CTbYKkeeyjOv_zPHZtyYoYc5hZm7xG0suz9Llfw2Kdc Before continuing, verify the record is deployed. --------------------------------------------------- Press Enter to Continue |
ここで表示されたテキスト ドメインのDNS txtレコードに登録します。
_acme-challenge.<ドメイン> IN TXT
“CTbYKkeeyjOv_zPHZtyYoYc5hZm7xG0suz9Llfw2Kdc”
1 2 3 4 5 6 7 8 |
# nslookup -q=txt _acme-challenge.fal.jp.net ・ ・ ・ Non-authoritative answer: _acme-challenge.fal.jp.net text = "CTbYKkeeyjOv_zPHZtyYoYc5hZm7xG0suz9Llfw2Kdc" Authoritative answers can be found from: |
続けて、TXTレコード認証が失敗すると以下のメッセージが表示されます。
再度 「certbot」からやり直します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--------------------------------------------------- Press Enter to Continue Waiting for verification... - The following errors were reported by the server: Domain: fal.jp.net Type: unauthorized Detail: Incorrect TXT record "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" found at _acme-challenge.fal.jp.net To fix these errors, please make sure that your domain name was entered correctly and the DNS A/AAAA record(s) for that domain contain(s) the right IP address. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
--------------------------------------------------- Press Enter to Continue Waiting for verification... Resetting dropped connection: acme-v02.api.letsencrypt.org Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/fal.jp.net/fullchain.pem # 証明書+中間CA証明書 Your key file has been saved at: /etc/letsencrypt/live/fal.jp.net/privkey.pem # 秘密鍵 Your cert will expire on 2018-10-07. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le |
この内容で SSLのコンフィグファイルを編集し、Webサーバーを再起動する。
証明書のキャプチャー画像
この作業で分かるように DNSのTXTレコードによるドメイン認証のため更新の自動化はマニュアル操作が入るため自動化は難しいと思われまがDNSの更新方法を工夫すれば可能と思います。
今度自動更新についてレポートしたいと思います。
参考サイト:
https://blog.apar.jp/web/9619/
https://letsencrypt.jp/