我们的Web应用程序有很多ajax调用,而且所有内容都是https请求(我们的IT团队要求),是的,我们已经打开了标题以允许跨域。但问题是我们在内部为所有应用程序使用了自己的自定义证书,所以当我们调用ajax时基本上会出错:
无法加载资源:net :: ERR_INSECURE_RESPONSE
如果我在浏览器中打开URL并接受证书,则ajax调用正常。所以我的问题是,有没有办法通过Javascript处理这个?或者添加可信证书会解决此问题?即使在我们添加可信证书之后,我还会在ajax中遇到任何问题吗?
注意:我们正在Chrome浏览器中测试所有这些
答案 0 :(得分:23)
是的,将证书添加到用户的可信证书列表中可以解决您的问题。只要您的服务器正确设置为服务器CORS(并且看起来就像是接受证书后的成功),证书是您唯一的问题。
HTTPS提供两个安全优势:
bob.com
交谈时,她知道它是谁她知道的服务器是bob.com
,而不是冒名顶替者)第一个好处是自动的。它由加密协议保证,不能被剥离(除非通常非常快速地修复安全漏洞的非常复杂的攻击)。
第二个好处不仅仅是技术上的好处:它是信任的问题。服务器使用证书将其公钥(授予第一个安全组件)与其自己的标识链接起来。这些公钥证书由称为证书颁发机构(CA)的用户信任机构签署。
当您尝试连接到bob.com
时,该网站会为您提供执行安全通信的公钥。你怀疑并说,"当然,这张公钥可以让我安全地与你交谈,但我怎么知道你真的 bob.com
?"然后,服务器会为您提供 CA签名证书,其中包含:
我们,VeriSign证书颁发机构,在我们的调查中得到广泛信任,特此证明以下公钥真正属于
bob.com
:公钥:
ZGdlZGhydGhyaHJ0eWp5cmo...
可验证签名,
VeriSign公司
当且仅当他们已经可靠地验证公钥确实属于域名时,才有许多主要的证书颁发机构(通过操作系统和浏览器)广泛信任签发证书。由于您的操作系统已经信任这些签名,因此我们可以在不进行任何确认的情况下使用它们。
使用自签名证书时,没有受信任的CA验证您的证书确实属于您的域名。任何人都可以制作一份文件说:
嘿,伙计,这绝对是
bob.com
的公钥:公钥:
WGdoZmpodHlqa2p1aXl1eWk...
请相信我们,写这封信的人,好吗?我们确定这是关键所在。写这篇文章的人是那些经营
bob.com
的人。我们保证。签名,
写这篇文章的人
它没有受信任的签名。用户必须决定是否希望接受公钥真正属于bob.com
的证书认证。
有意义地做出这个决定是一个困难的过程 - 您需要检查证书并在某处找到公钥的预先存在的可信记录(或联系站点管理员或技术支持代表)。实际上,您需要信任来自某处的证书,因为它不是来自主要证书颁发机构的可信签名。
允许JavaScript自动确定信任是没有意义的。重点是用户必须决定证书是否值得信任,然后对系统的证书存储进行适当的修改。
这个可能假设为Ajax请求做了,但它不会很漂亮。您需要向用户显示一个浏览器UI屏幕,询问用户是否希望信任脚本尝试访问的任何域的自签名证书。除了对浏览体验非常具有破坏性之外,这可能会让人感到困惑:如果我在example.com
上,并且突然(由于我不知道的脚本的行为)我&# 39; m要求信任bob.com
的证书,我可能完全基于我对example.com
的信任而接受它。
将证书添加到您的系统'可信证书列表,或由您的系统已信任的CA签名。
答案 1 :(得分:2)
如果所有AJAX调用都在同一个域中进行,那么添加可信证书应该足够了,如果他们不在同一个域中,使用JSONP通过AJAX获取数据你将无法获得错误。
如果您想了解JSONP,可以使用以下链接:http://www.sitepoint.com/jsonp-examples/