証明書の失効を伝えるためのOCSPプロトコル
証明書の失効を確認する方法は、CRL(Certificate Revocation Lists)のダウンロードやOCSP(Online Certificate Status Protocol)がある。CRLは容量が大きいのでリクエストの都度取得することが現実的ではない。そのため軽量なOCSPプロトコルが使われる場面がある。
OCSPは証明書の拡張データでクライアントへ伝えられる。
OCSPを確認するには openssl s_client が簡単だろう。
% openssl s_client -connect xx.example.org:443 -statusCONNECTED(00000005)OCSP response: no response sentOCSP廃止の流れ
Section titled “OCSP廃止の流れ”Let’s EncryptはOCSPを廃止してCRLに一本化する方針を発表した。これはクライアントがOCSPリクエストを行うときに、ユーザーのIPアドレスとアクセスしたドメインを第三者が知ることができてしまうのが問題らしい。
GoのTLSパッケージ
Section titled “GoのTLSパッケージ”GoのtlsクライアントはCRLをダウンロードしていないのでOCSPだけをみる。TLS接続したときサーバー証明書にOCSP拡張が含まれている場合、GoのTLSクライアントはOCSPリクエストを含めてハンドシェイクする。ソースコードだと statusTypeOCSP が使われているあたりかな。
- handshake_messages.go: certificateStatusMsg.marshal
OCSPの情報は tls.Conn.OCSPResponse や tls.Certificate.OCSPStaping で参照できる。