HOPES

Let’s Encryptのルート証明書の変更とそれに伴う影響と対応

Let’s Encryptのルート証明書の変更とそれに伴う影響と対応

SSL証明書として広く使われているLet’s Encryptのルート証明書の変更に伴い、「DST Root X3」の有効期限の2021年9月30日を過ぎたタイミングで一部サーバでエラーを確認しました。この問題についての情報と対応をまとめています。

「DST Root X3」から「ISRG Root X1」へルート証明書の変更

2014年に設立された新しい認証局のLet’s Encryptは、すでに普及している別な認証局のIden Trustが2000年に発行した「DST Root X3」というルート証明書を利用してスタートしつつ、これまで、自社のルート証明書である「ISRG Root X1」を各OSやブラウザにインストールしてもらうよう動いてきたという経緯があります。

Let’s Encryptを運営している非営利団体のISRG(Internet Security Research Group)は2014年に設立された新しい認証局です。もちろん、当時は設立されたばかりなのでISRGのルート証明書は様々な端末にインストールされていませんでした。そのため、別の認証局であるIden Trustが2000年に発行した「DST Root X3」というルート証明書を利用し、クロス署名された中間CA証明書を現在も利用しています。

この間(2014年~現在まで)ISRGは何をしていたかというと、各OS(Windows、Mac、Android等)やMozilla(Firefoxブラウザの開発元)に対して、自社のルート証明書である「ISRG Root X1」をインストールしてもらうようにお願いをして、徐々にインストール済み端末シェアを拡大していました。

2021年にLet’s Encryptのルート証明書が変更!影響や備えておくべきこととは? | さくらのSSL

そして、最終的に「DST Root X3」の有効期限が切れる2021年9月30日に合わせて、それ以降は、「ISRG Root X1」のみを使用する前提のスケジュールになっています。

certbotなどを利用してLet’s Encryptを自動更新している場合、2020年9月からデフォルトの中間CA証明書が「ISRG Root X1」のみに対応したものに切り替わる予定になっています。

2021年にLet’s Encryptのルート証明書が変更!影響や備えておくべきこととは? | さくらのSSL

ルート証明書変更に伴う影響と対応

通常のブラウザでのアクセス等の場合は、大体の場合、OSやブラウザ等の対応によって、「ISRG Root X1」のルート証明書がインストールされているため影響は受けないので、特段あまり気にすることはないですが、サーバによるアクセス等により、API連携している処理等がある場合は、確認の必要があるかもしれません。

If you provide an API or have to support IoT devices, you’ll need to make sure of two things: (1) all clients of your API must trust ISRG Root X1 (not just DST Root CA X3), and (2) if clients of your API are using OpenSSL, they must use version 1.1.0 or later.

DST Root CA X3 Expiration (September 2021) – Let’s Encrypt

確認したエラーの現象

当然といえば当然なのですが、「ISRG Root X1」のルート証明書がインストールされていないサーバからAPI連携の処理のために、Let’s Encryptの証明を使ってSSL通信を行なっているURLにアクセスした場合にエラーが発生することを確認しました。

例えば、「file_get.php」というファイルを作成して、以下ようなコードで、Let’s Encryptを使用しているURLにアクセスします。

<?php
$content= file_get_contents("https://www.hopes.host/");
var_dump($content);
?>
php file_get.php

すると、以下のようなエラーが発生します。

PHP Warning:  file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /root/file_get.php on line 2
PHP Warning:  file_get_contents(): Failed to enable crypto in /root/file_get.php on line 2
PHP Warning:  file_get_contents(https://www.hopes.host/): failed to open stream: operation failed in /root/file_get.php on line 2
bool(false)
SSLのルート証明書

アクセスした「www.hopes.host」のSSLのルート証明書は以下のようになっています。

対応方法

対応方法は、CentOS7の場合、「ca-certificates」パッケージをアップデートすることで解決します。

yum install -y ca-certificates
更新:
  ca-certificates.noarch 0:2021.2.50-72.el7_9                                                                                                                          

完了しました!

再度、

php file_get.php

を試すと、エラーが発生しなくなっていることが確認できました。

2022年01月02日に投稿されました。

2022年01月20日に更新されました。