如何验证x509证书的签名?

问题描述 投票:0回答:1

我有两个X509证书对象x1和x2。

我想验证x2是否已由x1签名。

我认为这是通过x1的公钥和x2的签名完成的。

如何精确执行此操作?

我还想知道是否通常将x2的发行方与x1的主题逐字节进行比较,如果它们不同则显示错误。

我找到了此12456079帖子,但我不知道。

java x509certificate
1个回答
0
投票

您正在寻找证书链,这在PKI(公钥基础结构)中很常见。一个证书可以签署另一个证书,以表明该证书可以信任。

在简单的示例中,将有一个自签名且受信任的根证书-每个人都信任此证书。接下来,您可以要求该证书的所有者使用Root的证书私钥对您的证书进行签名。因此,如果某人想要使用您的证书,他可以检查您的证书是否已由Root证书签名,并且如果他信任Root证书-他也可以信任您。

在Java中,您可以使用类似的方法检查证书是否由相应证书的私钥签名:

X509Certificate yourCert = ...
X509Certificate root = new ...

try {
    yourCert.verify(root.getPublicKey()); } 
catch (CertificateException | NoSuchAlgorithmException | InvalidKeyException | NoSuchProviderException e) {
    //handle wrong algos
} catch (SignatureException ex) {
    //signature validation error
}

Certificate::verify用于此目的:

验证此证书已使用与指定的公钥相对应的私钥签名。

© www.soinside.com 2019 - 2024. All rights reserved.