.net 链错误与证书验证

.net 链错误与证书验证,.net,web-services,certificate,keychain,pkcs#7,.net,Web Services,Certificate,Keychain,Pkcs#7,我有个问题,快把我逼疯了。事情是这样的: 我有一个Web服务,它向另一个第三方服务器发出请求,并接收一个PKCS#7签名令牌作为响应(这个令牌来自何处其实并不重要)。然后,我的web服务检查令牌的签名(和有效性),并将附带的数据返回给调用该方法的用户 web服务配置为在专用应用程序池中运行,该应用程序池在Windows用户帐户6下运行 要执行验证,我执行以下操作(签名具有令牌): 我部署了web服务(IIS 6)。当我尝试运行上述webmethod时,在签名验证后,我得到错误: 无法将证书链构

我有个问题,快把我逼疯了。事情是这样的:

  • 我有一个Web服务,它向另一个第三方服务器发出请求,并接收一个PKCS#7签名令牌作为响应(这个令牌来自何处其实并不重要)。然后,我的web服务检查令牌的签名(和有效性),并将附带的数据返回给调用该方法的用户

  • web服务配置为在专用应用程序池中运行,该应用程序池在Windows用户帐户6下运行

  • 要执行验证,我执行以下操作(签名具有令牌):

  • 我部署了web服务(IIS 6)。当我尝试运行上述webmethod时,在签名验证后,我得到错误:

    无法将证书链构建到受信任的根颁发机构

  • 为了简化工作,我用完全相同的代码编写了一个小小的Windows窗体应用程序。我使用应用程序池中的同一用户帐户以交互方式登录到web服务所在的同一服务器。在那里运行EXE文件,它工作正常,也就是说,我们能够完美地验证签名。在我看来,这排除了任何问题,如丢失(CA)证书等(事实上,我有签名者的.CER文件,我在Windows中打开它,它告诉我链是正常的)


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

    我认为您可能访问了依赖方的不同信任存储,请参阅

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

    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;
    }