Let’s EncryptによるOCSPレスポンス管理の改善
Let’s Encryptは、Redisを導入し、OCSPレスポンスを事前に生成するのではなくオンデマンドで生成することで、オンライン証明書ステータスプロトコル(OCSP)レスポンスの管理方法を改善しました。これにより、これまで以上に信頼性の高いシステムを実現しています。
OCSPレスポンスについて
OCSPは、TLS証明書の失効ステータスを伝えるために使用されます。ACMEエージェントが証明書の失効を要求するリクエストに署名すると、Let’s Encrypt認証局(CA)はそのリクエストが承認されているかどうかを検証し、承認されている場合は、その証明書に対する「失効」OCSPレスポンスの公開を開始します。ブラウザなどの信頼済み当事者がLet’s Encrypt証明書を持つドメインにアクセスするたびに、証明書が失効しているかどうかについての情報を要求することができ、CAによって署名された「有効」または「失効」を含む返信(OCSPレスポンスと呼びます)を提供します。
膨大なOCSPレスポンス負荷:毎秒10万件
Let’s Encryptは現在、3億を超えるドメインにサービスを提供しており、これは膨大な数の証明書失効ステータス要求を受け取っていることを意味します。つまり、*毎秒約10万件*のOCSPレスポンスに対応しています!
通常、OCSPレスポンスの98〜99%はコンテンツデリバリーネットワーク(CDN)によって処理されます。しかし、CDNに問題が発生し、Let’s Encryptがより多くの要求を直接受け入れる必要がある場合があります。従来、当社は独自のシステムでOCSPレスポンストラフィックの最大6%に対応することができました。それよりもはるかに多くの要求を受け入れる必要がある場合、システムの一部が結果を返すのに時間がかかりすぎる、大量のエラーを返す、または新しい要求の受け付けを停止する可能性があります。これは、当社にとっても、インターネットにとっても理想的な状況ではありません。
CDNのいずれかに問題が発生した際にOCSPレスポンスを提供できないと、ユーザーのブラウジング速度の低下やウェブサイトへの接続不能、最悪の場合、証明書が失効しているドメインをインターネットユーザーが意図せずに訪問してしまう可能性があります。ブラウザは反応しないOCSPに異なる方法で反応しますが、1つのことは明確でした。私たちのシステムは、このような状況をはるかにうまく処理する必要がありました。
信頼性の向上
2022年のほとんどの間、この問題に取り組んできた結果、エンジニアはOCSPレスポンスを独立して提供する能力を劇的に向上させました。それは、CDNの問題やCDNキャッシュのクリアなど、トラフィックの急増を吸収するインメモリキャッシュレイヤーとしてRedisを導入することで実現しました。
設計の転換
私たちのチームは、RedisがOCSPレスポンスを提供するために信頼されるようにするために必要なさまざまな相互接続されたシステムを整理/変更するためのシステムアーキテクチャ設計を開発しました。この設計を開発する中で、エンジニアは、全体的なアーキテクチャを簡素化し、それでも信じられないほどの信頼性の向上を実現するために、より多く依存できるリソースを特定しました。OCSPステータスレスポンスを定期的に事前に署名し、リレーショナルデータベースに結果を保存し、Redisにコピーを保持するように要求するのではなく、データベースにシンプルだが権威のある証明書ステータス情報を保持することができます。その後、HSMからの高速で同時実行可能な署名能力を活用して、Just-in-Timeで新しいOCSPレスポンスに署名し、Redisにキャッシュして、要求元に返すことができます。これにより、リレーショナルデータベースへの要求は大幅に軽減され(特にテーブルへの書き込みと書き込み競合)、速度は向上し、Redisには(非常に迅速に)再生成できないものは何も保持されなくなりました。
システムのテスト
最初のテストでは、CDNキャッシュの一部を削除することで、要求の1/16を直接受け入れました。その最初のテストでは、毎秒約12,500件の要求を処理しました。その後、CDNキャッシュの削除率を1/8、1/4、1/2、そして100%に段階的に上げてテストを行いました。テスト負荷を段階的に上げるたびに、デプロイメントがトラフィックをどのように処理できるかについて監視し、洞察を得ることができました。100%の要求の最終テストでは、システムは応答性を維持しました。つまり、今後、受け入れる必要があるOCSPレスポンスの数に急増が発生した場合でも、それらに対応する準備が整っており、インターネットユーザーへのリスクを大幅に軽減できます。
Let’s Encryptのサポート
インターネットセキュリティリサーチグループ(ISRG)のプロジェクトとして、当社の資金は100%がユーザーとサポーターのコミュニティからの貢献によって賄われています。私たちは、公共の利益となるサービスを提供するために、彼らのサポートに依存しています。貴社または貴組織がLet’s Encryptをスポンサーしたい場合は、sponsor@letsencrypt.orgまでメールでご連絡ください。寄付で私たちをサポートしていただける場合は、個人での寄付をお願いします。