3

我正在使用智能卡对用户进行身份验证。我有一个身份验证服务 (SecurityTokenService),它处理服务器上的身份验证逻辑。

我正在使用X509Certificate2.Verify()来验证证书。由于此 API 可以通过上网和联系证书颁发机构 (CA) 来检查证书是否有效/撤销,我是否需要服务器上的根证书?

我们可以避免在本地计算机上拥有根证书吗?或者根证书总是强制性的?

4

1 回答 1

5

我尝试了一些事情,以下是观察结果:

  1. 首先X509Certificate2.Verify()不检查链中的所有证书是否都被吊销。从 这篇文章中我了解到,Verify 方法在内部使用Crypt32 CertVerifyCertificateChainPolicy函数。它的文档说它不执行证书吊销检查。简而言之,Verify 方法只检查调用它的证书是否被撤销。

  2. 关于根证书:

    • 如果您正在使用X509Certificate2.Verify()并且没有根证书,那么该方法将直接返回false. 因此,使用这种方法,根证书是绝对需要的。
    • 如果您使用X509Chain构建信任链,那么您可以决定是否排除根证书吊销或是否在线/离线验证证书的吊销状态。
    • 但是,无论您是否上线,或者是否排除根证书,如果根证书缺失,您会在ChainStatus中获取PartialChain值。因此,要构建完整的信任链,您的机器上需要一个根证书。

希望这对想了解更多关于 C# 中的证书验证的人有所帮助。

于 2012-04-11T09:00:13.900 回答