【发布时间】: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 应用程序中运行?
一些我已经确定的东西:
- 在注册表中启用 SSLv3、TLS、TLSv1、TLSv2
- 我忽略了 SSL 证书错误(不是必需的,但以防万一)
- 每次更改配置时都会重新启动应用程序池。
有什么想法吗?
【问题讨论】:
-
桌面应用程序和Web服务器应用程序(不是运行浏览器的机器)是否在一台成功而另一台失败时运行在同一台机器上?
-
@NightOwl888 是的,他们是。它们都运行在完全相同的 Windows Server 2008 R2 SP1 计算机上。
-
@NightOwl888 唯一的区别是桌面应用程序在一个普通的windwos用户下运行,而Web应用程序在任何设置为运行IIS服务器的用户下运行。
-
嗯,有一个很大的线索。这可能是某种寡妇权限问题。尝试暂时将 IIS 用户设置为以管理员身份运行以确认。此外,请检查 Web 服务器上的 Windows 事件日志,以查看在您尝试连接时是否记录了任何信息。
标签: asp.net .net .net-4.0 ssl-certificate client-certificates