链错误和验证证书

时间:2012-06-22 20:37:32

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

我遇到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)。当我尝试运行前面提到的webmethod时,在签名验证时,我收到错误:

      

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

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

    显然唯一的区别是,在第一种情况下,我的流程是一个Web服务,在第二种情况下是一个桌面EXE文件。还有什么可以阻止我在第一种情况下执行验证?

1 个答案:

答案 0 :(得分:0)

我认为你可能会在信赖方上遇到不同的信任商店,请参阅 Certificate stores

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