我们是否需要在机器上安装根证书?

Lea*_*ner 2 .net certificate smartcard x509certificate2

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

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

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

Lea*_*ner 5

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

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

  2. 关于根证书:

    • 如果您正在使用X509Certificate2.Verify()并且缺少root证书,则该方法将完全返回false.因此,使用此方法绝对需要根证书.
    • 如果您使用X509Chain构建信任链,则可以决定是否排除根证书吊销或是否联机/脱机以验证证书的吊销状态.
    • 但是,无论您是否联机,或者您是否排除了根证书,如果缺少根证书,您将获得ChainStatus中的PartialChain值.因此,要构建完整的信任链,您需要在计算机上使用根证书.

希望这有助于想要了解C#中的证书验证的人.