如何验证x509证书的签名?

2023-12-31

我有两个 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(使用前将#替换为@)

如何验证x509证书的签名? 的相关文章

随机推荐

  • 设计一种有效的算法,以少于 8 次的比较对 5 个不同的键进行排序

    设计一种有效的算法来对 5 个不同的 非常大的 键进行排序 在最坏的情况下少于 8 次比较 您不能使用基数排序 比较A 与B 以及C 与D WLOG 假设A gt B 且C gt D 比较A和C WLOG 假设A gt C 将 E 排序为
  • 如何在 Three.js 中将文本附加到立方体的顶点?另外,我可以在立方体内的任何位置添加文本吗?

    我正在尝试使用 Three js 为项目创建一个多维数据集 我需要将文本添加到顶点以及立方体内的不同点 知道如何做到这一点吗 有关在 Three js 中使用 Sprite 对象的一些基本代码示例 请查看 http stemkoski gi
  • 在插入时将自动增量值复制到另一列?

    基本上我有一个产品版本表 所以它有两列感兴趣 id product id id is an autoincrement column product id只是一个int 当产品第一次被创建时product id来自id 编辑产品时 我们复制
  • 如何将多个模块分组到一个命名空间中?

    我有一个 python3 5 项目 我决定为每个模块创建一个类 我决定这样做是因为我发现我的文件很长而且我很难理解发生了什么 进行更改后 我感觉我在每个导入文件中重复自己 from school student import Student
  • 如何在 iOS 中创建多行字符串或多行标签作为 CGPath?

    API支持这个吗 如果没有 我该怎么办 有CTFontCreatePathForGlyph在 Core Text 中 它可以将单个字符转换为路径 我可以在循环中使用它来创建我的字符串作为路径 但我必须处理间距和字偶距以及所有其他令人讨厌的事
  • 调用 didRangeBeacon 时未找到任何信标

    我注册了自己的位置管理器来监视和测距一些信标 self locationManager startMonitoringForRegion region self locationManager startRangingBeaconsInRe
  • 如何让android应用程序始终保持登录状态?

    现在我正在尝试创建一个 Android 应用程序 假设它将是某种 X 概念 所以我正在创建一个登录屏幕 我想做的是 如果我在手机上登录该应用程序 那么每当我尝试访问该应用程序时 它应该始终登录 例如我们手机中的 Facebook G mai
  • 返回前正确,返回后错误

    我已经在谷歌上搜索了几个小时 但没有运气 我正在使用标准c 调用一个非常简单的方法 并返回正确的值 但返回后的值完全错误 call declare the gross and ficaTax variables double gross d
  • 未生成资源文件代码

    我有我的默认资源文件Resources resxVisual Studio 很好地生成了一个designer cs类 但是当我尝试创建Resources de DE resx 它不会生成 我检查了两个文件的所有属性是否相同 它确实生成Res
  • 在 Macintosh 上安装 OpenCV

    我一直在关注这个教程 http blogs wcode org 2014 10 howto install build and use opencv macosx 10 10 http blogs wcode org 2014 10 how
  • PHP 服务器返回的 JSON 数据为空

    我很难弄清楚这个问题 似乎无论我尝试什么 PHP 总是最终返回一个空数组 这是我的主文件 index php 的代码
  • 从 Web 应用程序打印到客户端打印机

    如果我有一台打印机直接连接到 PC 带有打印机的信息亭 我将如何创建网页 net Web 应用程序 将 jpg 打印到信息亭打印机的功能 而无需用户干预 除了单击页面上的按钮 这个问题已经被问过好几次了 结果总是你can t通过普通的网络技
  • Ionic 2 / 3 / 4:如何将标题中的按钮与标题右侧对齐

    如何与右侧对齐 按钮显示在标题左侧 没有撰写图标 这是我正在做的事情
  • Nginx 位置匹配中的变量捕获

    假设我有一个像这样的 URL www example com a b sth 我在 Nginx 配置中编写了一个位置块 location a b
  • C# 中的 3D 数学有什么好的库吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一个工具 它将用于处理一堆 3D 数据 执行诸如旋转对象 平移 缩放和所有这些好东西之类的操
  • 如何向用户询问文件名?

    搜索 FileDialog 的调用 我想向用户询问 Pharo 4 0 中的文件名 通过观察员我找到了班级 FileDialogWindow 用一种方法 answerFileName 寻找 answerFileName 的发件人 我去上课
  • Google Maps API:缩放时 SVG 标记相对于地图移动

    我在地图上创建了两个标记 一个是标准标记 另一个使用 SVG 路径 当我缩小时 标准标记不会相对于地图移动 但 SVG 标记会相对移动 这是一个小提琴 你可以明白我的意思 http jsfiddle net 9A4ET http jsfid
  • 如何使用 Spray Routing 测试自定义 Json 对象

    我正在 mongodb 之上创建一个带有 Spray routing 的 Rest API 以进行一些 CRUD 操作 这一切都工作正常 预计每当我尝试使用 specs2 测试它时 以下规格 class RestServiceSpec ex
  • 使用 MapView 抛出 ClassNotFoundException

    我正在努力寻找这段代码锁定的原因 据我所知 我在清单文件中声明了正确的权限 如下所示 我尝试在实际设备 Droid x w 2 3 3 和 AVD 上运行它 但没有成功 我还附加了 logcat 这使我遇到了 classnotfound 异
  • 如何验证x509证书的签名?

    我有两个 X509Certificate 对象 x1 和 x2 我想验证 x2 是否由 x1 签名 我认为这是通过 x1 的公钥和 x2 的签名来完成的 具体如何做到这一点 我还想知道将 x2 的发行者与 x1 的主题进行逐字节比较并在不同