SSL証明書の透明性ってなんですか?


はじめに

KUSANAGI-8.0.1 ではSSL証明書の透明性( CT(Certificate Transparency) と呼びます) に対応しています。
今回、これについて少し解説したいと思います。

CTの背景

パブリックなSSL証明書は、認証局(CA:Certification Authority)によって発行され、その内容が保証されます。
しかし、近年認証局が不正アクセスを受けて偽のSSL証明書を発行したり、誤って不正な証明書をSSL発行したりという事件がありました。
そこでGoogle社が考案したのが、不正なSSL証明書を早期に発見・検知するための仕組みであるCTを(Certificate Transparency)です。これは、現在RFC6922として規格化され、Google Chrome などが対応しています。

CTの仕組み

CTは、SSL証明書をログサーバに登録して取得するSCT(Signed Certificate Timestamp) とSSL証明書をWebサーバで提供します。
WebブラウザはWebサーバから取得したSCTが、ログサーバに登録されているかどうかを確認することで、SSL証明書が正当なものであることを確認します。

CTを実現するためには、幾つかの方法があります。
一つは認証局がSCT付きSSL証明書を提供するものです。
認証局はSSL証明書をログサーバに登録し、ログサーバからSCT(Signed Certificate Timestamp)を取得し、SCT付きのSSL証明書を提供します。Webサーバでは、このSCT付きのSSL証明書を使用します。
もう一つは、認証局がSSL証明書とSCTを提供し、Webサーバではこの2つを使用してSCT付きのSSL証明書とするものです。

KUSANAGIでのCT実現

KUSANAGIでは、NGINX を使用している場合に限り CT に対応しています。
KUSANAGIでCTを使用する場合、3つの方法があります。

  • Let’s Encryptを使用
    Let’s Encrypt でSSL証明書でCTを使用する場合、以下のコマンドを実行しログサーバへSSL証明書を登録し、NGINXの設定を行います。kusanagi ssl --ct on このコマンドでは、取得したSSL証明書をログサーバに自動登録しSCTを取得します。
    この取得したSCTとSSL証明書をNGINXの Certificate Transparency moduleでSCT付きのSSL証明書として提供します。
    また、Let’s Encryptの自動更新時には、SCTも自動更新します。
  • SCT付きSSL証明書を使用
    すでにログサーバに登録済みのSSL証明書を認証局から提供されているとき、通常通りSSL証明書を設定して下さい。
  • SCTとSSL証明書を使用
    認証局からSCTとSSL証明書が提供されるとき、以下のコマンドを実行してログサーバへ登録を行わずに、NGINXの設定のみを行います。kusanagi ssl --ct --on --no-registerまた、SSL証明書を配置したディレクトリ以下にscts というディレクトリを作成し、そこにSCTファイルを配置して下さい。

CTの確認方法

CTが有効になっているかどうかを確認する場合、以下のサイトでFQDNを検索することができます。

https://www.google.com/transparencyreport/https/ct/?hl=ja

最後に

常時SSL化というキーワードが最近見受けられ、またLet’s Encryptに代表される無償のSSL証明書や、格安のSSL証明書を使う場面が多くなってきました。
その中で、SSL証明書が正当なものであることを保証する、CTのような技術の重要性は増しています。
KUSANAGIのCTの仕組みはそれを支援するものですので、有効にお使い下さい。


Post Author: 宮﨑悟

KUSANAGIの中の人で、プログラミングができて、歌って踊ってベタが塗れるサーバエンジニア(誇張あり)。
物理層からミドルウェアまでを主戦場としていますが、最近はKUSANAGIを作ったりKUSANAGIを作ったりKUSANAGIを作ったりしています。
好きなOSはSolaris。好きなファイルシステムはZFS。好きな仮想化はSolaris Zone。