現在運用しているサイトのうち、いくつかはさくらVPS+Let’s Encryptを使ってSSL対応にしているのですが、先日、Let’s Encryptからこのようなメールが届きました。
英語は苦手なので、、早速翻訳にかけてみるとどうやら、「証明書発行の際に行うTLS-SNI-01の検証は2019年2月13日に廃止予定」とのこと。なので、「HTTP-01、DNS-01、TLS-ALPN-01といった別の検証方法を使用」しなければならないと続き、「このままでは廃止される2019年2月13日以降には更新や新規作成もできない」ということでした。
そもそもなぜ廃止になるかというと、TLS-SNI-01認証で作成・更新された証明書に重大な脆弱性が見つかり、そのために廃止されるようです。ちょうど1月中頃にメールが届き、廃止日まで1ヶ月くらいしかないのでちょっと焦っていたのですが、色々と調べているとどうやら簡単な作業で対応できるとのことなので、その時の対応策をまとめておきたいと思います。
結論から言うと、Let’s Encryptのクライアントでcertbotを使っている場合は、現状の最新版(正確には0.28以上であればOK)にアップデートするだけで大丈夫のようです。まずは現在のcertbotのバージョンを確認してみます。
# certbot --version certbot 0.18.1
どうやら古いバージョンのままのようですね、yum経由でcertbotアップデートしていきます。再度バージョンを確認すると無事に目的のバージョンに上がっているのがわかりますね。
# yum update certbot # certbot --version certbot 0.29.1
新しいバージョンの場合は自動的にHTTP-01の認証が実行されるようです。本来ですと、証明書更新のコマンドである「certbot renew」の実行時に「–preferred-challenges」オプションで認証チャレンジ方式を指定する必要があるようですね。アップデートが確認できれば、続いて「–dry-run」のオプションを付けて更新のテストを行います。念の為「–preferred-challenges http」と指定しておきます。
# certbot renew --dry-run --preferred-challenges http
コマンドが走り、しばらくするとHTTP-01認証方式で実行されているのが確認できます。
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org Renewing an existing certificate Performing the following challenges: http-01 challenge for example.com http-01 challenge for www.example.com Cleaning up challenges...
下記のメッセージが表示されると無事に更新テストが完了したことになります。あとは必要に応じて期限前にコマンドを実行するなりcronに登録するなどで更新していきます。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/example.com/fullchain.pem (success) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Let’s Encryptのドメイン使用権の認証タイプについて
Let’s Encryptでは今回廃止予定の認証タイプの他にもいくつかドメイン使用権の認証タイプがあります。せっかくなので知識としてこの機会にまとめておきたいと思います。
HTTP-01認証 | ポート番号80を使用する認証方式で、Let’s Encrypt認証局から発行されるトークンをwebサーバー内に設置し、認証局がそのトークンを検証する方法 |
---|---|
TLS-SNI-01認証 | ポート番号443を使用する認証方式で、Let’s Encrypt認証局から発行されるトークンをwebサーバー内に設置し、認証局がそのトークンを検証する方法 |
DNS-01認証 | ポート番号53を使用する認証方式で、Let’s Encrypt認証局から発行されるトークンをDNSサーバーのTXTレコードに登録し、認証局がそのトークンを検証する方法認証局がそのトークンを検証する方法 |
現状のcertbotですとプラグインではまだ「TLS-ALPN-01」には対応していないようですね。とりあえずは上記の方法で今回の問題は回避できそうなので良かったです。
(参考にさせて頂いたサイト)
Let’s Encrypt ユーザーガイド
”Action required: Let’s Encrypt certificate renewals”というメールが来たら対応必須!