V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhuifeng1017
V2EX  ›  问与答

迫于个保法,需要对 api 数据加密。想开发一套加密网关,有什么好的轮子推荐吗?

  •  
  •   zhuifeng1017 · 2021-11-16 08:00:38 +08:00 · 3554 次点击
    这是一个创建于 863 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前定的加密规则是: 数据 body 整体用 AES 加密, 数据摘要用 RSA 签名。
    实在不想自己造轮子,跪求各位大佬推荐下好用的框架或现成组件
    第 1 条附言  ·  2021-11-16 08:44:25 +08:00
    补充一下:API 已经是 https 传输了,只是数据内容是隐私数据,还需要自行做加密处理。开发环境 ava 或 Golang 都可
    25 条回复    2021-11-16 16:21:34 +08:00
    iBugOne
        1
    iBugOne  
       2021-11-16 08:05:46 +08:00 via Android
    TLS
    eason1874
        2
    eason1874  
       2021-11-16 08:08:43 +08:00
    这样没办法给建议

    应该说清楚客户端和服务端的开发语言和软件环境
    swulling
        3
    swulling  
       2021-11-16 08:38:32 +08:00 via iPhone
    https 这个是满足需求的
    whwlsfb
        4
    whwlsfb  
       2021-11-16 08:46:26 +08:00 via Android
    防爬虫的话用什么加密算法也只是加长破解时间,建议从访问频率和客户端特征入手,防中间人的话 HTTPS 足够了
    justrand
        5
    justrand  
       2021-11-16 08:54:13 +08:00
    不是很理解已经 TLS 了还要加密处理是出于什么考虑?
    timethinker
        6
    timethinker  
       2021-11-16 09:06:38 +08:00
    我也没太明白,只要你的终端能解密,那加密除了防止中间人还有什么其他的意义吗?还是说加密后的数据在终端是无法解密的?
    cominghome
        7
    cominghome  
       2021-11-16 09:12:21 +08:00
    @justrand
    @qwe520liao

    终端通过 js 解密,开启后访问 api 拿回来的 response body 是编码 /加密后的,我司网关有类似的功能。可以过滤掉很多脚本 boy
    datoujiejie221
        8
    datoujiejie221  
       2021-11-16 09:16:20 +08:00
    实现起来也很简单,golang 的话 gin 写个 middleware 也很快,java 拦截器里实现也快
    研究过客户端的逆向,现在除了 flutter 不好逆向外,其他很快就可以逆向出密钥了,就像 4 楼所说,加密只是增加破解时间。
    timethinker
        9
    timethinker  
       2021-11-16 09:20:04 +08:00
    我记得三级等保有一条是要对入库的敏感数据进行加密,目的是为了防止被拖库以后泄漏关键数据,毕竟应用和数据库一般不在一台服务器上,同时被攻破的可能性要小得多。

    不过前端加密如果不是为了防止中间人的话,那我也只能是往增加难度或者过滤掉一部分自动化探测这方面去想了,属于应用层级别的要求,不过话说回来,与其增加的复杂度相比,带来的收益微乎其微吧。
    swulling
        10
    swulling  
       2021-11-16 09:21:04 +08:00 via iPhone
    https 符合个保法要求,只要你后台数据存储加密,最好权限和访问控制。

    没必要在 api 层面进行数据加密。
    zhuifeng1017
        11
    zhuifeng1017  
    OP
       2021-11-16 09:46:39 +08:00
    没有爬虫的考虑。针对 B 端业务的 API, 客户会上传 AES 密码和 RSA 公钥。主要目的就是 API 取到的数据是加密的,需要客户拿自己的 AES 密码解密
    wolfie
        12
    wolfie  
       2021-11-16 10:07:58 +08:00
    将整个 body AES 加密,使用表单提交。form_key:AES(json)

    Java 后端
    Filter 解密,
    创建一个 HttpServletRequestWrapper 实现。重写 getContentType 、getHeader 、getHeaders 、getInputStream 。把 Content-Type 修改为 application/json
    weiwenhao
        13
    weiwenhao  
       2021-11-16 10:28:17 +08:00
    密码都已经通过 https 传输了,为啥还要加密?
    ch2
        14
    ch2  
       2021-11-16 10:36:09 +08:00
    直接 RSA 省事
    cxe2v
        15
    cxe2v  
       2021-11-16 10:36:13 +08:00
    看起来是一个提供第三方服务的 API ,每个接入你 API 的客户都有自己的一套密钥,通过这个密钥给每个客户单独加密,这样可以防止一个客户伪造请求获取另外客户的信息,类似于各大平台的 Open API
    icyalala
        16
    icyalala  
       2021-11-16 10:42:02 +08:00
    数据内容是隐私,有 SSL 就没必要再加密吧?
    是不是被抓到敏感字段不允许传输的? 那样被发现的话,就会说是是通过技术对抗。
    jones2000
        17
    jones2000  
       2021-11-16 12:20:40 +08:00
    个保法跟加密有什么关系, 不明白。
    skinny
        18
    skinny  
       2021-11-16 12:52:51 +08:00
    你肯定是理解错了要求……
    zhuifeng1017
        19
    zhuifeng1017  
    OP
       2021-11-16 13:42:11 +08:00
    简单点说吧,客户传输数据中包含手机号, 姓名等个人敏感信息。除了 https 之外,还需要和客户协商敏感信息的加密算法。就想做个通用一点的加解密网关 🐶
    zhuifeng1017
        20
    zhuifeng1017  
    OP
       2021-11-16 13:43:15 +08:00
    @cxe2v 说的很对,很这个需求类似
    powerkai
        21
    powerkai  
       2021-11-16 13:54:52 +08:00
    @cxe2v 我之前的项目对接的第三方支付是这样处理的。
    abeholder
        22
    abeholder  
       2021-11-16 14:15:07 +08:00
    我们之前也想找来着 ,后来基于 SpringCloud Gateway 做了一套通用的 ,用的国密的对称和非对称配合来做的,其实和 https 原理差不多了
    james2013
        23
    james2013  
       2021-11-16 14:16:24 +08:00
    java Spring boot 中实现这个需求短时间内就能实现
    首先在网关服务中自定义 GlobalFilter 实现类,先使用 hutool 的 SecureUtil.aes 进行解密,再验证签名,签名通过后,再包装成 1 个请求转发给对应的服务
    可参考:https://github.com/ciweigg2/blog/blob/8f2487dbcaa1e60b7df742e4e253adcfeb1020bf/source/_posts/%E3%80%90SpringCloud%E5%AD%A6%E4%B9%A0%E3%80%91Spring%20Cloud%20Gateway%E4%BF%AE%E6%94%B9%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0%E5%80%BC(Greenwich%E7%89%88).md
    daliu
        24
    daliu  
       2021-11-16 16:18:24 +08:00
    nginx 的 njs,最新版本支持 WebCrypto API.可以直接撸 rsa
    zhuifeng1017
        25
    zhuifeng1017  
    OP
       2021-11-16 16:21:34 +08:00
    @james2013 感谢大佬指教, 简单实用赞👍
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2685 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:45 · PVG 23:45 · LAX 08:45 · JFK 11:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.