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

Jai*_*zel 2 java bouncycastle pki x509

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

emb*_*oss 5

判断两个证书是否相等的一种安全方法是比较它们的二进制表示.Bouncy Castle和Sun的实现都采用了一种getEncoded方法.您可以将两者与Arrays#equals进行比较.

您应该避免比较SubjectDN或IssuerDN字符串,即使在二进制级别它们完全相等,表示也很可能不同.在与.NET连接时,我必须学习这一点 - 单个相对可分辨名称(例如CN,O,OU ......)的命名对于更具异国情调的RDN是不同的.我的建议是保持二进制级别进行比较,棘手的高级别比较容易出错且难以维护.