如何在Golang中验证客户端证书是否符合CRL?
问题描述:
我在tls.Config
中使用ClientCAs
和ClientAuth
选项在我的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)。虽然我没有证据,但可以认为这是一个故意的设计决定。
谢谢@flowlo,我会深入探讨您建议的PeerCertificates选项。至于Adam在CRL上的帖子,我从客户端角度得到他的评论。当使用证书进行服务器端身份验证时,CRL仍然至关重要。 – Bryan
手动验证对等证书看起来是一种有效的方法。只需要在服务器调用堆栈中作为中间件来完成。为了将来的参考,https://github.com/cloudflare/cfssl/blob/master/revoke/revoke.go上的代码提供了一些很好的例子,说明如何将对等证书与CRL进行实际比较。 – Bryan