我在VM中有一个windows服务。它正在调用托管在另一个服务器中的API。当我从我的windows服务调用那个api时,它给了我错误,它说:
System.Net.WebException:基础连接已关闭:无法为SSL/TLS安全通道建立信任关系。-> System.Security.Authentication.AuthenticationException:根据验证过程远程证书无效。
现在我知道了,如果在调用api之前添加这一行,它就会正常工作。
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };但是我不想更改我的代码并再次部署它。有什么方法可以让我在VM中做一些托管windows服务的事情,比如信任证书之类的,这将解决这个问题吗?
这方面的任何帮助都是很有帮助的。谢谢。
我知道这个问题被问了很多次,但是所有的解决方案都要求我要么更改api所在的服务器,要么修改我的代码以添加上面的代码。我正在寻找一种解决方案,在那里我可以在客户端机器中进行更改,而不是在其他任何地方。
发布于 2019-12-09 15:59:04
我碰到过几次这个。它可能意味着一些事情:
对于前两个选项,可以使用nmap确定服务器支持的协议和密码列表:
nmap -sV --script ssl-enum-ciphers -p 443 <host>一旦有了支持的协议/密码列表,您就可以使用名为IISCrypto的免费工具在客户端机器上检查自己,并验证是否启用了匹配的协议/密码组合。
对于最后一个选项,如果运行的内容少于.NET Framework4.6.1,则可能需要添加:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };我并不建议严格按照上面的方式设置协议(因为TLS1.3即将到来)。应该总是尝试让窗口为您确定最高的安全性。有时,某些邪恶是前进所必需的。你以后总是可以再看的。
这帮助我解决了这个特殊的问题。希望它能帮助你。
https://stackoverflow.com/questions/59249053
复制相似问题