メインコンテンツまでスキップ
適用対象:
Cockpit v2SSH 認証局

SSH 認証局とは​

SSH 認証局(SSH CA) は Vault で保護された署名鍵であり、静的で長期間有効な鍵ファイルに依存する代わりに、短命で暗号学的に署名された SSH 証明書を発行します。CA の秘密鍵が Vault の外に出ることはありません — すべての証明書は Vault バックエンド内でその場で署名され、これは DuoKey の他の鍵管理ワークフローが署名素材をアプリケーション層の手の届かないところに保つのと同じ方式です。

SSH CA のアーキテクチャ
Vault で保護された SSH CA署名鍵(EC P-256/384 または RSA 2048/4096)は、選択した Vault 内で一度だけ生成されます
証明書の被署名バイト列に署名
短命なホスト証明書・ユーザー証明書ホスト証明書は静的なホスト鍵を置き換えますユーザー証明書は authorized_keys のエントリーを置き換えます
サーバーにインストール/クライアントに配布
sshd / ssh クライアントCA の公開鍵を信頼します — ホストごと・ユーザーごとの鍵ファイルを保守する必要はありません

署名鍵が Vault の外に出ることはありません。短命な証明書が、かつて sshd が信頼していた静的ファイルを置き換えます。

SSH CA は、SSH で最も古くからある二つの信頼の問題を解決します。

静的なホスト鍵

通常、クライアントは初回接続時にサーバーのホスト鍵を信頼し(trust-on-first-use)、known_hosts に黙って記憶します。ホスト証明書を使うと、サーバーはクライアントがすでに信頼している CA によって署名された証明書を提示できるため、盲目的に受け入れるものも、古くなったまま記憶され続けるものもなくなります。

静的な authorized_keys ファイル

通常、各サーバーはログインを許可する公開鍵の一覧を自身で保持しており、それを手作業で配布・整理する必要があります。ユーザー証明書を使うと、sshd は指定されたユーザー名の組に対して CA が署名した任意の鍵を信頼できるため、サーバーごとに保守すべきファイルがなくなります。

アプリではなく、第一級のプラットフォーム機能

SSH 認証局は Cockpit のナビゲーションにおける独立した項目であり、Apps カタログのエントリーではありません。独自の機能フラグと権限サブツリーの背後にあり、エディションが許可するまでデフォルトでは無効です。

証明書の種類​

SSH CA は 2 種類の証明書を発行できます。どちらも設計上短命であり、証明書の有効期間は発行元 CA に設定された最大値で制限されます。

種類証明する対象置き換えるものプリンシパルフィールドの意味
ホスト接続してくるクライアントに提示される、サーバーのホスト鍵`known_hosts` を通じて信頼される静的なホスト鍵証明書が有効なホスト名/IP アドレス
ユーザーサーバーに提示される、人またはサービスの鍵`authorized_keys` 内の静的なエントリー証明書が認証されるサーバー側のユーザー名
鍵アルゴリズム

SSH CA の署名鍵には EC P-256、EC P-384、RSA 2048、RSA 4096 のいずれかを使用できます — CA の作成時に一度だけ選択します。CA の公開鍵は標準的な OpenSSH 公開鍵行として公開されるため、sshd_config の TrustedUserCAKeys(ユーザー証明書用)や、クライアントの known_hosts の @cert-authority 行(ホスト証明書用)にそのまま貼り付けられます。

SSH CA の作成と証明書の発行​

1

CA を作成する

Cockpit の SSH 認証局セクションから CA を作成します。名前と任意の説明を付け、署名鍵を保持する Vault バックエンドを選び、鍵アルゴリズムを選択し、発行する証明書が要求できる最大の証明書有効期間(TTL)を設定します。Cockpit は選択された Vault 内に署名鍵を生成し、CA の公開鍵行とフィンガープリントを返します — 秘密鍵そのものが公開されることはありません。

2

ホスト証明書を発行する

サーバーの OpenSSH 公開鍵、有効とすべきホスト名/IP アドレス(そのプリンシパル)、および任意の TTL(CA の最大値で制限されます)を送信します。Cockpit は署名済みの証明書行を返すので、sshd がクライアントに提示できるようサーバーのホスト鍵と一緒にインストールします。

3

ユーザー証明書を発行する

ユーザーまたはサービスの OpenSSH 公開鍵と、認証対象となるサーバー側のユーザー名(そのプリンシパル)を送信します。返された証明書行は authorized_keys のエントリーの代わりに使用します — 対象の sshd は CA を信頼するだけでよく、個々の鍵を管理する必要はありません。

4

必要に応じて失効させる

鍵が侵害された場合や、発行済みの証明書をこれ以上信頼すべきでない場合は、任意の理由を添えて Cockpit から失効させます。失効した証明書は、失効チェックを行う以降の接続から除外されます(後述)。

以下の五つのステップは、発行から、証明書を信頼する(または後に拒否する)接続に至るまでに実際に起こることです。

SSH 証明書の発行と利用
1. 管理者が SSH CA を作成Vault が署名鍵を生成し、CA の公開鍵行とフィンガープリントが返されます
発行リクエスト — 対象鍵 + プリンシパル
2. ホスト証明書またはユーザー証明書を発行Cockpit は証明書の被署名バイト列を Vault 内で直接署名します — CA の秘密鍵が外に出ることはありません
署名済み証明書行(<key>-cert.pub)
3. 証明書を配布サーバーのホスト鍵と一緒にインストールするか、authorized_keys のエントリーの代わりに使用します
接続試行
4. sshd / ssh が CA を信頼静的な known_hosts や authorized_keys のエントリーではなく、証明書の署名と有効期間を検証します
侵害された場合、または信頼できなくなった場合
5. 失効失効した証明書の対象鍵は、sshd の RevokedKeys ディレクティブ用の revoked-keys ファイルに公開されます

Vault の境界を越えるのは署名だけです — 証明書自体は通常の OpenSSH 公開鍵行として流通します。

短い TTL こそが要点

明示的な TTL を指定せずに発行された証明書は、発行元 CA に設定された最大 TTL の期間有効です — その最大値自体も、設定せずに CA を作成した場合は1 時間がデフォルトです。長期間有効な証明書ではなく、短い TTL(と短い CA 最大値)と再発行を優先してください — 自動的に期限切れになる証明書には、失効のための仕組みが不要です。

key id とプリンシパル

すべての証明書は key id(未設定の場合は最初のプリンシパルがデフォルトとなるラベル)と、一つ以上のプリンシパル — ホスト証明書ではホスト名/IP、ユーザー証明書ではユーザー名 — を持ちます。プリンシパルは最低一つ必要です。

CA のライフサイクル: ローテーションと無効化​

ステータス意味
アクティブこの CA は新しい証明書を発行できます。
ローテーション済みこの CA は新しく生成された CA 鍵に置き換えられました。これ以上証明書を発行することはできません。
無効化済みこの CA は手動で運用から外されました。これ以上証明書を発行することはできません。
ローテーションは CA を置き換えるものであり、既存の証明書を失効させるものではありません

CA をローテーションすると新しい署名鍵が生成され、古い CA は Rotated としてマークされます。古い鍵の下ですでに発行された証明書は、個別には有効なままです — 各証明書には署名に使われた CA 公開鍵が埋め込まれているため、検証は CA の現在のステータスに依存しません。ただし、sshd の信頼 CA 設定(known_hosts の @cert-authority 行、TrustedUserCAKeys)を新しい公開鍵に更新しなければ、ローテーション後の CA から新たに提示される証明書は、新規接続で信頼されません。

CA を無効化すると、置き換えを生成することなく、それ以上の証明書発行を停止できます — 新しい CA をすぐにローテーションで導入せずに CA を引退させたい場合に使用します。

失効と revoked-keys ファイル​

証明書を失効させると、任意の理由とともに Revoked としてマークされますが、失効が効果を持つのは sshd にそれをチェックするよう指示した場合だけです。Cockpit は revoked-keys ファイル — 特定の CA について、現在失効しているすべての証明書の対象鍵を 1 行 1 公開鍵で列挙した平文の一覧 — を公開しており、sshd_config の RevokedKeys ディレクティブから直接参照できます。

sshd_configTEXT

# Point sshd at the CA's public key for certificate-based trust,
# and at the revoked-keys file for revocation checking.
TrustedUserCAKeys /etc/ssh/ca.pub
RevokedKeys /etc/ssh/revoked_keys
ファイル形式

revoked-keys ファイルは、バイナリの OpenSSH KRL 形式ではなく、平文のテキスト一覧(失効した証明書ごとに 1 行の OpenSSH 公開鍵行、ソート済み・重複排除済み)です。失効のたびに再取得し、sshd が読み込むコピーを更新してください。

ライブ署名のための PKCS#11 エンロールメント​

Cockpit コンソールからオンデマンドで証明書を発行するだけでなく、SSH CA をエンロールすることで、オンプレミスの sshd や ssh-agent との連携から証明書署名をライブで要求できます。これは DuoKey の他の PKCS#11 連携と同じパターンです(Oracle TDE の pkcs11.toml を参照)。

1

CA をライブ署名用にエンロールする

CA の詳細ページから、PKCS#11 アクセス用にエンロールします。Cockpit は、この CA 自身のライブ署名エンドポイントを指す pkcs11.toml 形式の設定ファイルと、一度だけ表示されるベアラーアクセストークンを生成します。

2

設定をインストールする

生成された設定を、PKCS#11 対応の SSH ツールと一緒に保存します。オンプレミスのクライアントは、すべての署名リクエストを Authorization ヘッダー内のベアラートークンで認証します — トークンがエンドポイント URL に埋め込まれることはありません。

3

ライブで署名する

エンロール後、クライアントは PKCS#11 ブリッジを通じて CA の公開鍵を参照し、証明書データに対する署名を要求できます。オペレーターがコンソールから証明書を一つずつ手作業で発行する必要はありません。

ライブ PKCS#11 署名ブリッジ
1. ライブ署名用にエンロールCockpit が pkcs11.toml 形式の設定と、一度だけ表示されるベアラートークンを生成します
設定 + トークンをインストール
2. オンプレミスのクライアントが接続すべての呼び出しで Authorization ヘッダーにベアラートークンを提示します
find_objects / sign
3. Cockpit がトークンとエンタイトルメントを検証定数時間でのトークン照合。ライブ署名のエンタイトルメントはエンロール時だけでなく、すべての呼び出しで再チェックされます
署名のみ — 暗号化/復号/wrap/unwrap は不可
4. 署名が返されるCA 鍵は Vault 内で署名し、ブリッジを越えるのは結果の署名だけです

すべてのライブ署名リクエストを認証するのはベアラートークンであり、URL 内の CA id ではありません。

署名のみ

ライブ PKCS#11 ブリッジが公開するのは、SSH CA に必要な操作 — CA 鍵の参照と署名 — だけであり、暗号化、復号、wrap、unwrap は公開されません。CA の鍵素材は常に Vault 内に留まります。

個別にライセンスされ、継続的に再チェックされます

ライブ PKCS#11 署名は、基本となる SSH 認証局機能の上に独自のエンタイトルメントでゲートされており、エンロールには専用の権限が必要です。エンタイトルメントはエンロール時だけでなく、すべての署名呼び出しで再チェックされます — したがって、エディションにそれが含まれなくなると、すでにエンロール済みのクライアントであってもライブ署名は即座に停止します。

エンロールメントトークンを保護してください

エンロール時に返されるベアラートークンは認証情報であり、URL 内の CA id ではありません。生成された設定ファイルはアクセス権限を制限して保存し、万一漏洩した場合は再エンロール(新しいトークンが発行されます)してください。

権限とエンタイトルメント​

SSH 認証局には、他のあらゆる Cockpit モジュールとは分離された独自の権限サブツリーに加え、モジュール全体をゲートする機能フラグと、ライブ PKCS#11 ブリッジを個別にゲートする二つ目のフラグがあります。

領域統制する範囲
CA 管理SSH CA の作成、参照、ローテーション、無効化、削除
証明書証明書の参照、ホスト証明書の発行、ユーザー証明書の発行、証明書の失効
PKCS#11 エンロールメントCA をライブ署名用にエンロールする — モジュールの他の部分とは別にゲートされます
機能と権限の違い

プラットフォームの他の部分と同様に、SSH 認証局モジュール — およびその中のライブ PKCS#11 ブリッジ — がそもそも利用可能かどうかは、エディションの機能エンタイトルメントによって決まります。このユーザーがそれを利用できるかどうかは権限によって決まります。呼び出しは両方を満たす必要があります。機能 と アクセスポリシー を参照してください。