我有一个仅针对 HTTPS 配置的 ASP.NET MVC 站点。
此站点上的一个页面需要显示来自远程、未启用 SSL 的网站的内容。
我无法通过 ajax 加载内容,因为这意味着非安全内容与我的安全内容混合在一起,浏览器将指示该站点包含混合内容。
因此,我认为我可以使用 Web API 使用 HttpClient
类在服务器端加载内容,然后通过 AJAX 将其传送到客户端:
public async Task<string> GetNewsAsync()
{
var newsFeed = WebConfig.GetAppSetting("NewsRssAddress");
var feedContent = "";
try
{
using (var client = new HttpClient())
using (var response = await client.GetAsync(newsFeed))
using (var content = response.Content)
{
feedContent = await content.ReadAsStringAsync();
}
}
catch(Exception ex)
{
Mailer.SendError(ex);
throw;
}
return feedContent;
}
但是,这仍然会抛出 WebException
:
System.Net.WebException:基础连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。
不要这样做!
输入此内容后,我开始认为我正在尝试做的只是错误做法和错误,并且没有办法将不安全的内容加载到安全站点中,有点真的很有道理,我的意思是,内容可以是任何东西!
碰巧,我尝试从中加载的网站是我公司的另一个网站,只是另一个网站上没有 SSL。
据我所知,这些是我的选择:
- 不要加载内容。期间。
- 尝试为其他网站获取 SSL 证书。
- 处理混合内容警告(我不会这样做!)
想法?
最佳答案
我认为您在其中混淆了一些概念。在您的网站上实现 SSL 就是为了向访问者保证您就是您所说的那个人,并且他们与您 的通信在传输过程中已加密。 SSL 实现不保证站点内容的完整性;它可能是完全恶意的,因为您有一个 SQL 注入(inject)漏洞,并且您在您的站点上打开匿名 FTP 以进行引导。它充满了恶意软件和山羊图片,但 SSL 仍然完全按照它的意思 - 通过连接安全地提供服务!
页面内容的填充方式与您通过 HTTPS 提供服务的方式无关。您绝对可以在服务器端从通过 HTTPS 请求的资源发出 HTTP 请求。在这里试一试:https://asafaweb.com
你是否应该是另一个问题;您必须假设外部资源请求可能会被拦截(或者站点可能会独立于传输层而受到损害)并且您希望在重新显示内容之前应用适当的白名单和内容验证。
关于c# - 通过非安全通道加载内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26157648/