Skip to content

証明書の失効を伝えるためのOCSPプロトコル

証明書の失効を確認する方法は、CRL(Certificate Revocation Lists)のダウンロードやOCSP(Online Certificate Status Protocol)がある。CRLは容量が大きいのでリクエストの都度取得することが現実的ではない。そのため軽量なOCSPプロトコルが使われる場面がある。

OCSPは証明書の拡張データでクライアントへ伝えられる。

OCSPを確認するには openssl s_client が簡単だろう。

Terminal window
% openssl s_client -connect xx.example.org:443 -status
CONNECTED(00000005)
OCSP response: no response sent

Let’s EncryptはOCSPを廃止してCRLに一本化する方針を発表した。これはクライアントがOCSPリクエストを行うときに、ユーザーのIPアドレスとアクセスしたドメインを第三者が知ることができてしまうのが問題らしい。

GoのtlsクライアントはCRLをダウンロードしていないのでOCSPだけをみる。TLS接続したときサーバー証明書にOCSP拡張が含まれている場合、GoのTLSクライアントはOCSPリクエストを含めてハンドシェイクする。ソースコードだと statusTypeOCSP が使われているあたりかな。

  • handshake_messages.go: certificateStatusMsg.marshal

OCSPの情報は tls.Conn.OCSPResponsetls.Certificate.OCSPStaping で参照できる。