きっかけ
もともと本体とこのブログをLet’s Encryptの証明書でSSL化してHTTPS通信でセキュアな接続を実現してたのですが、
いろいろ事情があって新しいサブドメインを切ったのでまた申請するの面倒だな~ってことでせっかく申請するならこれからの管理が楽そうだなって思ったので、巷で話題のワイルドカード証明書を発行してみようと思いました。
ここのブログを思いっきり参考にしましたありがとうございました。
さっそく申請してみる
ここからは自分がハマった点を一緒に載せながら順に説明していこうと思います。
手順
Let’s Encryptの証明書発行にはCertbot
というのを使います。
前回SSL証明書を発行したときにCertbotをインストールしてたので気にすることなく以下のコマンドを実行します。
ここで*.hoge.piyo
は証明書を発行したいドメイン(ワイルドカード付き)、hogehoge@mailaddress.piyo
は自分のメールアドレスです。
結果
Wildcard domains are not supported: *.hoge.piyo
???
ワイルドカード証明書の発行ができるって聞いたのにサポートしてないってどういうこと?
ここがハマりポイントその1です。
結論をいうと、これは自分がインストールしたCertbotのバージョンが古いことによるエラーです。(ワイルドカード証明書が発行できるようになったのは割と最近らしいので)
新しいバージョンを落としてきましょう。
以下のコマンドを実行します。
certbotディレクトリが作られるので移動して、
以下のコマンドを実行します。(さっきのコマンドをcertbot
から./certbot-auto
に変えただけです。)
これで動くと思います。
たぶん初回はなんかいろいろインストールされた後にこの表示が出ます。
-------------------------------------------------------------------------------
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
-------------------------------------------------------------------------------
(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です。
これの解決法に気付くのにだいぶ時間がかかって、認証の制限がかかってしまいました。
証明書発行失敗しまくって制限かかってしまった😩
— ながてち (@syobon_titech) 2018年3月23日
ちなみに証明書の発行は1時間に5回失敗すると制限がかかります。
知っておいて損はないかもしれません()
それで、解決法はというと、
ネームサーバ、お名前.comやん?
ということです(アホ)
というわけでお名前.comでDNSレコードの設定をしました。
反映に時間がかかるので気長に待ちます。(といっても3~5分くらいでした。)
実際に反映されたかどうか確認するにはdig
コマンドが便利でした。
別のコマンドプロンプト開いて、サーバにログインし、
とすると設定が反映されてるかどうかわかります。
設定されてなかったら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
ワイルドカード証明書発行終了です!!
やったぜ pic.twitter.com/DWYQeFJTkE
— ながてち (@syobon_titech) 2018年3月23日
あとは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;
...
}
自分のドメインもワイルドカード証明書になりました。
僕も夢のワイルドカード証明書になりました pic.twitter.com/43YGw3wVq6
— ながてち (@syobon_titech) 2018年3月23日
おしまい
これハマったの自分がアホだっただけですね。
振り返ってみるとかなり簡単にSSL化できることが分かります。
Let’s EncryptはSSL証明書発行が無料で発行できるのでみなさんもどんどんHTTPSでセキュアな通信を実現しましょう💪💪💪
おまけ:ハマりポイントその3
ワイルドカード証明書発行に満足したながてち
友人からこんな指摘を受ける。
本体(https://nagatech.work)が認証失敗してる…
なんでだ~ってずっと悩んでたらあることに気付きました。
*.nagatech.workで証明とったのでhttps://t.co/5HyJqoaNhmは証明から外れてる説
— ながてち (@syobon_titech) 2018年3月23日
それはそう
ワイルドカードはサブドメインに1文字以上ないといけないのでメインドメインだけのアドレスは証明書の内容に含まれないわけですね。
これはさすがにしょうがないのでこれだけもともとあった証明書に戻しました。
もっと勉強します…