跳转到内容
搜索文档

公共 DNS

最后更新 查看 MarkdownAgent 设置

如果您无法使用 Cloudflare Tunnel 设置,也可以为您的 key server 创建公共 DNS 记录。

此设置选项并不理想,因为该 DNS 记录无法代理,因此会暴露您的 key server 的源 IP 地址。


开始之前

支持的平台

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. 创建公共 DNS 记录

  1. 打开终端并运行 openssl rand -hex 24,以生成较长的随机主机名,例如 11aa40b4a5db06d4889e48e2f738950ddfa50b7349d09b5f.example.com
  2. 通过您的 DNS 提供商界面将此记录添加为指向 Keyless SSL 服务器 IP 地址的 AAAAA 记录。
  3. 在初始化 Keyless SSL 服务器时,将此主机名用作服务器主机名。

2. 上传 Keyless SSL 证书

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

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

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

要在仪表板中创建 Keyless 证书:

  1. 在 Cloudflare 仪表板中,前往 Edge Certificates(边缘证书) 页面。

    Go to Edge Certificates ↗
  2. 选择 Upload Keyless SSL Certificate(上传 Keyless SSL 证书)

  3. 在上传模态框中填写证书及其他详情,然后选择 Add(添加)

标签 说明 示例值
Key server label key server 的任意唯一标识符。 “test-keyless”, “production-keyless-1”
Key server hostname 保存此证书密钥的 key server 主机名(例如先前生成的随机主机名)。 11aa40b4a5db06d4889e48e2f738950ddfa50b7349d09b5f.example.com
Key server port 除非您已在 key server 上更改,否则设为 2407。 2407
SSL Certificate 您持有私钥的有效 X509v3 SSL 证书(PEM 格式)。 (PEM bytes)
Bundle method 几乎始终应为 Compatible。更多详情请参阅上传 Custom 证书 Compatible

要通过 API 创建 Keyless 证书,请发送 POST 请求。


3. 设置并激活 key server

最后,您需要在基础设施上安装 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 的主机名,例如 11aa40b4a5db06d4889e48e2f.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

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

允许来自 Cloudflare 的传入连接

在 TLS 握手期间,Cloudflare 的 keyless 客户端将向您在证书上传期间指定的 key server 主机名或 IP 地址发起连接。默认情况下,keyless 客户端将使用目标 TCP 端口 2407,但可以在证书上传期间更改,或在上传后通过编辑证书详情更改。

创建 WAF 自定义规则,使您的 key server 仅接受来自 Cloudflare 的连接。您可以通过 IP details API 端点获取 Cloudflare 的 IPv4 和 IPv6 地址。

这篇文档对您有帮助吗?