【问题标题】:Client Certificate Authentication in .NET (Windows Server).NET 中的客户端证书身份验证(Windows Server)
【发布时间】:2018-02-07 23:22:40
【问题描述】:

我部署的 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 应用程序。我没有与身份验证本身有关的问题(它在我的开发环境中工作)。但是每当我想从服务器(生产)环境中使用该服务时,我都会遇到问题。

这是代码的相关部分:

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 窗体桌面应用程序(使用相同的 .NET 4框架)我可以获取与服务器通信的代码。

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

一些我已经确定的东西:

  1. 在注册表中启用 SSLv3、TLS、TLSv1、TLSv2
  2. 我忽略了 SSL 证书错误(不是必需的,但以防万一
  3. 每次更改配置时都会重新启动应用程序池。

有什么想法吗?

【问题讨论】:

  • 桌面应用程序和Web服务器应用程序(不是运行浏览器的机器)是否在一台成功而另一台失败时运行在同一台机器上?
  • @NightOwl888 是的,他们是。它们都运行在完全相同的 Windows Server 2008 R2 SP1 计算机上。
  • @NightOwl888 唯一的区别是桌面应用程序在一个普通的windwos用户下运行,而Web应用程序在任何设置为运行IIS服务器的用户下运行。
  • 嗯,有一个很大的线索。这可能是某种寡妇权限问题。尝试暂时将 IIS 用户设置为以管理员身份运行以确认。此外,请检查 Web 服务器上的 Windows 事件日志,以查看在您尝试连接时是否记录了任何信息。

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


【解决方案1】:

我想我明白了你的问题。 您能否确保运行应用程序池的帐户有足够的权限从证书中读取证书 商店

【讨论】:

    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 2011-04-09
    • 2013-10-07
    • 1970-01-01
    • 2022-06-23
    • 2023-04-10
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多