如何在Golang中针对CRL验证客户端证书?

Bry*_*yan 4 ssl go tls1.2

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

Lor*_*geb 7

是否可以根据提供的CRL验证客户端证书?

是的,可以通过crypto/x509包装中提供的功能(正如您在问题中正确说明的那样).但是,诸如crypto/tls.Config(被消费者net/http)这样的高级接口不提供这种接口.对CRL实施检查的好机会可能是检查net/http.Request.TLS.PeerCertificates.

一点背景:crypto/tls由安全专家Adam Langley维护,对撤销检查持有意见(原始来源是他的博客).虽然我没有证据,但人们可能会认为这是一个刻意的设计决定.

  • 手动验证对等证书看起来是一种有效的方法。只需要在服务器调用堆栈中的某个地方作为中间件来完成。为了将来参考,https://github.com/cloudflare/cfssl/blob/master/revoke/revoke.go 上的代码提供了一些很好的示例,说明如何实际将对等证书与 CRL 进行比较。 (4认同)