原系统分为服务器和硬件设备,服务器由多个微服务组成对外使用 envoy 暴露一个 http 接口,服务器是一个实现了接口的黑盒后文将其称为 server。硬件设备不关心服务器内部如何部署甚至它不关心服务器,它只关心有一个黑盒实现了系统接口,它使用 http 协议请求这些接口。后文将硬件设备称为 client。
目前的需求是想要对 client <=> server 的通信加入更高的安全保障同时不影响原有系统的运行和部署。我建议的方案是在 server 端和 client 端各部署一个中转程序,后文分别称为 safeServer 和 safeClient,其工作原理如下:
- safeClient 和 client 部署在一起并监听一个本地端口例如监听 127.0.0.1:12345
- client 不在连接服务器而是连接 safeClient 监听的端口(safeClient 监听在 127.0.0.1 所以 client 和 safeClient 之间的数据传输不会被网路黑客拦截)
- safeClient 将接收到的 tcp 数据,加密后传输给 safeServer
- safeServer 将数据解密后传输给原本的 server 黑盒,并将 server 发送的数据加密后传输给 safeClient
- safeClient 将接收到的 SafeServer 加密数据解密后传递给 client
基本上就是使用 safeServer 和 safeClient 在原本的 sever client 之间创建了一个安全隧道,如此 client 和 server 不需要做出任何修改便可以适配到安全系统。同时 安全系统的部署和 原本系统的部署也可以互不相关,各自部署和开发。