1、在ISV中配置回调函数,套件生成正常
2、在接受suite_ticket时 获取套件访问Token(suite_access_token)时 , 报请求被中止: 未能创建 SSL/TLS 安全通道
3、本地测试获取时正常,发布到外网服务器上出现如上错误提示
public static string PostWithHttps(string url, string postdata, string strEncoding = "UTF-8")
{
Encoding enCoding = Encoding.GetEncoding(strEncoding);
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "post";
//request.Accept = "text/html, application/xhtml+xml, */*";
request.ContentType = "application/json;charset=UTF-8";
byte[] buffer = enCoding.GetBytes(postdata);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
var response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
using (var reader = new StreamReader(responseStream, enCoding))
{
return reader.ReadToEnd();
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到“请求被中止: 未能创建 SSL/TLS 安全通道”的问题,通常是因为服务器的SSL/TLS配置不兼容或者不支持目标网站所要求的协议版本。以下是一些可能的解决方案:
更新TLS版本:确保你的服务器支持TLS 1.2或更高版本,因为很多服务已经开始弃用TLS 1.0和1.1。在.NET Framework中,可以通过代码强制使用TLS 1.2,如下所示:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
将这段代码添加到你的方法开始之前,以确保使用TLS 1.2。
检查服务器时间:确保服务器的系统时间是准确的,不正确的系统时间可能导致SSL握手失败。
禁用SSL验证(仅测试环境):在开发或测试环境中,你可能会选择临时禁用SSL验证来排查问题,但请注意,这在生产环境中是非常不安全的,不应该这样做。如果需要,可以这样设置:
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
证书信任问题:确认服务器信任的目标API的SSL证书。如果证书是由非标准CA签发的,可能需要将该CA的根证书导入到服务器的信任证书存储中。
使用HttpClient代替HttpWebRequest:HttpWebRequest
已逐渐过时,考虑使用HttpClient
类,它提供了更现代、灵活且性能更好的HTTP请求处理方式。同时,HttpClient
默认支持更高的TLS版本。
检查网络限制和防火墙:有时,企业级的防火墙或代理服务器会限制或阻止某些SSL/TLS连接,检查是否有这样的策略并适当调整。
请按照上述建议逐一尝试,并优先考虑那些不会降低应用安全性的解决方案。