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

How do i check if certificate A got certfiicate B as issuer in Java? --> X509Certificates

我有两个X509Certificates,其中一个已上传,另一个应该是Issuer。检查给定证书是否是上传证书的颁发者的最简单方法是什么? 这应该用 Java.

来完成

您需要验证两点:

  • 上传的证书颁发者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;
}

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