无法创建 SSL/TLS 安全通道 - 问题可能出在代理服务器上吗?

问题描述 投票:0回答:6

我有一个 C# 应用程序,它调用使用证书进行身份验证的 Web 服务方法。 该代码有效,因为当它安装在服务器 A(没有代理)上时,它会进行身份验证。

当我在客户端站点的服务器 B 上安装代码时,它安装在代理后面。我确实尝试了几乎所有方法,但我不断收到此错误:

无法创建 SSL/TLS 安全通道

您认为这个问题可能是由代理服务器引起的吗?如果您有这方面的个人经验,请分享。

c# web-services certificate
6个回答
17
投票

根据我的经验,几乎所有此类消息都是由于链中的某些机器(客户端、代理、服务器)由于某种原因不“喜欢”证书。

为了详细说明 twk 所说的内容,如果您使用自签名证书或您自己的 CA,则至少需要在服务器上(也可能在代理上)的受信任颁发机构存储中安装签名证书。

我遇到的常见问题:

  • 服务器上的证书未由代理或客户端信任的机构签名
  • CLIENT 上的证书未由 PROXY 或 SERVER 信任的机构签名
  • 哎呀,我在创建要安装在客户端上的证书时忘记导出私钥了
  • 我的进程没有客户端私钥的读取权限
  • 客户端证书受密码保护,并且我在读取证书时没有指定凭据。

13
投票

我也遇到了同样的问题。就我而言,证书需要网络服务访问权限。您可以通过

查看
  1. 打开证书MMC
  2. 导航到证书(本地计算机)> 个人 > 证书
  3. 右键单击您的证书,然后从上下文菜单中选择“所有任务”>“管理私钥...”
  4. 设置适当的权限

5
投票

如果您的证书不受信任(是自签名的),则 C# 客户端将拒绝连接。


0
投票

我的回答和Snakebyte类似。就我而言,证书的私钥需要 IIS_IUSRS 用户访问权限。

  1. 打开证书MMC
  2. 右键单击您的证书,然后从上下文菜单中选择“所有任务”>“管理私钥...”
  3. 添加 IIS_IUSRS 用户并设置适当的权限。

0
投票

将其添加到构造函数中:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

-1
投票

对我来说,将池身份更改为“NetworkService”后问题就解决了

IIS Application Pool

© www.soinside.com 2019 - 2024. All rights reserved.