私のアプリでは、発行者名の sha256 (x509CertImpl.getIssuerDN().getName()) と証明書のシリアル番号を使用して証明書を一意に識別していますが、X509Name の他の実装が Bouncy の実装であることに気付きました。 Castle ライブラリは、bcX509Name.getName() を呼び出すと別のものを表示するため、この識別子は機能しません...私の質問は、X509Name の一意の識別子を取得する方法です...おそらく ASN.1 または DER でエンコードされた表現ですどちらも同じになります。
4070 次
2 に答える
2
java.security.cert.X509Certificate
を使用しているか、または JCA インターフェイスを使用しない Bouncy Castle クラスを使用しているかは、質問からは明らかではありません。
いずれにせよ、発行者の X.500 名を表すオブジェクトを返すメソッドが必要です。このオブジェクトには、名前の ASN.1 エンコーディングをバイト配列として返すメソッドが必要です。これをキーのコンポーネントとして使用します。
標準X509Certificate
または Bouncy Castle のX509CertificateObject
を使用している場合は、次のようなものを使用します (これらのクラスのいずれも使用していない場合は、より具体的にしてください)。
X509Certificate x = ...;
byte[] issuer = x.getIssuerX500Principal().getEncoded();
于 2011-07-25T16:18:55.660 に答える
1
IssuerDN は複雑な構造であり、異なるライブラリには、それを文字列に「シリアル化」するメカニズムが異なる場合があります。そのため、アプローチを再考する必要があるかもしれません。一般的には、証明書自体のハッシュ (全体) + シリアル番号の比較 (衝突の可能性をほぼ 0 にするため) を使用しても問題ありません。
于 2011-07-25T16:18:45.080 に答える