在我的应用中,我正在使用发行人名称的SHA256(x509certimpl.getissuerdn()。getName())和证书序列号来唯一识别证书,但是现在我已经意识到X509NAME的其他实现是弹力的实现Castle Library会在我调用BCX509NAME.GEGNAME()时显示一些不同的内容,因此此标识符对我不起作用...我的问题是我如何获得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