JQuery 的 ajax 可以通过 https 发送客户端证书吗?



以下是场景:有两个服务器,A和B,它们在不同的域中。当用户访问服务器a上的网页时,它使用服务器a的证书对网站进行加密,并通过HTTPS将加密的网站返回给用户。然后,用户输入一些数据。

现在,我想通过HTTPS对服务器B(在其他域)进行ajax调用,以提交数据。在服务器B上,我需要检查ajax调用是否真的来自服务器A。因此,我想检查服务器A的证书(客户端证书)以验证调用。

我的问题是:JQuery的ajax可以通过https发送服务器A的证书吗?这样我就可以在服务器B上检查它了?

备注:由于某些原因,响应无法返回到服务器A。它必须直接返回到服务器B。

如有任何帮助,我们将不胜感激。谢谢

现在,我想通过HTTPS对服务器B(在其他域)进行ajax调用以提交数据。在服务器B,我需要检查ajax调用是否真的来自服务器A。因此,我想检查服务器A的证书(客户端证书)来验证调用。

你真的不能这么做,因为它不是这样工作的。因为JavaScript运行在客户端的浏览器中,而不是服务器上,所以请求不是来自服务器A,而是直接来自客户端的计算机。

因此,您需要验证请求是否来自可以访问服务器A上相关资源的人员。

  1. 一种方法是将响应发送到服务器A,验证它,然后将它发送到服务器B,但您已经说过不能这样做了。

  2. 另一种方法是在服务器A上生成一些令牌值,将其发送给客户端,并让客户端将其发送到服务器B,在那里您可以验证它

    例如,您可以有一个a和B已知的预共享机密,使用该机密在服务器a上生成当前时间的HMAC,然后在服务器B上验证HMAC并检查时间以确保其使用年限合理。有很多不同的方法可以做到这一点。

  3. 最后,您也可以简单地让服务器B只发送服务器A地址的Access-Control-Allow-Origin头。这是我能想到的在不修改服务器A的情况下做到这一点的唯一方法,它将保护您免受其他网站的热链接,但它不会阻止任何人在web浏览器的上下文之外直接访问服务器B的资源。

如果您想将证书与ajax post/get一起从服务器A发送到服务器B进行验证,我不会介意。Javascript作为客户端很容易被篡改,所以你肯定不想把CRT或CSR加载到post数据中。

我建议您检查帖子的IP,然后在服务器B上运行bash脚本,使用OpenSSL:检查服务器证书

http://fdmanana.wordpress.com/2008/07/01/getting-a-servers-certificate-with-openssl/

当然,如果有人想伪造他们的IP到服务器A的IP,你将无从知晓。

编辑:您可能需要了解以下内容:https://developer.mozilla.org/en-US/docs/How_to_check_the_security_state_of_an_XMLHTTPRequest_over_SSL

但请记住,发送证书并不能验证请求的来源,因为任何人都可以在任何时候下载你的crt和chain文件。

http://www.sslshopper.com/ssl-certificate-tools.html

最新更新