Ghostunnel:给后端服务加一层 TLS 代理

📅 2026/7/5 2:48:44 👁️ 阅读次数 📝 编程学习
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:all

4、 基本用法

Server 模式示例,监听 8443 端口,转发给本地 8080 的后端:

ghostunnel server\--listenlocalhost:8443\--targetlocalhost:8080\--keystoreserver.p12\--cacertca.pem\--allow-cn client

Client 模式示例,监听本地 8080,转发给远端 8443 的 TLS 服务:

ghostunnel client\--listenlocalhost:8080\--targetlocalhost:8443\--keystoreclient.p12\--cacertca.pem

5、 适合什么场景

后端是老服务,加不了 TLS 支持,但又需要在公网上跑加密通信。

微服务之间需要双向认证,但不想每个服务自己管证书。

需要频繁轮换证书,用 SPIFFE 或短生命周期证书的环境。

跑在 Kubernetes 里,想用 Landlock 限制容器权限,同时对外提供 TLS 端点。

支持 Linux、macOS、Windows,也跑在 FreeBSD、OpenBSD、NetBSD 上。

lock 限制容器权限,同时对外提供 TLS 端点。

支持 Linux、macOS、Windows,也跑在 FreeBSD、OpenBSD、NetBSD 上。