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

9
我正在使用tls.Config中的ClientCAsClientAuth选项,在Go HTTP应用程序中进行基于证书的客户端身份验证。是否可以使用提供的CRL验证客户端证书?我在x509包中看到了一些关于CRL的函数,但我不知道如何配置HTTP服务器以使用它们(即tls.Config中似乎没有任何选项可以导致同时使用CRL)。
2个回答

11
可以通过提供的CRL验证客户端证书吗?
是的,可以通过crypto/x509包中提供的功能实现(正如您在问题中正确说明的那样)。但是,像crypto/tls.Config(由net/http使用)这样的高级接口不提供该功能。可能实现针对CRL的检查的好机会是通过检查net/http.Request.TLS.PeerCertificates
一点背景知识:crypto/tls由安全专家Adam Langley维护,他对撤销检查有意见(原始来源是他的博客)。虽然我没有证据,但人们可能认为这是一个故意的设计决策。

谢谢@flowlo,我会深入研究您建议的PeerCertificates选项。至于Adam在CRL方面的帖子,从客户端的角度来看,我理解他的意思。但是,在使用证书进行服务器端身份验证时,CRL仍然非常重要。 - Bryan
7
手动验证对等证书似乎是一个有效的方法。只需要在服务器调用堆栈中的某个中间件中完成即可。供日后参考,https://github.com/cloudflare/cfssl/blob/master/revoke/revoke.go 的代码有一些很好的示例,说明如何将对等证书与CRL进行比较。 - Bryan

0

您可以使用VerifyPeerCertificate来验证连接是否与您的CRL文件匹配。只需遍历您的吊销证书列表,并检查吊销证书的序列号是否等于对等证书的序列号即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接