证书发行人的唯一标识符(X509NAME)
-
26-10-2019 - |
题
在我的应用中,我正在使用发行人名称的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)。
不隶属于 StackOverflow