【问题标题】:Can JQuery's ajax send client certificate over https?JQuery 的 ajax 可以通过 https 发送客户端证书吗?
【发布时间】:2014-01-18 16:56:13
【问题描述】:

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

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

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

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

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: javascript jquery ajax ssl https


    【解决方案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 浏览器的上下文。

    【讨论】:

    • 我完全同意你的看法。如果不能修改服务器A,就无法保证安全。
    【解决方案2】:

    如果您想从服务器 A 发送证书以及 ajax post/get 到服务器 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-26
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2019-09-22
      • 2017-01-02
      相关资源
      最近更新 更多