証明書発行者の一意の識別子(x509Name)
-
26-10-2019 - |
質問
私のアプリでは、発行者名(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にもたらすため)。
所属していません StackOverflow