为了账号安全,请及时绑定邮箱和手机立即绑定

如何验证x509证书的签名?

如何验证x509证书的签名?

喵喔喔 2023-09-06 15:00:37
我有两个 X509Certificate 对象 x1 和 x2。我想验证 x2 是否由 x1 签名。我认为这是通过 x1 的公钥和 x2 的签名来完成的。具体如何做到这一点?我还想知道将 x2 的发行者与 x1 的主题进行逐字节比较并在不同时显示错误是否是常见做法。
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

您正在寻找证书链,这是 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

}

Certificate::verify目的是:

验证此证书是否是使用与指定公钥对应的私钥签署的。


由于X509Certificate扩展,Certificate您可以在实现上使用此方法X509Certificate(因为X509Certificate是一个abstract类)。


您还可以查看X509Certificate::verify(PublicKey, Provider)哪些需要PublicKeyProvider实施。



查看完整回答
反对 回复 2023-09-06
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信