如何检查证书A是否在Java中将证书B作为颁发者? - > X509Certificates

时间:2015-01-26 09:55:01

标签: java ssl x509certificate

我有两个X509Certificates,其中一个上传,另一个应该是发行人。检查给定证书是否为上载证书的颁发者的最简单方法是什么? 这应该用Java来完成。

1 个答案:

答案 0 :(得分:2)

您需要验证两点:

  • 上传的证书颁发者DN 等于颁发者证书主题DN
  • 上传的证书已由颁发者证书私钥签名。

可以使用此java代码段

来完成
public boolean check(X509Certificate issuer, X509Certificate uploaded) {
  Principal subjectDN = issuer.getSubjectDN();
  Principal issuerDN = uploaded.getIssuerDN();
  if (!subjectDN.equals(issuerDN)) {
      return false;
  }
  PublicKey pubKey = issuer.getPublicKey();
  try {
      uploaded.verify(pubKey);
  } catch (Exception e) {
      return false;
  }
  return true;
}

为了清晰和简洁的原因,我在该代码示例中添加了捕获所有异常。请注意,这可能会导致误报(即,即使上传的证书已由颁发者证书颁发,也会返回false),例如,当任何已安装的加密提供程序不支持签名算法时。