我正在使用智能卡来验证用户身份。我有一个身份验证服务(SecurityTokenService),它处理服务器上的身份验证逻辑。
我在用X509Certificate2.Verify() http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.verify.aspx验证证书。由于该API可以通过上网并联系证书颁发机构(CA)来检查证书是否有效/吊销,因此我是否需要服务器上的根证书?
我们可以避免本地计算机上有根证书吗?或者根证书始终是强制性的?
我尝试了一些事情,以下是观察结果:
首先X509Certificate2.Verify()
不检查链中的所有证书是否都已撤销。从this http://social.msdn.microsoft.com/Forums/en-US/windowssecurity/thread/0bdea687-7b5a-493b-b46a-87f8df5049a4帖子我开始知道Verify方法内部使用Crypt32 CertVerifyCertificateChainPolicy http://msdn.microsoft.com/en-us/library/windows/desktop/aa377163%28v=vs.85%29.aspx功能。它的文档说它不执行证书吊销检查。简而言之,Verify 方法只是检查调用它的证书是否被吊销。
-
关于根证书:
- 如果您正在使用
X509Certificate2.Verify()
并且根证书不存在,那么该方法将直接返回false
。因此,使用此方法绝对需要根证书。
- 如果您正在使用X509链条 http://msdn.microsoft.com/en-us/library/9bys9et1.aspx建立信任链,然后你就可以决定是否排除根证书吊销 http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509revocationflag.aspx或是否上线/下线验证撤销状态 http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509revocationmode.aspx的证书。
- 但是,无论您是否上网,或者是否排除根证书,您都会得到部分链 http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509chainstatusflags%28v=vs.100%29.aspx值在链状态 http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509chainstatus.status%28v=vs.90%29.aspx如果根证书丢失。因此,要构建完整的信任链,您的计算机上需要一个根证书。
希望这对想要更多了解 C# 中的证书验证的人有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)