XmlDocument.Load:无法创建SSL/TLS安全通道
本文关键字:TLS 安全 通道 SSL 创建 Load XmlDocument | 更新日期: 2023-09-27 18:28:21
我的应用程序中到处都是类似的简单代码:
new XmlDocument().Load("https://mybookingpal.com/xml/rest/product/organization/5?pos=" + "a3a2e74b809e0e87");
以上是新域名,旧域名是:
new XmlDocument().Load("https://razor-cloud.com/xml/rest/product/organization/5?pos=" + "a3a2e74b809e0e87");
您可以尝试这两个URL,并看到它们工作良好/产生相同的XML结果。
SSL中可能发生了一些变化,导致.Load()无法正常工作。我有两个问题:
- 是什么导致了故障,所以我可以尝试在一个地方修复它(在API服务器上)
- 如何修复客户端代码
我遇到了同样的问题。事实证明,这是由中定义的xml DTD引起的
<!DOCTYPE>
检查xml文件头
<!DOCTYPE xxx SYSTEM "url">
复制url并粘贴到浏览器中,然后运行Fiddler来查看它使用的是什么协议。
我的情况是,我运行一个本地服务器来解析一个xml文件,该文件使用第三方的DTD。我的本地服务器运行在Tls11或Tls12上,而第三方DTD(url)只能通过Ssl或Tls10进行通信。所以它无法握手。
我的解决方案很简单,只需添加以下行作为临时修复:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;
这看起来和我遇到的问题一样,与此链接相同:表单身份验证和XmlDocument.Load
使用表单身份验证和Https登录后,我预计不需要其他身份验证。但是,new XmlDocument().Load()会再次加载登录页。由于这个页面是html,它抛出了一个错误xml格式的异常。