【问题标题】:Do we need root certificate installed on the machine always?我们是否需要始终在机器上安装根证书?
【发布时间】:2012-04-23 10:21:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net certificate smartcard x509certificate2


    【解决方案1】:

    我尝试了一些方法,以下是观察结果:

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

    2. 关于根证书:

    希望这可以帮助那些想了解更多关于 C# 证书验证的人。

    【讨论】:

    • 奇怪的答案 CSharpLearner:大多数时候你不需要明确地验证 root 证书,你需要的是一个明确信任的链。通常您只信任系统上的根证书,但您也可以信任任何中间证书或最终用户证书。这并不意味着这个答案是错误的对于这个特定的框架,但它肯定不适用于其他框架......
    • @owlstead :感谢您的评论;这很有帮助。我发布的是经过几次试验后的观察。如果您的机器上存在有效的根证书,那么您将获得绝对正确的验证,而不会出现像 PartialChain 这样的消息/状态。话虽如此,是否有人想要验证整个链(包括根证书)是需求和选择的问题。只是出于好奇:如果根证书本身被撤销怎么办?或者这是不可能的事情?如果不是,我们是否也应该验证根证书?
    • 通常你只用序列号撤销证书;自签名(根)证书通常“带外”处理 - 这包括吊销证书。在良好的 CA 结构中,根证书的私钥仅偶尔用于创建新的 CA,并不时为这些 CA 创建 CRL。某处。所以它被入侵的可能性应该很小。
    猜你喜欢
    • 1970-01-01
    • 2012-07-10
    • 2015-07-06
    • 2023-03-22
    • 2013-08-30
    • 2020-08-16
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多