java - 如何比较 java.security.cert.X509Certificate 的不同实现

标签 java bouncycastle x509 pki

我在应用程序的不同部分使用了 bouncycaSTLe org.bouncycaSTLe.jce.provider.X509CertificateObject 和 sun.security.x509.X509CertImpl,有时我需要比较它们是否相等,equals() 方法不起作用并且像 getSubjectDN().getName() 这样的方法对这些实现中的每一个显示不同的结果,我如何在不进行二进制 DER 或 PEM 比较的情况下比较这些证书的相等性?

最佳答案

判断两个证书是否相等的安全方法是比较它们的二进制表示。 Bouncy CaSTLe 和 Sun 的实现都具有 getEncoded 方法。您可以将两者与 Arrays#equals 进行比较。

您应该避免比较 SubjectDN 或 IssuerDN 字符串,即使在二进制级别上它们完全相等,表示形式也很可能不同。在与 .NET 交互时,我不得不以艰难的方式学习这一点——对于更奇特的 RDN,各个相对专有名称(例如 CN、O、OU...)的命名是不同的。我的建议是留在二进制级别进行比较,棘手的高级比较容易出错且更难维护。

关于java - 如何比较 java.security.cert.X509Certificate 的不同实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6802421/

相关文章:

c# - 如何使用 BouncyCaSTLe (C#) 导入 ASN.1 格式的 DSA 签名

java - GCM 服务器推送失败并出现 SSLException (Java)

ssl - 将证书转换为 X.509

java - 在 python 3.4 中使用 java 和 nltk

java - 如何从数据库查询返回ArrayList?

java.io.NotSerializableException 和实现 Serializable

java - 使用 iText 访问智能卡

java - 我应该为从 getter 返回的每个对象编写复制构造函数吗

cryptography - 从 .p12 或 .pem 证书创建 X509 证书

c# - 使用私钥将 X509Certificate2 导出到字节数组