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

时间:2013-12-31 20:06:47

标签: javascript jquery ajax ssl https

以下是该方案: 有两个服务器,A和B,它们位于不同的域中。 当用户访问服务器A的网页时,它使用服务器A的证书加密网站,并通过HTTPS将加密的网站返回给用户。 然后,用户输入了一些数据。

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

我的问题是: JQuery的ajax可以通过https发送服务器A的证书,所以我可以在服务器B上查看它吗?

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

任何帮助都会非常感激。谢谢!

2 个答案:

答案 0 :(得分:1)

  

现在,我想通过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即可完成此操作,它可以保护您免受其他网站热链接的影响,但不会阻止任何人直接从服务器B获取资源 Web浏览器的上下文。

答案 1 :(得分:0)

如果您想要从服务器A发送证书以及ajax发布/获取到服务器B进行验证,我不会打扰。作为客户端的Javascript容易被篡改,因此您绝对不希望将CRT或CSR加载到帖子数据中。

我建议做的是检查帖子来自的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和链文件。

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