夢のLet’s Encryptのワイルドカード証明書発行手順とハマったところまとめ

きっかけ

もともと本体このブログをLet’s Encryptの証明書でSSL化してHTTPS通信でセキュアな接続を実現してたのですが、
いろいろ事情があって新しいサブドメインを切ったのでまた申請するの面倒だな~ってことでせっかく申請するならこれからの管理が楽そうだなって思ったので、巷で話題のワイルドカード証明書を発行してみようと思いました。

ここのブログを思いっきり参考にしましたありがとうございました。

さっそく申請してみる

ここからは自分がハマった点を一緒に載せながら順に説明していこうと思います。

手順

Let’s Encryptの証明書発行にはCertbotというのを使います。
前回SSL証明書を発行したときにCertbotをインストールしてたので気にすることなく以下のコマンドを実行します。

$ certbot certonly --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory -d *.hoge.piyo -m hogehoge@mailaddress.piyo

ここで*.hoge.piyoは証明書を発行したいドメイン(ワイルドカード付き)、hogehoge@mailaddress.piyoは自分のメールアドレスです。

結果

Wildcard domains are not supported: *.hoge.piyo

???

ワイルドカード証明書の発行ができるって聞いたのにサポートしてないってどういうこと?

ここがハマりポイントその1です。

 

結論をいうと、これは自分がインストールしたCertbotのバージョンが古いことによるエラーです。(ワイルドカード証明書が発行できるようになったのは割と最近らしいので)

新しいバージョンを落としてきましょう。

以下のコマンドを実行します。

$ git clone https://github.com/certbot/certbot.git

certbotディレクトリが作られるので移動して、

$ cd certbot/

以下のコマンドを実行します。(さっきのコマンドをcertbotから./certbot-autoに変えただけです。)

$ ./certbot-auto certonly --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory -d *.hoge.piyo -m hogehoge@mailaddress.piyo

これで動くと思います。

 

たぶん初回はなんかいろいろインストールされた後にこの表示が出ます。

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at

https://acme-v01.api.letsencrypt.org/directory

------------------------------------------------------------------------------- (A)gree/(C)ancel :

規約への同意ですね。「A」を押します。

 

-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o :

IPアドレスを記録しますけどいいですか?っていう確認です。「Y」を押します。

するとこんな画面が出ます。

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.hoge.piyo with the following value:

isii0iQDJOBDzxUKkGb6DB3HLvnkqvWGGcDEtII2fqc

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue

DNSレコード設定に名称を_acme-challengeでタイプをTXTにして値をisii0iQDJOBDzxUKkGb6DB3HLvnkqvWGGcDEtII2fqc(もちろんここの値は実行ごとに違います)にして追加してねってことです。

Enterキーは押さずにDNSレコードの設定をします。

自分はConoHaを使ってたのでConoHaの管理ページから追加しました。

追加してからEnterキーを押します。

すると…

Waiting for verification...
Resetting dropped connection: acme-v01.api.letsencrypt.org
Resetting dropped connection: acme-v01.api.letsencrypt.org
Cleaning up challenges

Failed authorization procedure. hoge.piyo (dns-01):
urn:acme:error:connection ::
The server could not connect to the client to verify the domain ::
DNS problem: NXDOMAIN looking up TXT for _acme-challenge.hoge.piyo

IMPORTANT NOTES:
- The following errors were reported by the server:

Domain: hoge.piyo
Type: connection
Detail: DNS problem: NXDOMAIN looking up TXT for
_acme-challenge.hoge.piyo

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. Additionally, please check that
your computer has a publicly routable IP address and that no
firewalls are preventing the server from communicating with the
client. If you're using the webroot plugin, you should also verify
that you are serving files from the webroot path you provided.

とりあえず失敗したのは分かった。
でもどこに失敗する要素があるのかわからん。

ここがハマりポイントその2です。

 

これの解決法に気付くのにだいぶ時間がかかって、認証の制限がかかってしまいました。

ちなみに証明書の発行は1時間に5回失敗すると制限がかかります。
知っておいて損はないかもしれません()

 

それで、解決法はというと、

ネームサーバ、お名前.comやん?

ということです(アホ)

というわけでお名前.comでDNSレコードの設定をしました。

反映に時間がかかるので気長に待ちます。(といっても3~5分くらいでした。)

実際に反映されたかどうか確認するにはdigコマンドが便利でした。

別のコマンドプロンプト開いて、サーバにログインし、

$ dig -t txt _acme-challenge.hoge.piyo

とすると設定が反映されてるかどうかわかります。

設定されてなかったらstatus: NXDOMAIN
設定が反映されてたらstatus: NOERRORと出ます。

status: NOERRORとなったらEnterキーを押して…

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/hoge.piyo/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/hoge.piyo/privkey.pem
Your cert will expire on 2018-06-21. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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

ワイルドカード証明書発行終了です!!

あとはnginxの設定をlisten 80;の代わりに以下を追記します。

server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/hoge.piyo/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.hoge.piyo/privkey.pem;
...
}

自分のドメインもワイルドカード証明書になりました。

おしまい

これハマったの自分がアホだっただけですね。
振り返ってみるとかなり簡単にSSL化できることが分かります。

Let’s EncryptはSSL証明書発行が無料で発行できるのでみなさんもどんどんHTTPSでセキュアな通信を実現しましょう💪💪💪



おまけ:ハマりポイントその3

ワイルドカード証明書発行に満足したながてち
友人からこんな指摘を受ける。

本体(https://nagatech.work)が認証失敗してる…

なんでだ~ってずっと悩んでたらあることに気付きました。

それはそう

ワイルドカードはサブドメインに1文字以上ないといけないのでメインドメインだけのアドレスは証明書の内容に含まれないわけですね。

これはさすがにしょうがないのでこれだけもともとあった証明書に戻しました。

 

もっと勉強します…