我们的Web应用程序中有很多ajax调用,而所有都是https请求(我们的IT团队要求),是的,我们已经打开了标头以允许跨域。但是问题是我们在我们的所有应用程序内部都使用了自己的自定义证书,因此,基本上,当我们调用ajax时我会出错:
无法加载资源:net :: ERR_INSECURE_RESPONSE
如果我在浏览器中打开URL并接受证书,则ajax调用可以正常工作。所以我的问题是,有没有办法通过Javascript处理此问题?还是添加受信任的证书可以解决此问题?另外,即使我们添加了受信任的证书,我在Ajax中是否还会再次遇到任何问题?
注意:我们正在Chrome浏览器中测试所有这些
是的,将证书添加到用户的受信任证书列表中可以解决您的问题。只要您的服务器正确设置为服务器CORS(并且似乎是正确的,基于接受证书后的成功情况),证书就是您唯一的问题。
HTTPS具有两个安全好处:
bob.com
第一个好处是自动的。它是由加密协议保证的,不能被剥夺(除非对安全漏洞进行非常复杂的攻击,这些攻击通常会很快修复)。
第二个好处严格来说并不是技术上的好处:这是 信任的问题 。服务器使用证书将其公钥(授予第一个安全组件)与自己的身份链接。这些公钥证书由用户信任的机构(称为 证书颁发机构 (CA))签名。
当您尝试连接到时bob.com,该站点会为您提供公共密钥以执行安全通信。您对此表示怀疑,并说:“当然,这个公钥将允许我安全地与您交谈,但是我怎么知道您是 真的 bob.com?” 然后,服务器会为您提供一个 CA签名的证书 ,其中包含:
我们广受信赖的VeriSign证书颁发机构在我们的调查中会做透彻的研究,特此证明以下公用密钥确实确实属于bob.com: 公钥: ZGdlZGhydGhyaHJ0eWp5cmo... 经过验证的签名, 威瑞信
我们广受信赖的VeriSign证书颁发机构在我们的调查中会做透彻的研究,特此证明以下公用密钥确实确实属于bob.com:
公钥: ZGdlZGhydGhyaHJ0eWp5cmo...
ZGdlZGhydGhyaHJ0eWp5cmo...
经过验证的签名,
威瑞信
有许多主要的证书颁发机构,当且仅当它们已经可靠地验证了公钥确实属于域名时,才能(通过操作系统和浏览器)信任他们签发签名的证书。由于您的操作系统已经信任这些签名,因此我们无需任何确认即可使用它们。
当您使用自签名证书时,没有受信任的CA会验证您的证书确实属于您的域名。任何人都可以出示以下文件:
嘿,伙计,这绝对是100%的公共密钥bob.com: 公钥: WGdoZmpodHlqa2p1aXl1eWk... 相信我们,写这篇便笺的人,好吗?我们绝对确定这是关键。写这个笔记的人是奔跑的人bob.com。我们承诺。 签, 写这个笔记的家伙
嘿,伙计,这绝对是100%的公共密钥bob.com:
公钥: WGdoZmpodHlqa2p1aXl1eWk...
WGdoZmpodHlqa2p1aXl1eWk...
相信我们,写这篇便笺的人,好吗?我们绝对确定这是关键。写这个笔记的人是奔跑的人bob.com。我们承诺。
签,
写这个笔记的家伙
它上面没有可信任的签名。用户必须决定是否希望接受公钥真正所属的证书证明bob.com。
做出有意义的决定是一个困难的过程-您需要检查证书并在某处找到公钥的预先存在的受信任记录(或与站点管理员或服务台代表联系)。实际上,您需要对证书的信任来自 某处 ,因为它不是来自主要证书颁发机构的受信任签名。
允许JavaScript自动确定信任度是没有意义的。整个要点是, 用户 必须确定证书是否可信,然后对系统的证书库进行适当的修改。
这 可以 假设性地做了Ajax请求,但它不会是漂亮。您需要向用户显示一个浏览器UI屏幕,询问用户是否要信任脚本尝试访问的任何域的自签名证书。除了对浏览体验造成极大干扰之外,这还可能造成混乱的危险:如果我正在上example.com,并且突然(由于我不知道的脚本操作),我被要求信任bob.com,我的证书可能完全基于我对的信任而接受它example.com。
example.com
将证书添加到系统的受信任证书列表中,或由系统已信任的CA对其进行签名。