運営者はアドレスとユーザー名を送り、クライアントはCAファイル、証明書、鍵を要求します。この三つをローカルで作るのが当然の次の一手に思えます。しかしできあがるのは、自分のマシンだけが信じる証明書です。サーバーの信頼はあなたが管理していないCAに固定されているため、ハンドシェイクは始まる前に終わります。

信頼はサーバー側にあり、プロファイル側にはない

証明書認証は照合です。クライアントが証明書を提示し、ゲートウェイがその設定内のCAのいずれかによって署名されたかを確認します。

プロファイルには、クライアントがサーバーを検証するために使うCAファイルが指定されています。サーバーがあなたを検証するために使うCAを指定することはできません。設定のその半分はあなたのものではありません。

自分で作った証明書は、技術的に完璧でもこの照合に失敗します。有効な署名、サブジェクト、日付はありますが、発行者はゲートウェイが聞いたことのないCAです。エラーはハンドシェイク中、サーバーがすでに証明書を要求した後に現れます。クライアントプロファイルのどこを変えても答えは変わりません。

自己署名の証明書が代わりにならない理由

自己署名の証明書は自分の鍵で署名されています。署名は同じファイルに対して検証されるため、自己整合的である一方、他人のゲートウェイに対する資格情報としては役に立ちません。

ゲートウェイは証明書が内部的に整合しているかを問いません。信頼できる発行者が署名したかを問います。

エラーメッセージが紛らわしいのはそのためです。クライアントはサーバーの問題のように聞こえる検証失敗を報告し、サーバーは不明な発行者を記録します。どちらも同じ不一致を反対側から説明しています。

CSRの経路なら秘密鍵を手元に保てる

作業の大部分は今もローカルで行えます。鍵ペアを生成し、公開側の半分を使って証明書署名要求を作り、その要求を運営者に送ります。マシンから出るのは要求だけです。秘密側の半分は生成した場所にとどまります。

openssl req -new -newkey rsa:3072 -nodes -keyout client.key -out client.csr -subj "/CN=laptop-01"

運営者は自分のCAで要求に署名し、証明書を返します。秘密鍵は決して移動せず、結果はゲートウェイが信頼するアンカーにつながります。

マネージドサービスはCSRを省いてバンドル全体を発行することがよくあります。同じ提供者がトンネルを終端しCAを保持しているなら、それは妥当な取引です。鍵を手元に置いても管理が良くなるわけではありません。提供者はいつでも新しい鍵を作れるからです。

バンドルはインストールではなくインポートする

安全そうな名前のベンダーバンドルは、しばしばOpenVPNプロファイルです。設定と場合によっては証明書を含み、何もインストールしません。そのプロトコルを話すクライアントにファイルをインポートすれば、接続が設定されます。

扱いのルールは中身から決まります。プロファイルに秘密鍵が埋め込まれているなら、それは資格情報であり、パスワードと同じ注意が必要です。メール添付も、リポジトリも、共有のダウンロードフォルダも不可です。運営者がca.crt、client.crt、client.keyを別々に渡す場合は、厳しい権限で一緒に保管し、プロファイルからそれらを指してください。

運営者が省いたかもしれない確認を追加する

ルーターが生成したプロファイルには、ピア検証がないことがあります。remote-cert-tls serverは、ピア証明書にサーバー認証の用途を求めるため、クライアント証明書をサーバーとして再利用できません。この一行は、明確な根拠のある小さな変更です。

verify-x509-nameは、運営者が期待するサブジェクトやSANを指定できる場合にさらに進みます。どちらもプロファイルへの小さな追加で、どちらも正当化できます。インポートする前に、受け取った内容を確認してください。

openssl x509 -in client.crt -noout -issuer -subject -dates
openssl verify -CAfile ca.crt client.crt

検証設定は壊れた連鎖の修理ではありません。発行者が違うなら、答えは正しいCAの証明書であり、検証を切るフラグではありません。検証を切ると、認証の失敗が検出されない失敗に変わります。

ひとつのバンドルを依頼してください。PEM形式の認証局証明書、その認証局が署名したクライアント証明書、自分で生成したか信頼できる経路で届いた鍵、証明書が提示すべき正確なサーバー名、そして同じメッセージに有効期限も含めてください。期限切れの証明書は数か月後にネットワーク障害のように見えるからです。

関連記事