V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dumbbell5kg
V2EX  ›  程序员

Springboot 项目,请教一个 HTTPS 与 AES 的问题

  •  
  •   dumbbell5kg · 164 天前 · 2002 次点击
    这是一个创建于 164 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 我现在有两个 Springboot 项目,一个客户端项目 C ,一个服务端项目 S
    • 在 S 提供的是 HTTPS 接口的情况下,项目 C 使用 RestTemplate 发请求,此时还需要用加密算法(比如 AES256 )将报文加密后通过 RestTemplate 发送吗?
    15 条回复    2024-07-16 14:53:45 +08:00
    sagaxu
        1
    sagaxu  
       164 天前   ❤️ 1
    HTTPS 防的是接触不到两端机器的中间人的攻击,防不了本机有人做手脚。
    Java 写的项目,如果不做防护,反编译后一目了然,能接触到两端就能破解。
    这两个加密方法功能上有点儿重叠,摸不到机器都没辙,摸到机器都很好破解。
    peanut0105
        2
    peanut0105  
       164 天前
    问题的关键还是你要防止哪种攻击,另外就是如果你要用 AES 的话你 AES 的密钥要怎么交换呢?
    cJ8SxGOWRH0LSelC
        3
    cJ8SxGOWRH0LSelC  
       164 天前
    同 1 楼, 如果客户端 C 是 java 写的, 那再加密一次意义不大, 反编译随便看代码。
    seers
        4
    seers  
       164 天前 via iPhone
    当然要做,每多一道防护都能抵挡掉不少攻击,首先 ssl 证书抓包是一道,然后有 aes 攻击者反编译又是一道,或者逻辑放 native 然后 jni 调用再混淆 so ,这也是目前很多大厂 app 做法
    orangie
        5
    orangie  
       164 天前
    客户端考虑用 graalvm 编译成机器码试试,大大增加反编译难度
    0xsui
        6
    0xsui  
       164 天前 via Android
    通过 HTTPS 接口,发送签名的数据,服务端校验签名,具体可以参考钉钉机器人的接口调用方式
    alex8
        7
    alex8  
       164 天前 via iPhone
    典型的前端加密需求,如果中间用 cdn 加速了,又不想让 cdn 看到数据的话就要加密了。用非对称加密
    rekulas
        8
    rekulas  
       164 天前
    @alex8 https 已经非对称一次了,防中间 cdn 用对称加密就行了吧, 2 层非对称有什么用
    alex8
        9
    alex8  
       164 天前
    @rekulas CDN 就是中间人
    ask GTP '经过 CDN 加速的 https 网站,post 的数据还需要加密么'
    如果需要加密,请问加密用的密钥你怎么分发管理?
    lovelylain
        10
    lovelylain  
       163 天前 via Android
    是否需要再加密看安全要求,加密了更安全,但是客户端抓包不方便,会给问题定位带来不便。加密方式可以考虑客户端内置 rsa 公钥,随机生成 aes 密钥,rsa 加密 aes 密钥,aes 加密实际内容。
    rekulas
        11
    rekulas  
       163 天前
    @alex8 秘钥当然是开发编译的时候就交换好了, cdn 又拿不到,你在 cdn 上用非对称,那不相当于把秘钥拱手给 cdn,欺骗自己么
    Goooooos
        12
    Goooooos  
       163 天前
    我一般只用 md5 等做个摘要验证参数的完整性
    zscself
        13
    zscself  
       163 天前
    看你需求了吧。
    1. 防中间人: https 就够了。客户端能顺利访问 https 接口获取和发送数据,说明 https 协议的一整套流程客户端和服务端是可以完整走下来的。https 是非对称加密算法加密对称加密算法的密钥,现在的 https 都是 TLS 1.1 往上了吧,大部分都是 TLS 1.2 了。再往深了说,TLS 是在 TCP 之上,HTTP 之下,相当于给 HTTP 套了一层加密的壳,非对称加密只在握手阶段使用,后面传输数据都是对称加密( RC4 ,AES 之类的流式加密)。
    2. 防客户拦截查看数据:对 Java 不熟,没有发言权。不过我觉得程序在客户端侧,本身的运行环境就是不可信/不可控环境,防御措施或者说你愿意付出的防御成本和你数据的重要性成正比。往极端点说,数据总归是要解密到内存中的,防是防不住的。
    zscself
        14
    zscself  
       163 天前
    @zscself “防中间人”就是说,防止服务端和客户端之间的数据交换被别有用心的第三方窃听和篡改。客户自己想要窃听和篡改在这个语境下不算“中间人”,放在( 2.)中讨论
    Chigusa
        15
    Chigusa  
       163 天前
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1025 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 20:27 · PVG 04:27 · LAX 12:27 · JFK 15:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.