Ghostunnel:给后端服务加一层 TLS 代理
文章目录
- Ghostunnel:给后端服务加一层 TLS 代理
- 1、 两种工作模式
- 2、 核心能力
- 3、 怎么装
- 4、 基本用法
- 5、 适合什么场景
Ghostunnel:给后端服务加一层 TLS 代理
ghostunnel 在 GitHub 上有 2,172 Star。
这是一个用 Go 写的 TLS 代理工具,专门解决一个问题:后端服务本身不支持 TLS,但你又需要加密通信。它在前面挡一层,帮你处理 TLS 握手和证书验证,后端只管收发明文流量就行。
1、 两种工作模式
Ghostunnel 支持两种模式,server 模式和 client 模式。
Server 模式:监听 TLS 连接,把请求转发给后端的非加密服务。相当于在后端前面放了一个 TLS 终结点。
Client 模式:接收本地的非加密连接,包上一层 TLS,再转发给远端的加密服务。相当于给客户端套了一个 TLS 出口。
两种模式可以串联,组成完整的加密隧道。客户端发明文,client 端加密,走网络到 server 端解密,再发给后端。全程只有中间这段网络是加密的。
2、 核心能力
双向 TLS 认证。不只是服务端出示证书,客户端也必须拿出有效证书才能连上来。可以按证书的 CN、OU、DNS、URI 等字段做细粒度的访问控制,还支持接入 Open Policy Agent 做策略引擎。
证书热加载。发个 SIGHUP 信号就能重新加载证书,不用重启进程。也可以设置定时轮换,配合短生命周期证书使用。
证书来源灵活。PEM、PKCS#12 文件、ACME 自动申请、硬件安全模块、macOS 钥匙串、Windows 证书存储、SPIFFE Workload API,都支持。
默认安全。监听地址和目标地址默认只绑定 localhost 和 UNIX socket,不会意外暴露到外网。Linux 上还默认开启 Landlock 沙箱限制进程权限。
内置监控。有个 status 端口,可以暴露 JSON 和 Prometheus 格式的指标数据,也能开 pprof 做性能分析。
3、 怎么装
可以从 GitHub Releases 下载二进制,也可以用 Docker 镜像。Docker 有三个版本:Alpine、Debian 和 Distroless。
自己编译的话,用 mage 构建系统:
go tool mage go:build跑测试:
go tool mage test:all4、 基本用法
Server 模式示例,监听 8443 端口,转发给本地 8080 的后端:
ghostunnel server\--listenlocalhost:8443\--targetlocalhost:8080\--keystoreserver.p12\--cacertca.pem\--allow-cn clientClient 模式示例,监听本地 8080,转发给远端 8443 的 TLS 服务:
ghostunnel client\--listenlocalhost:8080\--targetlocalhost:8443\--keystoreclient.p12\--cacertca.pem5、 适合什么场景
后端是老服务,加不了 TLS 支持,但又需要在公网上跑加密通信。
微服务之间需要双向认证,但不想每个服务自己管证书。
需要频繁轮换证书,用 SPIFFE 或短生命周期证书的环境。
跑在 Kubernetes 里,想用 Landlock 限制容器权限,同时对外提供 TLS 端点。
支持 Linux、macOS、Windows,也跑在 FreeBSD、OpenBSD、NetBSD 上。
lock 限制容器权限,同时对外提供 TLS 端点。
支持 Linux、macOS、Windows,也跑在 FreeBSD、OpenBSD、NetBSD 上。