如何在Golang中验证客户端证书是否符合CRL?

问题描述:

我在tls.Config中使用ClientCAsClientAuth选项在我的Go HTTP应用程序中执行基于证书的客户端身份验证。是否可以验证提供的CRL的客户端证书?我在x509包中看到有一些围绕CRL的功能,但我不确定如何配置HTTP服务器来使用它们(即似乎没有任何选项可能导致CRL也成为tls.Config用过的)。如何在Golang中验证客户端证书是否符合CRL?

是否有可能也验证了针对提供CRL的客户端证书?

是的,可以通过crypto/x509包中提供的功能(正如您在问题中正确说明的那样)提供的功能。但是,crypto/tls.Config(由net/http消耗)等更高级别的接口不提供此功能。对CRL实施检查的好机会可能是检查net/http.Request.TLS.PeerCertificates

有点背景:crypto/tls is maintained by security expert Adam Langley谁有opinion on revocation checking(原始来源是his blog)。虽然我没有证据,但可以认为这是一个故意的设计决定。

+0

谢谢@flowlo,我会深入探讨您建议的PeerCertificates选项。至于Adam在CRL上的帖子,我从客户端角度得到他的评论。当使用证书进行服务器端身份验证时,CRL仍然至关重要。 – Bryan

+1

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