ここでの問題は、証明書ポリシーフィールドが非標準形式を持っているということです。その内容はIETF RFCではなく、CA Browser Forumによって定義されています。 Extended Validation証明書を示すために使用されます。
ここからそのフィールドの "www.bankofamerica.com"
配列: ObjectIdentifier:2.5.29.32 certificatePolicies OctetStringに:(48、59、48、57、6、11、96、134、72、配列番号1、配列番号134、配列番号248、配列番号69、配列番号1、 116,116,112,115,58,47,47,119,119,119,46,118,101,114,105,115,105,103,110,46,99,111、 x06 \ x08 \ x06 \ x01 \ x05 \ x05 \ x05 \ x05 \ x05 \ x05 \ x03 \ x07 \ x02 \ x01 \ x16 \ x1chttps://www.verisign.com/rpa '
これはダンプだったPythonライブラリ "pyasn1"を使用して小さなプログラムを作成し、DERおよびPEM形式のデータを解析できます。問題は、CertificatePoliciesの値がASN1型の "OctetString"であることです。つまり、ASN1の生のバイトです。他のほとんどのフィールドは、PrintableText、Integer、Dateなどの便利なタイプですが、このタイプはありません。
1999年のRFC2527はこれに関する手のひら波です。その情報が記入されたはずの場所がありますが、そうではありませんでした。 OpenSSLの文書(http://www.openssl.org/docs/apps/x509v3_config.html)では、「未処理の拡張機能の構文は拡張コードによって管理されています。たとえば、複数のセクションにデータを含めることができます。使用は拡張コード自体によって定義されます:例の証明書ポリシー拡張をチェックしてください。 CABフォーラムEV証明書ガイドライン(http://www.cabforum.org/EV_Certificate_Guidelines.pdf)は、そのフィールドに入るものを定義します(付録Bを参照)。ただし、フォーマットについてはRFC3280を参照してください。 RFC3280によると、「証明書ポリシー拡張には、オブジェクト識別子(OID)とオプションの修飾子で構成される1つ以上のポリシー情報用語のシーケンスが含まれています」オプションの修飾子は存在していても構いません。ポリシー。したがって、OIDと「オプションの修飾子」を含む項目のASN1シーケンスであるはずです。しかし、EV証明書には実際に含まれているものではありません。
EV証明書の許可されたOIDについては、公式の公式リストはありません。 CAブラウザフォーラムには、メンバーと共有するプライベートリストがあります。しかし、ウィキペディアで非公式のものを探してみてください。
もっと後で私がフォーマットを理解するとき。
Ah Mono。私は彼らが既存の機能をクローンするだけだと思っていましたが、明らかにそれも拡張しています。 – Dialecticus
両方のリンクがあなたのソリューションではすでに死んでいます。あなたの答えを編集してコードとしてここに含めてください。 –
こんにちは@ChrisBenard私はあなたのためのコードを更新しました – Makah