我如何根据 Golang 中的 CRL 验证客户端证书?

How can I verify client certificates against a CRL in Golang?

我在 tls.Config 中使用 ClientCAsClientAuth 选项在我的 Go HTTP 应用程序中进行基于证书的客户端身份验证。是否还可以根据提供的 CRL 验证客户端证书?我在 x509 包中看到有一些围绕 CRL 的函数,但我不确定如何配置 HTTP 服务器来使用它们(即 tls.Config 中似乎没有任何选项这会导致 CRL 也被使用)。

Is it possible to also verify the client certs against a provided CRL?

是的,通过 crypto/x509 包中提供的功能(正如您在问题中正确陈述的那样),这是可能的。但是,crypto/tls.Config(由 net/http 使用)等更高级别的接口不提供该功能。检查 CRL 的一个好机会可能是检查 net/http.Request.TLS.PeerCertificates.

一些背景知识:crypto/tls is maintained by security expert Adam Langley who has an opinion on revocation checking (original source is his blog)。虽然我没有证据,但有人可能会认为这是一项故意的设计决定。