在我的应用程序中,我使用颁发者名称 (x509CertImpl.getIssuerDN().getName()) 的 sha256 和证书序列号来唯一标识证书,但现在我已经意识到 X509Name 的其他实现作为 Bouncy 的实现当我调用 bcX509Name.getName() 时,Castle 库显示一些不同的东西,所以这个标识符对我不起作用......我的问题是我如何获得 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 是一个复杂的结构,不同的库可能具有将其“序列化”为字符串的不同机制。所以你可能需要重新考虑你的方法。一般来说,可以使用证书本身的哈希(整体)+序列号比较(使冲突的可能性几乎为零)。
于 2011-07-25T16:18:45.080 回答