首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
httpbin - 协议调试工具
httpstatuses - 协议状态码查询
httpie - cURL-like tool for humans
Fiddler
宝塔
V2EX  ›  HTTP

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

  •  
  •   zhangchaoquan · 34 天前 · 1082 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    11 回复  |  直到 2019-10-18 14:16:49 +08:00
        1
    greatdancing   34 天前 via Android   ♥ 3
    上一次有人问
    V 友给的答案是难道你要重新发明 HTTPS?
        2
    zhangchaoquan   34 天前
        3
    neteroster   34 天前 via Android   ♥ 1
    这不就是重新发明 HTTPS :(
        4
    whileFalse   34 天前 via iPhone
    上次有人问过。答案是不可能。
    因为不管做什么你都要用 js 去解密。
    然而第一个 js 通过 http 传输,会被中间人替换。

    除非能保证第一个 js 的真实性。
    https 的本质也只是在操作系统预置了保证真实的证书而已。
        5
    yyfearth   34 天前   ♥ 1
    能不能要看你的目的是什么 HTTPS 主要有两个功能 一个是加密流量 一个是证书校验

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

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

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

    如果是多页 app HTML 本身也要加密 就直接输出一段加密后的 JS 然后解密 HTML 然后 body 上面 append 就可以了
    反正你也不考虑 JS 被篡改的情况
        10
    Unknowncheats   34 天前 via Android
    又看見你的帖子。給你個方法:你穿越回去把發明 https 的人殺了
        11
    zhangchaoquan   34 天前
    @Unknowncheats 感谢,这就去
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4173 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 30ms · UTC 09:13 · PVG 17:13 · LAX 01:13 · JFK 04:13
    ♥ Do have faith in what you're doing.