Java 如何验证x509证书的签名?
我有两个X509Certificate对象x1和x2 我想验证x2是否由x1签名 我认为这是用x1的公钥和x2的签名完成的 具体怎么做 我还想知道,将x2的颁发者与x1的主题逐字节进行比较是否是一种常见做法,如果它们不同,则显示一个错误Java 如何验证x509证书的签名?,java,x509certificate,Java,X509certificate,我有两个X509Certificate对象x1和x2 我想验证x2是否由x1签名 我认为这是用x1的公钥和x2的签名完成的 具体怎么做 我还想知道,将x2的颁发者与x1的主题逐字节进行比较是否是一种常见做法,如果它们不同,则显示一个错误 我找到了这篇文章,但我想不通。您正在寻找证书链,这是PKI(公钥基础设施)中常见的东西。一个证书可以对另一个证书进行签名,以表明此证书是可信的 在简单的示例中,将有一个自签名且受信任的根证书—每个人都信任此证书。接下来,您可以要求此证书的所有者使用Root的证书
我找到了这篇文章,但我想不通。您正在寻找证书链,这是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
}
本条例旨在:
验证此证书是否使用与指定公钥对应的私钥签名
由于X509Certificate
扩展了Certificate
,因此可以在X509Certificate
实现上使用此方法(因为X509Certificate
是一个抽象类)
此外,您还可以查看哪些采用了PublicKey
和Provider
实现。否。您通常不使用自己的x.509处理。除非你是为社区审查构建安全框架的密码学专家,否则你不应该启动自己的x.509处理。我正在使用PDFBox阅读一个签名的PDF文件,我需要验证证书链。我不知道这有什么关系。使用X509库来正确处理证书,甚至不考虑进行手动验证。我用一个无效的自签名证书(无效签名)加载了一个PDF文档。PDFBox和BouncyCastle在验证内容时都没有抱怨。所以,如果你能告诉我这个自动验证是如何工作的,那就太好了(我不相信有一个:-)。