.NET中的客户端证书身份验证(Windows Server)

时间:2018-02-07 23:22:40

标签: asp.net .net .net-4.0 ssl-certificate client-certificates

我对部署的Web应用程序有一个非常奇怪的问题。

相关数据:

Application Server: IIS 7.5
Server: Windows Server 2008 R2 Standard SP1
Framework: ASP.NET
.NET Framework: 4 (4.0.30319)
Application Pool: Integrated

我在Web应用程序中使用了通过客户端证书身份验证进行身份验证的服务。我没有与身份验证本身有关的问题(它正在我的开发环境中工作)。但是每当我想在服务器(生产)环境中使用该服务时,我都会遇到问题。

这里是CODE的相关部分:

private void SetupClienteCertificate(HttpWebRequest req)
{
        var binding = new BasicHttpBinding();
        binding.Security.Mode = BasicHttpSecurityMode.Transport;
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
        var crt = new X509Certificate2(
            txtClientCertificateFile.Text, 
            txtCertificatePassword.Text, 
            X509KeyStorageFlags.MachineKeySet
        );
        req.ClientCertificates.Add(crt);
}

我得到的错误很常见且不言自明:

  

The request was aborted: Could not create SSL/TLS secure channel.

非常奇怪的部分,如果我从C# .Net Windows Forms桌面应用程序运行完全相同的代码(具有相同的。 NET 4框架)我可以获得与服务器通信的代码。

所以我的问题是:为什么它可以从桌面应用程序运行而不能使用ASP.NET Web应用程序?

我已经确定的一些东西:

  1. 在注册表中启用了SSLv3,TLS,TLSv1,TLSv2
  2. 我忽略了SSL证书错误(没有必要,但只是在案例中
  3. 每次我更改配置时都重新启动应用程序池。
  4. 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我想我得到了你的问题。 您能否确保运行应用程序池的帐户具有从证书中读取证书的足够权限 存储