我有两个x509Certificates
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);
但是这总是假的???
请问,请帮助我理解上面方法顶点(..)返回总是错误的原因。
编辑:
X509Certificate有方法验证(公钥)。
答案 0 :(得分:1)
想用a的公钥解密b的内容:
不,你不会。证书未加密。
您真正想要做的是验证证书,该证书通过其公钥完成,可以从证书本身或从同一公钥的第二个来源获得。< / p>
使用不同证书的公钥进行验证并不合理。
在任何情况下,X509Certificate
都已包含足够的verify()
方法。