【问题标题】:How to verify one certificate with public key of another [closed]如何使用另一个证书的公钥验证一个证书[关闭]
【发布时间】:2014-09-30 09:19:03
【问题描述】:

我有两个 x509 证书

X509Certificate a;
X509Certificate b;

我想用 a 的公钥验证 b 的签名,其中 a 是 b 的颁发者。

到目前为止我所拥有的是:

 public static boolean verify(String algorithm, byte[] content, byte[] signature, X509Certificate certificate) {
  try {
     Signature s = Signature.getInstance(algorithm, PROVIDER);
     s.initVerify(certificate);
     s.update(content);
     return s.verify(signature);
  } catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException e) {
     throw new IllegalArgumentException(e);
  }

}

我调用方法:

 verify(a.getSigAlgName(), a.getSignature(), b.getSignature(), b);

但这总是返回错误???

请您帮我理解一下上述方法 vertify(..) 总是返回 false 的原因。

编辑:

X509Certificate 有一个方法 verify(Public key)。

【问题讨论】:

    标签: java encryption certificate x509certificate x509


    【解决方案1】:

    想用 a 的公钥解密 b 的内容:

    不,你不会。证书未加密。

    您真正要做的是验证证书,该证书是通过其公钥完成的,从证书本身或从同一公钥的第二个来源获得。

    用一个不同证书的公钥验证它开始变得没有意义了。

    无论如何X509Certificate 已经包含了足够的verify() 方法。

    【讨论】:

    • 我的目标是检查证书 b 是否由 a 签名。我没有找到解决方案,所以我认为这是方法,但你是对的,谢谢。你知道,我如何验证 b 是否由 a 签名?
    • 我只能重复上面所说的。 Certificate.verify() 方法已经足够了。您提供应该签署它的实体的公钥。您不需要所有其他代码。
    • 非常感谢,我发现 x509Certificate 有一个方法 verify(Public key) 正是我要找的
    • 这就是我告诉你的。两次。没有“我发现”了。
    猜你喜欢
    • 2013-07-26
    • 2012-09-13
    • 2013-09-13
    • 2011-10-08
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2016-01-27
    相关资源
    最近更新 更多