客户提供的 API 接口在本地,但业务系统在阿里云,如何建立一个安全的通讯机制?

2020-08-24 13:04:33 +08:00
 turan12

网络架构类似这样:

客户生产服务器( LAN,本地 API 接口在这里)-- 代理服务器( LAN/WAN )-- 阿里云 ECS (线上业务系统)

因为客户那边条件限制,没条件拉专线,代理服务器暂时只能通过一条 1Gbps 的电信宽带连接公网,当然动态 IP 动态域名这些都不是问题,难点的是如何在本地服务器和阿里云服务器之间建立一个安全的通讯机制。

客户提供的 API 接口是通过 http 传输的 json 格式数据,能想到最简单的方法是用 nginx 做 proxy,但似乎安全性上还是有问题。求助 v 站的大神提个思路,感谢!

4091 次点击
所在节点    程序员
37 条回复
ddefewfewf
2020-08-24 13:26:47 +08:00
内容加密
namaketa
2020-08-24 13:28:52 +08:00
你说的安全是指

1. 链路可靠,不被 isp 劫持和窃听 :加一层 https,不放心去 api 侧把 payload 再用 tls 加密一次。

2. 暴露在公网的 api 防止未授权访问:根据时间戳和自签发的私钥生成 token,可以参考 jwt
opengps
2020-08-24 13:31:24 +08:00
https+白名单 ip(动态维护 ip 变更有点麻烦)
daniellu
2020-08-24 13:35:21 +08:00
可以考虑阿里的 VPN 服务,即内网 API 接口通过 VPN 连接到 ECS 所在的业务系统,对于 ECS 业务系统和 API 来说,就是内部网络访问,简单方便。
不过 VPN 服务要花钱~
zxyroy
2020-08-24 13:38:31 +08:00
其实可以反其道而行,能不能在客户那里部署一个 feeder,定时访问服务器上的 api,提供数据,这样就可以 https,也可以加密,还能避免动态 ip 更新不及时
dyllen
2020-08-24 13:45:13 +08:00
https+数据签名不够吗?各种支付的对接都是这样的,应该足够了吧。
tomczhen
2020-08-24 13:53:12 +08:00
建立可信信道,通过 VPN 接入即可,不需要对应用改造。
turan12
2020-08-24 14:08:08 +08:00
@namaketa #2
@opengps #3
这个是我正在考虑的方案之一
turan12
2020-08-24 14:09:00 +08:00
@zxyroy #5 系统涉及到一些支付状态之类的实时性较强的数据,如果是这样子轮询的话可能会有延迟。
turan12
2020-08-24 14:13:18 +08:00
@daniellu #4 这个是个新的思路,正在研究
shuigui
2020-08-24 14:41:18 +08:00
简单说就是需要一个安全网关,可以找一下这个 [IPSecVPN 详解(深入浅出简单易懂)]
实际上自己搭建也不麻烦,strongswan 开源的
unco020511
2020-08-24 17:08:17 +08:00
https 足够
wizardoz
2020-08-24 17:15:29 +08:00
自己在云服务器上跑一个 OpenVPN,本地主机作为客户端连入 VPN 。解决了内网穿透和加密两个问题。
turan12
2020-08-24 17:24:51 +08:00
根据楼上各位大神意见,我总结了两种方案,一种是 https+token,另一种是 vpn 。我先搭环境分别测试一下,过两天来更新这个帖子。
x66
2020-08-24 17:31:24 +08:00
https+IP 白名单就够了吧,服务器域名一般很少变化
x66
2020-08-24 17:31:39 +08:00
@x66 服务器 IP 一般很少变化
Foralrec
2020-08-24 17:49:51 +08:00
通常是拨 VPN,正向还是反向都是这种方案居多
专线成本比较高,打通关系也比较俊男
Foralrec
2020-08-24 17:51:19 +08:00
sed 's/俊男 /困难 /'
Osk
2020-08-24 18:39:38 +08:00
用 autossh 建立 tcp tunnel 试试,效果类似 vpn,但更简单。
用证书登陆,安全性也足够,需要注意的是: 不支持 tcp,端口要固定,autossh 参数需要适当调整 (超时)。

以前没有 frp 等工具时我就是在家里网关上用 autossh 作内网穿透的,挺稳的。
Osk
2020-08-24 18:40:50 +08:00
@Osk 不支持 tcp --> 不支持 udp

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

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

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

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

© 2021 V2EX