我有一个ASP.NET MVC站点,它仅配置为HTTPS。
此网站上的其中一个页面需要显示来自远程非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: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
不要这样做!
输入后,我开始认为我要做的只是不良做法和错误,并且无法将非安全内容加载到安全网站中,有点我的意思是说,内容可以是任何内容!
实际上,我尝试加载的网站是我公司的另一个网站,只是在其他网站上没有SSL。
据我所知,这些是我的选择:
思想?
答案 0 :(得分:2)
我认为你在那里混合概念。您网站上的SSL实施旨在向访问者提供您所说的自己以及与您之间的通信已在传输过程中加密的保证。 SSL实施不保证网站内容的完整性;它可能是完全恶意的,因为您有一个SQL注入漏洞,并且您在站点上打开了匿名FTP以进行引导。它充满了恶意软件和山羊图片,但SSL仍然完全符合它的意图 - 通过连接安全地提供服务!
如何填充页面上的内容与通过HTTPS提供服务的方式无关。您绝对可以通过HTTPS请求的资源在服务器端上发出HTTP请求。在这里试一试:https://asafaweb.com
你 是否是另一个问题;您必须假设外部资源请求可能被截获(或者网站可能会独立于传输层受到攻击),并且您仍然希望在重新显示之前应用适当的白名单和内容验证。
答案 1 :(得分:0)
您可以为其他网站创建“ssl”代理。如何执行此操作请在Creating a Reverse Proxy with URL Rewrite for IIS
等地址http://yoursite.com/othersite/something上进行说明此技术允许您对其他站点使用与主站点相同的SSL以及相同的原点。
但它“很重”,因为所有请求都将通过您的服务器