2

java.security.cert.X509Certificateサブジェクトの代替名も含めて、証明書 ( ) に一致するすべてのホスト名と IP のリストを取得する方法は? s のさまざまな実装しか見つかりませんでしjavax.net.ssl.HostnameVerifierた。

4

1 に答える 1

6

ホスト名検証を証明書に関連付ける方法は、RFC 2818 のセクション 3.1で定義されています (HTTPS の場合、他のプロトコルについてはRFC 6125を参照してください。ただし、非常に似ています)。

要するに:

  • のインスタンスを使用しX509Certificateて、 の結果を反復処理しますgetSubjectAlternativeNames()
  • 各エントリは 2 要素のリストになります。1 つ目はタイプ、2 つ目は実際の値です。
  • タイプ 2 は DNS 名用、タイプ 7 は IP アドレス用です。それらを別々に扱う必要があります。
  • SAN IP アドレス エントリがある場合は、これらのアドレスを IP アドレスのリストに追加します。
  • SAN DNS 名のエントリがある場合は、これらの名前を IP アドレスのリストに追加します。
  • SAN DNS 名のエントリがない場合 (ただし、まだ IP SAN がある可能性があります)、証明書のサブジェクト DN を読み取り、その CN (共通名) を抽出してリストに追加できます。( CN を抽出する方法については、この質問を参照してください。RFC 2818 の「最も具体的な」CN の概念は、RFC 6125 で認められ、対処されたあいまいさであることに注意してください。)

証明書の一部のホスト名にはワイルドカードが含まれている可能性があるため、可能な一致の完全なリストを作成できないことに注意してください。ワイルドカードに関するこの問題は、確かに、完全なリストを取得しようとするよりもベリファイアを作成する方が通常は理にかなっている理由の 1 つです。(位置の詳細については、RFC 2818 セクション 3.1 を参照してください。また、ドット自体はワイルドカード式の一部ではないため、*.example.org一致しないことに注意してくださいexample.org。)

于 2013-07-30T13:23:03.767 に答える