こんばんはー
サブドメインの新しいブログを作りたいなと思ったのですが、
まあ、毎回毎回サブドメインが増えるごとに証明書を作るのも手間だなと思っていたのと、
そういえば Let’s Encrypt は少し前にワイルドカード証明書も発行できるようになったようなので、試してみようかなと
思ったので、備忘録ついでにやってみました。
さくら VPS を WEB + DB サーバとして使っていて、 nuts-choco.com のサブドメインが増えるたびに
バーチャルホストの設定と、 Let’s Encrypt で証明書を追加するような作業をしていました。
バーチャルホストの設定だらけになっていて、証明書もやたら増えたので、
ここいらで ワイルドカード証明書 + VirtualDocumentRoot を使って環境を思いっきりシンプルにできたらなということでやってみました。
ということで早速以下のコマンド
# ./letsencrypt-auto certonly --manual \
--server https://acme-v02.api.letsencrypt.org/directory \
--preferred-challenges dns \
-d *.nuts-choco.com \
-m urabe@nuts-choco.com \
--agree-tos \
--manual-public-ip-logging-ok
簡単だわー
と思いきや
-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.nuts-choco.com with the following value:
CYT6FHyM-ZSk9Mo5eKYrACOSOOp_VB0fd-83879_k58
Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue
課題が発生しました。
ドメインの所有権を確認するために、 TXT レコードを設定してくれよと。
ということで value domain の nuts-choco.com の DNS の設定に設定例に習って以下のように記述してみました
txt _acme-challenge CYT6FHyM-ZSk9Mo5eKYrACOSOOp_VB0fd-83879_k58
反映ボタンをポチっと。
そして、なんとなく、 letsencrypt-auto のコマンドの画面からも、Enter キーを押してしまいました。
Failed authorization procedure. nuts-choco.com (dns-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: No TXT record found at _acme-challenge.nuts-choco.com
怒られました。
そりゃそうです。瞬時に反映されるわけではありません。
ということで気づいたのですが、コマンドの画面開いたまま、反映されるまで待たないといけないのではないかと。
同じコマンドを再度打ちました
-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.nuts-choco.com with the following value:
AuxeM01Vam-0zZZAQWSh03zbomcotNJF_707yPqQJTc
Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue
ほうら、TXT レコードに設定すべき値が変わった。
また 設定しなおしですね。
設定してから、30分ぐらい放置して
$ dig txt _acme-challenge.nuts-choco.com
; <<>> DiG 9.10.6 <<>> txt _acme-challenge.nuts-choco.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44904
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;_acme-challenge.nuts-choco.com. IN TXT
;; ANSWER SECTION:
_acme-challenge.nuts-choco.com. 117 IN TXT "AuxeM01Vam-0zZZAQWSh03zbomcotNJF_707yPqQJTc"
;; Query time: 61 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Mon May 28 22:52:21 JST 2018
;; MSG SIZE rcvd: 115
あー、やっと反映されました。
反映されたのを確認したので、コンソール画面でエンターを押しました。
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/nuts-choco.com-0003/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/nuts-choco.com-0003/privkey.pem
Your cert will expire on 2018-08-26. To obtain a new or tweaked
version of this certificate in the future, simply run
letsencrypt-auto again. To non-interactively renew *all* of your
certificates, run "letsencrypt-auto 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
無事反映されました。めでたしめでたし。
とはいえ Let’s Encrypt 側からみた DNS が反映されていなければ、相変わらずエラーになるかと思います。
ということで、サブドメインたちの証明書のパスを以下のように設定しました。
※ 人によって config ファイル置き場は違うと思います!
$ sudo vi /etc/apache2/sites-enabled/default-ssl.conf
SSLCertificateFile /etc/letsencrypt/live/tech.nuts-choco.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tech.nuts-choco.com/privkey.pem
↓
SSLCertificateFile /etc/letsencrypt/live/nuts-choco.com-0003/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nuts-choco.com-0003/privkey.pem
Apache 再起動して無事反映完了
VirtualDocumentRoot でシンプルにする方法は次回に持ち越し。