証明書をインストールし、Keychain Access にわかりやすい名前で表示されているのに、VPN クライアントの識別情報の選択欄は空のままです。クライアントが探しているのは証明書ではありません。識別情報、つまり所有を証明できる秘密鍵と対になった証明書を、クライアントが読み取りを許可されている場所に保管したものを探しているのです。

クライアントが求めているのは識別情報です

Apple のセキュリティフレームワークは、証明書と識別情報を別のオブジェクトとして扱います。証明書は公開データです。識別情報はその証明書と秘密鍵を合わせたものであり、チャレンジを完了できるのは識別情報だけです。一方、信頼された CA 証明書はクライアントが発行者を評価できるようにするものであり、マシンを発行済みのクライアント資格情報の保有者にするわけではありません。

ItemWhat it can doWhat it cannot do
CA or server certificateValidate the gateway's chainAuthenticate this client
Client certificate without keyNothing for authenticationProve possession of anything
Identity (cert plus key)Answer the authentication challengeGuarantee the gateway accepts it

そのため、.cer ファイルを読み込んでも、使えるクライアント識別情報は決してできません。ファイルには公開素材しか含まれていません。名前を変えても信頼を設定しても、鍵ペアにはなりません。

選択欄が空のままになる三つの理由

一つ目は秘密鍵の欠落で、登録や読み込みの処理が鍵を渡していないことを意味します。二つ目はクライアントが参照しない保管場所で、ユーザースコープのプロファイルはユーザーのキーチェーンを見ますが、システムの保管場所に置かれた項目は見えないことがあります。三つ目は用途やポリシーの不一致で、証明書は存在しても展開の規則の下でクライアント認証に有効ではありません。

security find-identity -v -p ssl-client

これは、システムがクライアント認証に有効と見なす識別情報を一覧します。件数がゼロなら、問題は VPN クライアントより上流にあり、プロファイルを編集しても直りません。識別情報がここに表示されてクライアントに表示されないなら、違いはクライアントの保管場所かスコープにあります。

秘密鍵がどこにあり、誰が使えるのか

Keychain Access で識別情報を読み込むと、読み込みダイアログが保存先のキーチェーンを提示します。どれが正しいかはクライアントと、プロファイルがユーザースコープかデバイススコープかによって変わります。システムのキーチェーンを勧める古い回答は普遍的な規則ではなく、保管場所の間で項目をコピーすることは修復ではありません。

System Roots は信頼の集合です。そこに証明書を置くと、システムがどの発行者を信頼するかが変わり、秘密鍵は作られず、識別情報の保管場所でもありません。選択欄を埋めるために無関係な証明書を動かすのは、マシンに恒久的に広げられた信頼集合を残す類の修正です。

秘密鍵へのアクセスは別の制御です。 すべてのアプリケーションに鍵の使用を許可する と、あるクライアントの選択の問題は解決しますが、同じ能力をマシン上の他のすべてに渡すことになります。必要とするクライアントにだけ許可し、鍵がハードウェアで保護されているか、エクスポート不可と印が付いていないかを確認し、そうであれば、エクスポートしたコピーではなく対応プロバイダーを使う必要があります。

プロファイルが資格情報を指す方法

管理されたネイティブ IKEv2 構成では、プロファイルは PayloadCertificateUUID を通じて資格情報ペイロードを参照します。重要なのは参照された識別情報とその提供方法であり、プロファイル内の表示名を編集しても、誤ったペイロードや鍵を一度も渡さなかったペイロードを指す参照は直りません。

サードパーティのプロバイダーは、独自の保管場所やシステムプロンプトなど、まったく別の選択機構を使うことがあります。ネイティブプロファイルの前提を持ち込むのではなく、そのプロバイダーの文書を読み、管理コンソールの下書きではなく、実際にインストールされているプロファイルで参照を確認してください。

選択と受け入れは別の節目です

選択欄が埋まっているということは、クライアントが識別情報を見つけて使えるというだけです。ゲートウェイがそれを受け入れるかは何も語りません。サーバーは依然として発行者、有効期間、失効状態、そして その資格情報からアカウントへの対応付けを確認します。

両方の段階を明示的に、この順でテストします。識別情報が提示されることを確認して接続し、その後でゲートウェイの所有者に、どの資格情報が提示され、どの対応付け規則がそれを消費したかを確認してもらいます。クライアントが識別情報を提示してサーバーが拒否するなら、残る作業はサーバー側です。Mac で証明書を再インストールしても、何度繰り返してもその結果は変わりません。

関連記事