変換する前に:SSH鍵とOpenVPN証明書の違い
authorized_keysの一行、OpenSSH証明書、X.509証明書はそれぞれ別のオブジェクトです。変換する前に、手持ちがどれかを確認してください。
インポートが証明書エラーで失敗すると、明白な対処は変換に見えます。その直感は、ファイル拡張子だけが変わり、拒否はまったく同じままという道へ人を導きます。authorized_keysのssh-ed25519行とOpenVPNクライアント証明書は別個の資格情報オブジェクトであり、発行者も符号化も失効経路も異なります。これらの確認を順にたどれば、変換がそもそも役立つかどうかが一分でわかります。
実際に手元にあるのはどのオブジェクトか?
鍵と呼ばれるものは五つあり、TLSプロファイルが求めるのはそのうち一つだけです。SSH公開鍵は、型の接頭辞とbase64のペイロードを持つ一行のテキストです。OpenSSH証明書はその鍵に署名、principals、オプションを加えたもので、ssh-keygenが小さなCAとして生成します。X.509証明書はまったく別の構造で、サブジェクト、有効期間、拡張、認証局の署名を運びます。秘密鍵は秘密の半分であり、発行されたバンドルは通常、証明書とそのチェーンと秘密鍵を一つのファイルにまとめたものです。
最初のテストはコマンド一つで済みます。opensslにファイルを指定し、証明書構造を解析させてください:
openssl x509 -in client.crt -noout -subject -issuer
これが読み込み不能またはPEMエラーで失敗するなら、どんな名前を付けていてもそのファイルはX.509証明書ではありません。名前を変えても中のASN.1は書き換わりませんし、公開鍵の行をPEMヘッダのテキストで包んでも同じです。
そもそもプロファイルは証明書を要求しているか?
クライアント証明書は複数ある認証方式の一つで、動作しているTLSプロファイルの多くは決して要求しません。サーバーはプラグイン、ユーザー名とパスワード、あるいはトークンバックエンドで利用者を認証しつつ、クライアントにはサーバーの身元確認を求めることができます。プロファイルにクライアント証明書の指示がなければ、証明書が要求されることはなく、どんな変換でもゲートウェイに要求させることはできません。
古い静的鍵の構成はさらに別のケースです。これはTLSハンドシェイクより前のもので、事前共有の秘密ファイルを想定しているため、そのフィールドに公開鍵を貼り付けても動きません。資格情報が間違っていると判断する前に、プロファイルが実際に何を求めているかを読んでください。
再符号化にできることとできないこと
秘密鍵には正規の代替コンテナがあります。同じRSA鍵やEC鍵は、従来のPEM、PKCS#8、あるいはPKCS#12バンドルの中として書き出すことができ、ツールは喜んで相互変換します。公開鍵も似た話で、ssh-keygenはSSH鍵のRFC 4716形式を出力でき、OpenSSHは独自の証明書形式も理解します。それらはすべて表現であり、表現は信頼ではありません。
変換にできないのは、あなたの鍵を見たことのない認証局による署名を作り出すことです。証明書とは、ある公開鍵が特定の目的のために特定のサブジェクトに属するという発行者の表明です。再符号化は鍵のバイトを保つだけで表明を欠いたままにするので、ゲートウェイには信頼ストアと照合するものが何もありません。
ほとんどの試みが静かに失敗するのはこの段階です——ファイルは.crtで終わるようになり、クライアントは文句も言わずに読み込み、それでも相手側が信頼できる発行者までのチェーンを構築できないためにハンドシェイクは中断します。
認証局が関与する場面
実際の登録は、自分が管理する鍵ペアと、運用者が期待するサブジェクトを運ぶ証明書署名要求から始まります。運用者は資格を確認し、CA鍵で要求に署名し、発行した証明書をクライアントが提示すべき中間チェーンとともに返します。次にクライアントは、それに署名したCA証明書を必要とします——通話相手のサーバーが同じ配備に属すると確認できるのはそれがあるからです。
その最後のファイルは忘れやすく、代替が効きません。CAの署名鍵自体はクライアント構成に含めるものではなく、どれだけローカルで変換しても受け取るはずだったチェーンは作れません。
SSH鍵を流用するコスト
変換が受け入れ可能なものを生み出したとします。一つの鍵ペアをSSHアクセスとVPN認証で使い回すと、二つの独立したセキュリティ判断が結び付いたままになります。authorized_keysの行を削除するとSSHログインは止まりますが、同じ公開鍵に対してVPNのCAがすでに発行した証明書には何の効果もありません。VPN側は独自の仕組み、つまり証明書失効リストか運用者の登録記録で失効させます。
したがってチェックリストは小技ではなく停止条件で終わります。opensslがファイルを証明書として解析しないなら、変換をやめ、手元にあるものを説明してください:SSH鍵、SSH証明書、X.509証明書、秘密鍵、またはバンドルです。プロファイルがクライアント証明書を要求しないなら、立ち止まってサーバーがどの認証方式を期待するかを尋ねてください。両方の答えがX.509を指すときだけ登録が次の段階になり、最初の文に正しい名詞があればその会話はずっと速く進みます。