Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何验证x509证书的签名?_Java_X509certificate - Fatal编程技术网

Java 如何验证x509证书的签名?

Java 如何验证x509证书的签名?,java,x509certificate,Java,X509certificate,我有两个X509Certificate对象x1和x2 我想验证x2是否由x1签名 我认为这是用x1的公钥和x2的签名完成的 具体怎么做 我还想知道,将x2的颁发者与x1的主题逐字节进行比较是否是一种常见做法,如果它们不同,则显示一个错误 我找到了这篇文章,但我想不通。您正在寻找证书链,这是PKI(公钥基础设施)中常见的东西。一个证书可以对另一个证书进行签名,以表明此证书是可信的 在简单的示例中,将有一个自签名且受信任的根证书—每个人都信任此证书。接下来,您可以要求此证书的所有者使用Root的证书

我有两个X509Certificate对象x1和x2

我想验证x2是否由x1签名

我认为这是用x1的公钥和x2的签名完成的

具体怎么做

我还想知道,将x2的颁发者与x1的主题逐字节进行比较是否是一种常见做法,如果它们不同,则显示一个错误


我找到了这篇文章,但我想不通。

您正在寻找证书链,这是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在验证内容时都没有抱怨。所以,如果你能告诉我这个自动验证是如何工作的,那就太好了(我不相信有一个:-)。