本文主要是介绍IIS10 请求被中止: 未能创建 SSL/TLS 安全通道(已解决),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
微信支付退款流程要检验证书,在开发环境 Windows10 , VS2019 ,.NET4.5 运行没有问题,发布到生产环境:Windows Server 2016 datacenter , IIS10 , .NET4.5 ,运行报错
代码以下:
Dim request As HttpWebRequest = Nothing
Dim response As HttpWebResponse = Nothing
Dim reqStream As Stream = Nothing
Dim result As String = ""
ServicePointManager.ServerCertificateValidationCallback=New RemoteCertificateValidationCallback(AddressOf CheckValidationResult)
request = CType(WebRequest.Create(url), HttpWebRequest)
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 Or SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12
Dim cert As New X509Certificate2("证书全路径", "证书密钥")
request.ClientCertificates.Add(cert)
reqStream = request.GetRequestStream()
reqStream.Write(data, 0, data.Length)
reqStream.Close()
response = CType(request.GetResponse(), HttpWebResponse)
'运行到这里出现以上错误提示
Dim sr As New StreamReader(response.GetResponseStream(), Encoding.UTF8)
result = sr.ReadToEnd().Trim()
sr.Close()
上百度找了一轮,有点说证书导入问题,有的把代码X509Certificate2换成X509Certificate,有的说用微软授权工具 winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "Tenpay Certificate" -a "NetworkService",但在我这里都不行,如果在开发环境可以运行没有报错,说明不是代码问题,应该是环境问题,最后找到原因:
我们导入的客户端证书并不是所有的账户都能访问和使用,因为我们的开发服务器也就是VS自带的服务器默认使用当前用户,而当前用户具有使用证书的权限,所以我们在本地调试的时候,一切正常。当我们将网站部署到IIS后,由于IIS的使用的是内置账户不具有证书的使用权限,所以就出现了上述问题,这个时候我们只需让生产环境的用户可以都到证书就可以了,在导入证书是就可以设置读取证书权限,操作以下,鼠标右键--所有任务--管理私钥 打开证书权限配置,添加Everyone给读取权限。
,就可以正常调用啦!
如果以上还不行,就看看IIS设置里的"加载用户配置文件”是否为True, False的情况也会出现以上错误,以上为IIS10的配置图。
这篇关于IIS10 请求被中止: 未能创建 SSL/TLS 安全通道(已解决)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!