質問

私のアプリでは、発行者名(x509certimpl.getissuerdn()。getName())のSHA256を使用しています。キャッスルライブラリは、bcx509name.getname()に電話するときに何か違うものを表示します。そのため、この識別子は私には機能しません...私の質問は、x509Nameの一意の識別子を取得するにはどうすればよいですか...多分asn.1またはderエンコードされた表現両方のものが同じになります。

役に立ちましたか?

解決

あなたが使用しているかどうかは質問から明らかではありません java.security.cert.X509Certificate, 、またはJCAインターフェイスを使用しない弾力のある城のクラス。

いずれにせよ、発行者のX.500名を表すオブジェクトを返す方法があるはずです。このオブジェクトには、名前のASN.1エンコードをバイト配列として返すメソッドが必要です。これをキーのコンポーネントとして使用します。

標準を使用している場合 X509Certificate または弾力のある城 X509CertificateObject, 、このようなものを使用します(そして、これらのクラスのいずれかを使用していない場合は、より具体的にしてください):

X509Certificate x = ...;
byte[] issuer = x.getIssuerX500Principal().getEncoded();

他のヒント

ISSUERDNは複雑な構造であり、異なるライブラリには、それを文字列に「シリアル化」するメカニズムが異なる場合があります。そのため、アプローチを再考する必要があるかもしれません。一般に、証明書自体のハッシュ自体(全体で) +シリアル番号の比較を使用しても構いません(衝突の可能性をほぼ0にもたらすため)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top