跳转到内容
搜索文档

Cloudflare Tunnel

最后更新 查看 MarkdownAgent 设置

通过与 Cloudflare Tunnel 集成,您可以通过安全通道向密钥服务器发送流量,避免将密钥服务器暴露到公共 Internet。


开始之前

支持的平台

Keyless 已在 amd64arm 架构上测试。key server 二进制文件很可能可在 Go 支持的所有架构上运行。代码可能也支持其他 CPU,但这些架构尚未测试。

除在裸机上运行外,key server 还应在虚拟化或容器化环境中正常运行。需要配置对相应 TCP 端口的入站访问以及对私钥的文件系统访问(若使用文件系统存储)。

支持的操作系统

您需要受支持的操作系统(OS)来运行 Keyless。支持的操作系统包括:

  • Ubuntu 20.04 LTS (Focal)、22.04 LTS (Jammy)、24.04 LTS (Noble)
  • Debian 11 (Bullseye)、12 (Bookworm)、13 (Trixie)
  • RHEL 8、9、CentOS 8 和 CentOS Stream 9
  • Amazon Linux 2、2023

我们强烈建议您使用供应商仍在支持(仍在接收安全更新)的操作系统作为 key server,因为 key server 将访问您的私钥。


1. 在密钥服务器上安装 cloudflared

首先,在密钥服务器上安装 cloudflared

此流程因您使用命令行还是 Cloudflare 仪表板而异。

2. 创建隧道并添加路由

然后,创建 Cloudflare Tunnel。

此流程因您使用命令行还是 Cloudflare 仪表板而异。

创建隧道期间,前往 CIDR 选项卡并输入密钥服务器的私有 IP 地址。您也可以在创建隧道后添加 CIDR 路由

创建隧道后,使用 Cloudflare API 列出隧道路由,保存以下值供后续步骤使用:

  • "virtual_network_id"
  • "network"

3. 上传 Keyless SSL 证书

在配置 key server 之前,您必须先将相应的 SSL 证书上传到 Cloudflare 边缘。在 TLS 终止期间,Cloudflare 会将这些证书呈现给连接的浏览器,然后(对于非恢复会话)与指定的 key server 通信以完成握手。

仅上传您希望与 Cloudflare Keyless SSL 一起使用的 SAN 证书到 Cloudflare。所有 Keyless SSL 主机名必须处于已代理状态。

您需要为 Keyless SSL 使用的每张证书分别上传。

要使用 API 上传 Keyless 证书,发送包含 "tunnel" 对象的 POST 请求。

"tunnel": {
  "vnet_id": "<VIRTUAL_NETWORK_ID>",
  "private_ip": "<NETWORK>"
}

4. 设置并激活密钥服务器

最后,您需要在基础设施上安装 key server,填入您希望用于在 Cloudflare 边缘终止 TLS 的 SSL 密钥,并激活 key server 以便进行双向认证。

安装

这些步骤也位于 Cloudflare 软件包仓库

Debian/Ubuntu 软件包

sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/gokeyless trixie main' | sudo tee /etc/apt/sources.list.d/cloudflare.list

sudo apt-get update && sudo apt-get install gokeyless
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/gokeyless bookworm main' | sudo tee /etc/apt/sources.list.d/cloudflare.list

sudo apt-get update && sudo apt-get install gokeyless
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/gokeyless bullseye main' | sudo tee /etc/apt/sources.list.d/cloudflare.list

sudo apt-get update && sudo apt-get install gokeyless
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/gokeyless noble main' | sudo tee /etc/apt/sources.list.d/cloudflare.list

sudo apt-get update && sudo apt-get install gokeyless
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/gokeyless jammy main' | sudo tee /etc/apt/sources.list.d/cloudflare.list

sudo apt-get update && sudo apt-get install gokeyless
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/gokeyless focal main' | sudo tee /etc/apt/sources.list.d/cloudflare.list

sudo apt-get update && sudo apt-get install gokeyless

RHEL/CentOS/Amazon Linux 软件包

Gokeyless 使用 CGO 实现 PKCS#11/HSM 支持,这会产生 glibc 依赖。请使用与您的发行版匹配的仓库。

sudo dnf config-manager --add-repo https://pkg.cloudflare.com/gokeyless/rpm/gokeyless.repo
sudo dnf install gokeyless
curl -fsSl https://pkg.cloudflare.com/gokeyless/rpm/gokeyless.repo | sudo tee /etc/yum.repos.d/gokeyless.repo
sudo yum update
sudo yum install gokeyless
sudo dnf config-manager --add-repo https://pkg.cloudflare.com/gokeyless/rpm-el8/gokeyless.repo
sudo dnf install gokeyless
curl -fsSl https://pkg.cloudflare.com/gokeyless/rpm-el8/gokeyless.repo | sudo tee /etc/yum.repos.d/gokeyless.repo
sudo yum update
sudo yum install gokeyless

配置

将您的 Cloudflare 账户详细信息添加到位于 /etc/keyless/gokeyless.yaml 的配置文件:

  1. 设置 key server 的主机名,例如 keyserver.keyless.example.com。这也是您上传 keyless 证书时输入的值,是持有该证书密钥的 key server 的主机名。
  2. 设置 Zone ID(可在 Cloudflare 仪表板的 Overview(概览) 选项卡中找到)。
  3. 设置 Origin CA API key

填充密钥

将私钥安装到 /etc/keyless/keys/,并将用户和组设置为 keyless,权限为 400。密钥必须为 PEM 或 DER 格式,扩展名为 .key

ls -l /etc/keyless/keys
-r-------- 1 keyless keyless 1675 Nov 18 16:44 example.com.key

运行多个 key server 时,请确保所有必需的密钥已分发到每个 key server。客户通常使用 Salt 或 Puppet 等配置管理工具分发密钥,或将 /etc/keyless/keys 挂载到仅 key server 可访问的网络位置。密钥在启动时读入内存,因此 gokeyless 进程启动/重启期间必须能访问网络路径。

激活

要激活,请重启 keyless 实例:

  • systemd:sudo service gokeyless restart
  • upstart/sysvinit:sudo /etc/init.d/gokeyless restart

若此命令失败,请尝试通过检查日志进行故障排除。

这篇文档对您有帮助吗?