Let’s Encrypt の旧プロトコルが使用不可能に。数年前から Let’s Encrypt を利用しているサイトは要チェック!

こんにちは。技術スタッフの松本です。今回は無料 SSL を提供する Let’s Encrypt からの重要なお知らせについて解説します。古いバージョンの Let’s Encrypt を利用しているサイトは放置していると SSL/TLS の証明書がエラー状態になってしまいますので、必ず対策を行いましょう。

この記事の対象読者

この記事では以下のような方を特に対象としています。

  • Let’s Encrypt をすでに自分のサーバーに導入している方
  • 比較的古くから Let’s Encrypt を利用している方
  • CentOS6 等、古めの OS を利用している方は特に対象
  • Let’s Encrypt がなにやら英文のメールが届いたが、よく読んでいない方

Let’s Encrypt とは?

今回は残念ながら Let’s Encrypt の基本的な事そのものについては説明できませんが、想定読者でない方にも簡単に Let’s Encrypt とは何かについて紹介したいと思います。

Let’s Encrypt は 2016年ごろから開始された、SSL/TLS 証明書の認証局です。それまで安くても年間数千円を要する SSL/TLS 証明書の取得を完全無料、かつ完全自動で行える事が最大の魅力です。完全無料については解説するまでも無いと思いますが、完全自動という事について少し解説しましょう。通常、他の認証局に SSL/TLS 証明書の申し込みを行う時、入力フォームから入力をし、必要事項を記入します。その過程でクレジットカードの決算処理等を行い、決済を行います。これらの処理は人が手でブラウザを操作する事を想定しています。さらに更新時も同じような処理が必要なので、忘れてしまうと証明書の有効期限が切れてしまいブラウザにエラー画面が表示されてしまいます。

これに対し、Let’s Encrypt は完全に自動化した処理で証明書を更新する事が想定されています。Let’s Encrypt のサイトに行っても証明書の申し込みフォーム等はありません。Let’s Encrypt の申請や更新はコマンドラインツールで行う事になっており、自動化した処理が可能になります。証明書の有効期限自体は3ヵ月と極めて短いのですが、初期設定さえ済んでしまえば自動的に更新され続けます。このため、うっかり証明書の更新を忘れてしまったというミスを無くす事ができます。

その一方、初期設定や更新の設定は技術者以外の方には少々難しい手続きになります。それを補うために各レンタルサーバーでは初心者の方でも簡単に操作可能なコントロールパネル等を用意している事があります。もちろん PADWAM でも Let’s Encrypt の更新は対応しており、お客様に代わって全操作を代行しております。

旧プロトコルはまもなく利用できなくなります

このように通常運用においては完全自動で行われる Let’s Encrypt の運用なのですが、先日、Let’s Encrypt で利用している ACMEv1 というプロトコル(通信手順)が利用できなくなるとのお知らせが届きました。古いプロトコルを利用しているサイトでは、新しい ACMEv2 というプロトコルに変更する必要があります。すでに ACMEv1 での新規登録はできないようになっており、また既存サイトからのリクエストも今後は意図的にエラーを増やし続け、2021年の6月には ACMEv1 の利用が完全に停止されます。

プロトコルバージョンの確認方法

現在、自分のサーバーが Let’s Encrypt とどのように通信しているかは、メールで確認する方法と、ログから確認する方法があります。

メールで確認する方法

古いプロトコルを利用しているサイトの管理者には、Let’Encrypt から Update your client software to continue using Let’s Encrypt というタイトルのお知らせメールが届いているはずです。英語のメールをスパムだと思って読まずに破棄したりはしていませんか? 心当たりのある方はここ数か月に届いたメールを検索してみて下さい。

このメールの中には、上の方に以下のような記述があります。

Client IP address: <サーバーのIPアドレス>

User agent: CertbotACMEClient/0.20.0 (certbot-auto; CentOS 6.7) Authenticator/webroot Installer/None (certonly; flags: frn n) Py/2.7.13

Hostname(s): <利用しているドメインの一覧>

自分のサーバーやドメインが該当している場合は、ACMEv1 を利用しているはずです。

ログによる確認方法

メールが残っていない場合やそもそも受信をオフにしている場合には、ログを確認しましょう。Linux 系サーバーを利用している場合、Let’s Encrypt との通信のログは、通常 /var/log/letsencrypt/ に保存されています。この中にはletsencrypt.log というファイルの他に、番号の拡張子が付与されたファイルが保存されています。以下はあるサーバーの例です。

-rw-r–r– 1 root root 10952 Jun 26 03:12 letsencrypt.log
-rw-r–r– 1 root root 10043 Jun 20 23:56 letsencrypt.log.1
-rw-r–r– 1 root root 15517 Apr 20 04:01 letsencrypt.log.10
-rw-r–r– 1 root root 10956 Apr 12 00:05 letsencrypt.log.11
-rw-r–r– 1 root root 16430 Apr 6 01:47 letsencrypt.log.12
-rw-r–r– 1 root root 15517 Jun 15 05:49 letsencrypt.log.2
-rw-r–r– 1 root root 13691 Jun 7 06:01 letsencrypt.log.3
-rw-r–r– 1 root root 11869 May 31 03:15 letsencrypt.log.4
-rw-r–r– 1 root root 15517 May 24 22:15 letsencrypt.log.5
-rw-r–r– 1 root root 39507 May 16 12:44 letsencrypt.log.6
-rw-r–r– 1 root root 10956 May 10 02:36 letsencrypt.log.7
-rw-r–r– 1 root root 16430 May 4 01:58 letsencrypt.log.8
-rw-r–r– 1 root root 10952 Apr 25 19:46 letsencrypt.log.9

この中でサイズの大きなログファイルを選んで下さい。上記の場合、letsencrypt.log.6 がそれです。なぜ、このログだけサイズが大きいかと言うと、Let’s Encrypt との通信を行うプログラムでは、証明書の残りの有効期限を確認し、まだ十分に有効期限が残っている場合には証明書の更新を行わないからです。有効期限が少ない時にのみ Let’s Encrypt のサーバーと通信して証明書の更新を行うのですが、その時のログサイズは大きくなります。

通信が行われているログを選択したら、GET request to という文字列を検索してみて下さい。以下のように1行以上の該当行が表示されます。

# grep ‘GET request to’ letsencrypt.log.11
2020-05-09 19:23:02,410:DEBUG:acme.client:Sending GET request to https://acme-v01.api.letsencrypt.org/directory.

※上記の操作ログは、サーバー固有の情報を一部隠蔽しています。

ログの中の URL が acme-v01.api.letsencrypt.org というドメインだった場合には、今回の処理の対象となります。ACMEv2 で通信している場合には、以下のような内容になります。

# grep ‘GET request to’ letsencrypt.log
2020-06-26 06:18:14,849:DEBUG:acme.client:Sending GET request to https://acme-v02.api.letsencrypt.org/directory.

該当したらどうすればよいか?

もし ACMEv1 を利用している場合、それは Let’s Encrypt の証明書更新クライアントソフトウェアのバージョンが古いからです。通常それらのソフトウェアは certbot や certbot-auto 等です(インストール方法によりクライアントソフトウェアの名前は異なります)。クライアントソフトウェアを最新化する事で、ACMEv2 での通信が可能になります。

なお、具体的なバージョンアップ方法については、インストール時の方法によって異なるため割愛します。状況によっては Python のバージョンアップ等も必要になるため、よく確認し、適切なバージョンアップを行って下さい。

バージョンアップが完了したら再度証明書を取得してみて下さい。その後にログを確認し、通信先が https://acme-v02.api.letsencrypt.org/directory. になっていれば問題は解決です。

メディアプライムでは、Let’s Encrypt のバージョンアップを代行致します

Let’s Encrypt のクライアントソフトウェアで ACMEv1 を利用している場合、バージョンアップは必須です。特に2016年ごろに導入を開始したサーバーではバージョンアップが行われていない可能性がありますので十分注意して下さい。

なお、メディアプライムでもお客様のサーバーにおいて Let’s Encrypt のバージョンアップが必要かどうかを調査し、バージョンアップ作業を代行するサービスを行っております。ご興味がありましたら是非お問い合わせ下さい。

    【問い合わせ先】

      ■ メール:cms-info@mediaprime.jp

      ■ 電話:03-5351-1555 ※10:00 ~ 17:00 (平日)