gpt4 book ai didi

javascript - 使用 JavaScript 加密模块代替 SSL/HTTPS

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:19:28 26 4
gpt4 key购买 nike

使用一些 JS 加密库代替 SSL 进行安全通信是否值得?我问这个是因为我想保护我在 Google App Engine 上构建的应用程序,它不允许您将自己的域用于 SSL 请求。与 GAE 安全通信的好方法是什么?谢谢。

最佳答案

[注意:请参阅下面的更正]

可以使用自定义域与 google app engine 上经过身份验证的服务器进行安全通信,但这很麻烦。正如其他一些答案所表明的那样,您必须非常小心如何实现加密以防止中间人攻击。

这是 python 的基本说明,但您可以针对 java 进行修改。预计至少要花一两天时间来启动和运行类似的东西。

先决条件:

  • 用于服务器的 python RSA 和 AES 库。 pyCrypto在 GAE 上运行良好。
  • 要在客户端上运行的 javascript RSA 和 AES 库。我用了stanford's RSA librarycrypto-js对于 AES。我不记得为什么我不只使用一个库。

说明:

  • 第 1 步:离线,创建 RSA 公钥和私钥对。这里是pyCrypto说明。

  • 第 2 步:将生成的 RSA 公钥和私钥保存在 python 文件中,确保私钥不可公开访问。

  • 第 3 步:在服务器上,创建一个生成 javascript 文件的请求。 javascript 文件应该只将公钥传输到客户端。例如,它只会返回一个文件:

    var public_key="[your public rsa key here]"

  • 第 4 步:在您的 app.yaml 中文件,确保生成的 javascript 文件仅通过 SSL 提供(即设置 secure: always )。参见 instructions here .

  • 第 5 步:在客户端上,使用 ssl 加载 javascript 文件。但是,不要使用您的自定义域,而是使用 appspot 域。例如,将此添加到您的 html 文件中:

<script src="https://example.appspot.com/publicKey.js"></script>

客户端现在将拥有经过身份验证的 RSA 公钥,以防止中间人攻击。 注意:浏览器通常禁止访问其他域以防止XSS , 但存在允许您加载 javascript 文件的漏洞。

  • 第 6 步:在客户端上,生成随机私钥。使用javascript RSA library和我们在第 4 步中获得的公钥来加密随机私钥。将加密后的私钥发送给服务器。

  • 第七步:在服务器端,使用RSA私钥解密客户端生成的随 secret 钥。

    此时,服务端和客户端都有相同的私钥。更好的是,因为原始公钥是通过 SSL 传输的,所以我们可以验证服务器确实是我们所相信的那个人(即没有中间人)。

  • 第 8 步:现在服务器和客户端可以使用随机生成的私钥和各自的 AES 库来加密和解密他们想要的任何数据。

-- 编辑:更正 --

Bruno 下面的评论是 100% 正确的,上面的步骤是不安全的。尽管上述步骤确实可以在客户端和服务器之间设置经过身份验证的 session ,但用户真正知道它已通过身份验证的唯一方法是检查代码以确保使用 https 加载公钥。中间人可以提供初始 html 页面修改 <script src="https://...指向其他东西的代码。

相反,看看 wwwizer.com .

关于javascript - 使用 JavaScript 加密模块代替 SSL/HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com