【问题标题】:Chain error and Verifying certificate链错误和验证证书
【发布时间】:2012-06-25 04:46:24
【问题描述】:

PKCS #7 有问题,这让我抓狂。事情是这样的:

  1. 我有一个 ASP.NET 网络服务,它向另一个第三方服务器发出请求,并接收一个 PKCS #7 签名令牌作为响应(这个令牌的来源实际上并不重要)。然后,我的 Web 服务会检查令牌的签名(和有效性)并将随附的数据返回给调用该方法的用户。

  2. Web 服务配置为在专用应用程序池中运行,该应用程序池在 Windows AD 用户帐户 IIS 6 下运行。

  3. 为了执行验证,我这样做(签名有令牌):

    public static byte[] VerifyAndExtractEnvelopedData(byte[] signature)
    {
        if (signature == null)
            throw new ArgumentNullException("signature");
    
        // Decode the signature
        SignedCms cms = new SignedCms();
        cms.Decode(signature);
        cms.CheckSignature(false);
    
        if (cms.Detached)
            throw new InvalidOperationException("Cannot extract enveloped content from a detached signature.");
    
        return cms.ContentInfo.Content;
    }
    
  4. 我部署了 Web 服务 (IIS 6)。当我尝试运行上述 web 方法时,在签名验证时,我收到错误:

    无法将证书链构建到受信任的根权威机构

为了简化事情,我用完全相同的代码编写了一个小的 Windows 窗体应用程序。我使用应用程序池中的相同用户帐户以交互方式登录到托管 Web 服务的同一台服务器。在那里运行EXE文件,它工作正常,即能够完美地验证签名。 IMO,这排除了任何问题,例如缺少 certificate authority (CA) 证书等(事实上,我有签名者的 .CER 文件,我在 Windows 中打开它,它告诉我链没问题)。

显然,唯一的区别是,在第一种情况下,我的进程是 Web 服务,而在第二种情况下,我的进程是桌面 EXE 文件。在第一种情况下还会发生什么阻止我执行验证的情况?

【问题讨论】:

    标签: .net web-services certificate keychain pkcs#7


    【解决方案1】:

    我认为您可能会访问依赖方的不同信任库,请参阅 Certificate stores

    此外,请使用 PKIF、PITT、Portecle 或类似工具检查相关证书的有效性、正确的 OID、链接等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-15
      • 2017-08-15
      • 1970-01-01
      • 2021-06-27
      • 2018-12-25
      • 1970-01-01
      • 2021-10-30
      • 2018-08-13
      相关资源
      最近更新 更多