Cloudflare Tunnel との連携により、鍵サーバーへのトラフィックを安全なチャネル経由で送れます。鍵サーバーをパブリックインターネットに公開する必要はありません。
Keyless は amd64 と arm アーキテクチャでテスト済みです。鍵サーバーのバイナリは、Go がサポートするすべてのアーキテクチャで動く見込みです。ほかの CPU 向けのコードサポートがある場合もありますが、それらのアーキテクチャは未テストです。
ベアメタルに加えて、仮想化環境やコンテナ環境でも鍵サーバーは問題なく動くはずです。適切な TCP ポートへの受信アクセスと、秘密鍵へのファイルシステムアクセス(ファイルシステムストレージを使う場合)を設定してください。
Keyless を動かすには、対応しているオペレーティングシステム(OS)が必要です。対応 OS は次のとおりです。
- 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
鍵サーバーは秘密鍵にアクセスするため、ベンダーがまだサポートしている(セキュリティ更新を受け取っている)OS を強く推奨します。
まず、鍵サーバーに cloudflared をインストールします。
この手順は、コマンドライン を使うか、Cloudflare ダッシュボード を使うかで異なります。
次に、Cloudflare Tunnel を作成します。
この手順は、コマンドライン を使うか、Cloudflare ダッシュボード を使うかで異なります。
トンネル作成中に CIDR タブを開き、鍵サーバーのプライベート IP アドレスを入力します。トンネル作成後に CIDR ルートを追加 することもできます。
トンネルを作成したら、Cloudflare API で トンネルルートを一覧表示 し、次の値を後の手順用に保存します。
"virtual_network_id""network"
鍵サーバーを設定する前に、対応する SSL 証明書を Cloudflare のエッジへアップロードする必要があります。TLS 終端のとき、Cloudflare は接続元ブラウザーへこれらの証明書を提示し、(再開されていないセッションでは)指定した鍵サーバーと通信してハンドシェイクを完了します。
Cloudflare Keyless SSL で使う SAN だけを含む証明書を、Cloudflare へアップロードしてください。Keyless SSL のホスト名はすべて プロキシ済み である必要があります。
Keyless SSL で使う証明書は、それぞれアップロードする必要があります。
API で Keyless 証明書をアップロードするには、"tunnel" オブジェクトを含む POST リクエストを送ります。
"tunnel": {
"vnet_id": "<VIRTUAL_NETWORK_ID>",
"private_ip": "<NETWORK>"
}最後に、インフラストラクチャへキーサーバーをインストールし、Cloudflare のエッジで TLS を終端するために使う証明書の SSL キーを格納して、相互認証できるようにキーサーバーを有効化します。
これらの手順は Cloudflare パッケージリポジトリ ↗ にもあります。
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 gokeylesssudo 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 gokeylesssudo 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 gokeylesssudo 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 gokeylesssudo 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 gokeylesssudo 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 gokeylessGokeyless は PKCS#11/HSM 対応のために CGO を使うため、glibc への依存が発生します。ディストリビューションに合ったリポジトリを使ってください。
sudo dnf config-manager --add-repo https://pkg.cloudflare.com/gokeyless/rpm/gokeyless.repo
sudo dnf install gokeylesscurl -fsSl https://pkg.cloudflare.com/gokeyless/rpm/gokeyless.repo | sudo tee /etc/yum.repos.d/gokeyless.repo
sudo yum update
sudo yum install gokeylesssudo dnf config-manager --add-repo https://pkg.cloudflare.com/gokeyless/rpm-el8/gokeyless.repo
sudo dnf install gokeylesscurl -fsSl https://pkg.cloudflare.com/gokeyless/rpm-el8/gokeyless.repo | sudo tee /etc/yum.repos.d/gokeyless.repo
sudo yum update
sudo yum install gokeylessCloudflare アカウントの詳細を、/etc/keyless/gokeyless.yaml にある設定ファイルに追加します。
-
キーサーバーのホスト名を設定します。例:
keyserver.keyless.example.com。これは Keyless 証明書をアップロードしたときに入力した値でもあり、この証明書の鍵を保持するキーサーバーのホスト名です。 -
Zone ID を設定します(Cloudflare ダッシュボードの Overview タブにあります)。
-
サーバー証明書の登録用の認証資格情報を設定します。gokeyless は次の 2 つのオプションに対応しています。
-
API トークン(推奨): Zone > SSL and Certificates > Edit 権限を持つ API トークンを作成 します。設定に次のように指定します。
api_token: "<YOUR_API_TOKEN>"または環境変数
KEYLESS_API_TOKENを使います。 -
Origin CA API キー(非推奨): Origin CA API キーを設定 します。このオプションは 2026 年 9 月 30 日に動作を停止します。
-
秘密鍵を /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複数のキーサーバーを運用する場合は、必要なキーを各キーサーバーに配布してください。お客様は通常、Salt や Puppet などの構成管理ツールでキーを配布するか、キーサーバーだけがアクセスできるネットワーク上の場所に /etc/keyless/keys をマウントします。キーは起動時にメモリへ読み込まれるため、gokeyless プロセスの開始 / 再起動時にそのネットワークパスへアクセスできる必要があります。
有効化するには、keyless インスタンスを再起動します。
- systemd:
sudo service gokeyless restart - upstart/sysvinit:
sudo /etc/init.d/gokeyless restart
このコマンドが失敗した場合は、ログの確認 でトラブルシューティングしてください。