我在应用程序的不同部分使用了 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/