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 上。