如何在不使用 HTTPS 的情况下加密 HTTP 数据包传输

2019-10-17 22:01:06 +08:00
 zhangchaoquan

要求在不安装额外的客户端的情况下浏览器正常访问

3472 次点击
所在节点    HTTP
11 条回复
greatdancing
2019-10-17 22:05:05 +08:00
上一次有人问
V 友给的答案是难道你要重新发明 HTTPS?
zhangchaoquan
2019-10-17 22:10:37 +08:00
neteroster
2019-10-17 22:59:53 +08:00
这不就是重新发明 HTTPS :(
whileFalse
2019-10-17 23:11:47 +08:00
上次有人问过。答案是不可能。
因为不管做什么你都要用 js 去解密。
然而第一个 js 通过 http 传输,会被中间人替换。

除非能保证第一个 js 的真实性。
https 的本质也只是在操作系统预置了保证真实的证书而已。
yyfearth
2019-10-18 05:49:54 +08:00
能不能要看你的目的是什么 HTTPS 主要有两个功能 一个是加密流量 一个是证书校验

如果你的目的仅仅是像 HTTPS 一样加密流量 让中间的网络设备没办法“直接没有针对性”的读取和识别 (目的你懂的)
这样你可以加密 Ajax API Call 的内容 然后用 JS 解密后在使用

但是如果你的目的是防止篡改(就是 HTTPS 的证书) 那就没办法
除非你现在客户端上干点什么 比如安装一个浏览器插件 或者在本地开个服务器什么的 做校验(相当于 HTTPS 本地的首信 CA )
否则就像楼上说的一样 中间人可以“有针对性的修改”你的 JS 读取以及替换你解码用的部分
那么所有加密流量就可以被读取识别和替换了

总结一下 关键就是看你的需求 要不要防止有针对性的攻击 在此基础上要不要防止篡改
yyfearth
2019-10-18 05:55:35 +08:00
@whileFalse 如果可以用浏览器扩展的话 倒是可以实现
把解密的密钥和算法以及证书放在扩展里面 这样就没办法篡改
然后用 http 传输加密数据就比较安全了
whileFalse
2019-10-18 08:38:35 +08:00
@yyfearth #6 对。核心就是有个初始可信组件。
zhangchaoquan
2019-10-18 09:41:14 +08:00
@yyfearth 不是防篡改,就是让中间件无法识别。
yyfearth
2019-10-18 11:41:02 +08:00
@zhangchaoquan 那就很简单了 这就和 HTTPS 没啥关系了
你只要把所有 API 的数据加密 然后浏览器里面解密再用就是

如果是多页 app HTML 本身也要加密 就直接输出一段加密后的 JS 然后解密 HTML 然后 body 上面 append 就可以了
反正你也不考虑 JS 被篡改的情况
Unknowncheats
2019-10-18 13:02:32 +08:00
又看見你的帖子。給你個方法:你穿越回去把發明 https 的人殺了
zhangchaoquan
2019-10-18 14:16:49 +08:00
@Unknowncheats 感谢,这就去

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/610453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX