サブジェクト代替名:VPN サーバーはどう識別されるか
信頼できる証明書でも、VPN のホスト名には合わないことがあります。SAN には、クライアントが確認する識別子の形式(DNS 名または IP アドレス)が入っている必要があります。
証明書チェーンは正しく検証できるのに、クライアントがその証明書を拒否し、名前が一致しないというエラーを出します。そのメッセージは、誰が証明書に署名したかについてではありません。証明書が表してよい識別子を保持するサブジェクト代替名拡張と、設定した識別子がそこに正しい形式で現れているかについてです。信頼は誰が署名したかに答え、名前の確認はどのホストに属するかに答えます。
クライアントが実際に比較するもの
クライアントは設定を参照識別子に変換します:ホスト名、アドレス、またはプロトコル固有の識別子です。次に、使用中のプロトコルの照合規則を適用して、証明書の中からその識別子を探します。同じ種類のエントリだけが対象になるため、DNS のエントリでアドレスを満たすことはできず、人が証明書を見るかどうかに関係なく比較は行われます。
その拡張に参照識別子がない場合、旧来のコモンネームが一致していても確認は失敗します。証明書が会社に対して正当に発行されていても、名前が含まれていなければ vpn.example.com には合いません。証明書が本物であっても、失敗は名前の不一致です。
DNS 名と IP アドレスは別のエントリ
203.0.113.10 を指すプロファイルで、証明書が vpn.example.com しか列挙していない場合は、パケットは届いても識別子が一致しないため拒否されます。DNS 名とアドレスリテラルは別のエントリ種別として保存され、一方が他方を代用することはありません。そのため、アドレスでは到達できるサービスが、そのアドレスを使うプロフィールでは使えないことがあります。
ワイルドカードにも独自の規則があります:ワイルドカードは一つのラベルを覆い、ドメイン下のすべての名前を覆うわけではありません。DNS の比較は大文字と小文字を区別しませんが、他の識別子の種類は区別するため、画面上で同じに見える値が厳密な比較で失敗することがあります。文字列を目で比べるのではなく、使用中の識別子の種類の照合規則を確認してください。拡張に名前を追加するのは発行側の判断であり、クライアントの設定で用意できるものではありません。
接続が実際に使った証明書を調べる
管理ページからコピーしたファイルではなく、稼働中のエンドポイントが提示する内容を読んでください。ロードバランサーや交換されたインスタンスは、数か月前にアップロードした証明書とは別のものを提示することがあり、その違いはコンソールでは見えません。
openssl s_client -connect vpn.example.com:443 -showcerts </dev/null | openssl x509 -noout -text
サブジェクト代替名のブロック、発行者のチェーン、有効期間は同じ読み取りに含めるべきです:名前の不一致と期限切れでは、出るエラーが違うからです。そのブロックの各名前を、プロファイルに設定した識別子と 一文字ずつ比較し、どの種類かを記録してください。エンドポイントのアドレス形式に対して同じコマンドを繰り返すと、証明書が両方の識別子を覆っているか片方だけかが分かります。管理コンソールの親しみやすいサブジェクト表示は検証結果ではなく、拡張にどの名前が入っているかは何も語りません。
コモンネームは現代の真実の源ではない
ブラウザーとほとんどの TLS ライブラリは、ホスト名の照合にコモンネームを使わず、拡張を参照するようになりました。一部の VPN クライアントは今もコモンネームを先に比較し、拡張がないときにそれへ戻るため、同じ証明書がブラウザーでは通り、クライアントでは失敗することがあります。証明書がまったく変わらなくても、同じ名前の確認があるプラットフォームでは通り、別のプラットフォームでは失敗することがあります。
証明書が間違っていると判断する前に、クライアントがどのフィールドを読むかを調べてください。同じエンドポイントの 二つのクライアントが食い違うことがあり、その食い違いは証明書ではなくクライアントについての情報です。
確認ではなく、発行かプロファイルを直す
プロファイルをエイリアスを中心に作った場合は、文書化されたホスト名に向け直すか、エイリアス用に証明書を再発行して計画した時間帯に配備してください。警告を黙らせることは、確認が署名された証明書をこの特定のホストに結びつける唯一の手順だからこそ、第三の選択肢にはなりません。それを外すと、同じ認証局のどんな証明書でも、到達したいサーバーの代わりに立ててしまいます。
更新では、期限日を先に延ばすだけでなく、意図した名前と目的を保つべきです。名前を落とす更新は、次の再起動に予定された新しい障害であり、変更時には古い証明書がまだ有効だったため、たいてい警告なしに訪れます。
期待する識別子、提示された名前、それらに署名したチェーンを記録してください。その記録があれば、次の更新は調査ではなく比較になります。特定の発行を確認する必要がある場合は、拡張の定義が RFC 5280 にあります。