certbotコマンドを実行
certbot certonly \ # 1
--manual \ # 2
--server https://acme-v02.api.letsencrypt.org/directory \ # 3
--preferred-challenges dns \ # 4
-d *.example.com \ # 5
-d example.com \ # 5
-m fclef@example.jp \ # 6
--agree-tos \ # 7
--manual-public-ip-logging-ok # 8
1. certonly
certbot
のサブコマンドです。
単に$ certbot
で実行すると、デフォルトでサブコマンドrun
が実行されます。
run
は稼働中のウェブサーバーに対し、証明書の取得・インストールを実行します。
それに対し、certonly
では証明書の取得だけを実行します。
ウェブサーバーへのインストールは自分でやります。
Let's Encryptの解説記事を見るとよくcertonly
が使われてますが、何故だかはわかっていません。
勝手にウェブサーバーの設定を触られると変になるかもしれないからかな?
夏バテで試す気力もないので、親切な人がいたら教えて下さい。
2. --manual
ドメイン名の認証を手動で行います。
これなしで実行すると、ウェブサーバーの設定から自動でドメインを認識します。多分。
精度が不明なので--manual
指定しかやったことないです。
3. --server
証明書のリソースURIを指定します。
デフォルトはhttps://acme-v01.api.letsencrypt.org/directory
です。
今回はワイルドカードに対応している環境であるhttps://acme-v02.api.letsencrypt.org/directory
を指定します。
4. --preferred-challenges
ドメインを使用する権利があることを確認する認証の方式を選択できます。
デフォルトはhttpによる認証です。
ウェブサーバー上に配置した認証用ファイルをHTTP経由で確認できれば認証成功です。
ワイルドカード証明書を使用するには、DNSによる認証を選択する必要があります。
Let's Encryptが発行するトークンをDNSのTXT属性に設定する必要があり、その操作を持ってドメインの使用権があることを確認します。
5. -d
証明書を使用するドメインを指定します。
ワイルドカードの場合、サブドメインありとなしの両方を指定します。
6. -m
アカウント用のメールアドレスを指定します。
Let's Encrypt上で管理されるアカウントに紐づくメールアドレスで、
更新のお知らせなどが届きます。
証明書を使用するドメインのメールアドレスである必要はありません。
普段遣いのメールアドレスを使用して、お知らせを見逃さないようにするのがいいでしょう。
7. --agree-tos
利用規約に自動で同意します。
8. --manual-public-ip-logging-ok
グローバルIPアドレスを認証局でロギングすることを自動で承諾します。
DNSの設定
コマンドを実行すると、以下のメッセージが表示されるので、この画面は一旦そのまま置いておきます。
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Before continuing, verify the record is deployed.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
は実際は認証用のトークンなので、
それを_acme-challenge.example.com
への問い合わせで確認できるようTXTレコードを登録します。
_acme-challenge TXT xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DNSにTXTレコードを登録してもキャッシュなどの影響ですぐに反映はされないので、別のターミナルを開いて、何度か以下のコマンドを叩いて登録したトークンの応答があることを確認します。
$ nslookup -type=TXT _acme-challenge.example.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
_acme-challenge.example.com text = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # ←この応答があればOK
Authoritative answers can be found from:
DNSがトークンの応答を返すことを確認したら、Let's Encryptの画面に戻り、Enterを押します。
簡単に確認
失敗した場合は、何故失敗したのかがメッセージに表示されています。
ドメインが悪いのか、DNSの設定が悪いのか、原因は様々だと思いますが、各種トラブルシューティング記事を参照して解決してください。
上手くいくと、なんやかんやメッセージが表示されます。
証明書ファイルの場所が表示されているので、ウェブサーバーにインストールしましょう。
証明書をインストールしたあと、サブドメインで運用しているサービスへアクセスし、
証明書情報を見たときに、ワイルドカード表示がされていたら成功です。