我有两个 X509Certificate 对象 x1 和 x2。
我想验证 x2 是否由 x1 签名。
我认为这是通过 x1 的公钥和 x2 的签名来完成的。
具体如何做到这一点?
我还想知道将 x2 的发行者与 x1 的主题进行逐字节比较并在不同时显示错误是否是常见做法。
我找到了这个12456079 https://stackoverflow.com/questions/12456079/java-keystore-verify-signed-certificate帖子,但我无法弄清楚。
您正在寻找证书链,这在 PKI(公钥基础设施)中很常见。一个证书可以对另一个证书进行签名,以表明该证书是可信的。
在简单的示例中,将有一个自签名且受信任的根证书 - 每个人都信任该证书。接下来,您可以要求该证书的所有者使用 Root 的证书私钥对您的证书进行签名。因此,如果有人想使用您的证书,他可以检查您的证书是否由根证书签名,如果他信任根证书 - 他也可以信任您。
在 Java 中,您可以使用如下命令检查证书是否由相应证书的私钥签名:
X509Certificate yourCert = ...
X509Certificate root = ...
try {
yourCert.verify(root.getPublicKey()); }
catch (CertificateException | NoSuchAlgorithmException | InvalidKeyException | NoSuchProviderException e) {
//handle wrong algos
} catch (SignatureException ex) {
//signature validation error
}
The Certificate::verify https://docs.oracle.com/javase/8/docs/api/java/security/cert/Certificate.html#verify-java.security.PublicKey-服务于此目的:
验证此证书是否是使用与指定公钥对应的私钥签署的。
Since X509Certificate
延伸Certificate
你可以使用这个方法X509Certificate
实施(自X509Certificate
is an abstract
class).
您也可以看看X509Certificate::verify(PublicKey, Provider) https://docs.oracle.com/javase/8/docs/api/java/security/cert/X509Certificate.html#verify-java.security.PublicKey-java.security.Provider-这需要PublicKey
and Provider
执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)