如何查看 PKCS 7 文件中签署了哪些属性?

2024-03-19

我有一个PKCS 7 https://en.wikipedia.org/wiki/PKCS_7文件,其中包含签名数据。它成功验证:

openssl smime -verify -in data.p7s -CAfile root-certificate.pem

Output:

Verification successful
Signed data

但是当我提取签名部分时,我看不到它实际上与签名的内容相同。我的意思是以下步骤:

openssl asn1parse -in data.p7s

Output:

...
   35:d=4  hl=2 l=   9 prim: OBJECT            :pkcs7-data
   46:d=4  hl=2 l=inf  cons: cont [ 0 ]
   48:d=5  hl=2 l=inf  cons: OCTET STRING
   50:d=6  hl=2 l=   5 prim: OCTET STRING      :(my data is here in plaintext)
...
(then the signed block starts:)
 2861:d=6  hl=2 l=   9 prim: OBJECT            :rsaEncryption
 2872:d=6  hl=2 l=   0 prim: NULL
 2874:d=5  hl=4 l= 256 prim: OCTET STRING      [HEX DUMP]:<signed data is here>

我剪了[HEX DUMP]与签名数据:

dd if=data.p7s of=signed-part.bin bs=1 skip=2878 count=256

用对应的公钥解密:

openssl rsautl -verify -in signed-part.bin -pubin -inkey root-public-key.pem -out verified-data.bin

看看结果:

openssl asn1parse -inform der -in verified-data.bin

Output:

 0:d=0  hl=2 l=  33 cons: SEQUENCE
 2:d=1  hl=2 l=   9 cons: SEQUENCE
 4:d=2  hl=2 l=   5 prim: OBJECT            :sha1
11:d=2  hl=2 l=   0 prim: NULL
13:d=1  hl=2 l=  20 prim: OCTET STRING      [HEX DUMP]:<hash here>

This [HEX DUMP] is not the SHA-1 https://en.wikipedia.org/wiki/SHA-1我的原始数据的总和。

我不明白为什么哈希值不同。显然,它是与我的原始数据不同的哈希值。哈希值是否还涵盖任何“经过身份验证的属性”?如果是,如何查看到底有哪些属性已被散列和签名?


使用不同的样本:

OpenSSL asn1parse对识别经过身份验证的属性没有多大帮助。您可以使用 OpenSSLcms:

openssl cms -in data.p7s -noout -cmsout -print

寻找signedAttrs(在 CMS 术语中,“签名属性”是现在对“经过身份验证的属性”的称呼)

它看起来像这样:

    ...
    signerInfos:
        ...
        signedAttrs:
            object: contentType (1.2.840.113549.1.9.3)
            value.set:
              OBJECT:pkcs7-data (1.2.840.113549.1.7.1)
            object: signingTime (1.2.840.113549.1.9.5)
            ...

现在回到asn1parse输出,并找到相应的部分,可能如下所示:

 ...
 1343:d=5  hl=3 l= 216 cons:      cont [ 0 ]
 1346:d=6  hl=2 l=  24 cons:       SEQUENCE
 1348:d=7  hl=2 l=   9 prim:        OBJECT            :contentType
 1359:d=7  hl=2 l=  11 cons:        SET
 1361:d=8  hl=2 l=   9 prim:         OBJECT            :pkcs7-data
 1372:d=6  hl=2 l=  28 cons:       SEQUENCE
 1374:d=7  hl=2 l=   9 prim:        OBJECT            :signingTime
 ...

(为了这个漂亮的缩进,添加-i option)

现在,提取(dd ...) 数据,包括 DER 上下文标记标头,即本例中的偏移量 1343、长度 219。然后更换0xa0开头的字节0x31。为什么你必须这样做,描述于DER 编码 - 如何将隐式标签转换为显式标签 https://stackoverflow.com/questions/3638495/der-encoding-how-to-convert-implicit-tag-to-explicit-tag, or RFC5652,第 5.4 节 https://www.rfc-editor.org/rfc/rfc5652#section-5.4

该数据的 SHA-1 哈希值现在应该匹配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查看 PKCS 7 文件中签署了哪些属性? 的相关文章

  • BIO中的B代表什么?

    OpenSSL 使用称为 I O 抽象BIO http www openssl org docs crypto bio html 但我在文档中找不到任何地方说明 B 代表什么 IO 显然是输入 输出 各种网站表明 B 代表basic or
  • 致命错误:调用未定义的函数 openssl_random_pseudo_bytes()

    我在尝试运行 PHP 单元测试时遇到此异常 致命错误 调用未定义的函数 openssl random pseudo bytes 这是什么意思 我遇到过同样的问题 我通过编辑我的解决方案php ini文件改变 extension php op
  • 如何在ssl连接期间加载客户端证书以进行相互身份验证?

    我无法在 ssl 连接上加载客户端证书 以便服务器可以对其进行身份验证 可能是什么问题 LoadCertificates 函数可以正常加载服务器证书 我能够在客户端获取服务器证书 但无法在服务器端获取客户端证书 我还想验证证书是否由正确的
  • 如何使用私钥对字符串进行签名

    如何使用以下方式获取字符串的签名SHA1withRSA如果我已经拥有私钥byte or String 我想你所说的是你事先知道密钥对并且想用它来签名 验证 请看下面的代码 import java security KeyPair impor
  • Indy10 + OpenSSL:发送电子邮件代码在 Windows 8 上停止工作

    代码在 Windows 8 上停止运行 它在 Windows7 Windows XP 上运行良好 我找到了解决此问题的方法 以 Windows 兼容模式启动应用程序 Windows XP Service Pack 3 代码工作 如果 Win
  • 超线程性能比较

    我写了一个项目 其中使用了一些基本功能openssl例如RAND bytes and des ecb encrypt 我的电脑有 i7 2600 4 核和 8 个逻辑 CPU 当我用 4 个线程运行我的项目时 将花费 10 秒 当我用 8
  • 从原始 r 和 s 创建 DER 格式的 ECDSA 签名

    我有一个原始 ECDSA 签名 R 和 S 值 我需要 DER 编码版本的签名 有没有一种直接的方法可以使用 c 接口在 openssl 中执行此操作 我目前的尝试是使用i2d ECDSA SIG const ECDSA SIG sig u
  • CSR 签名如何运作?

    我正在尝试签署一份CSR http en wikipedia org wiki Certificate signing request文件输入PEM http en wikipedia org wiki X 509 Certificate
  • 使用 openssl 生成自签名证书时如何设置密钥规范或 KEYEXCHANGE 属性

    我在 windows 2012R2 上使用 open ssl 来生成自签名证书 使用下面的命令我生成了证书 openssl genrsa des3 out ab key openssl req new x509 key ab key out
  • 为什么 Java 的 keytool 没有显示使用 openssl 创建的 PKCS12 信任存储的条目?

    我不确定为什么 Javakeytool认为我的 p12密钥库为空 如果我创建一个新的自签名证书并将其放入truststore p12pkcs12 密钥库openssl 像这样 openssl req x509 newkey rsa 4096
  • 使用随机数生成引擎

    我正在尝试使用兰德 字节 https www openssl org docs crypto rand htmlOpenSSL 的 API 但我想尝试使用各种随机数生成引擎 在 OpenSSL 中是否有推荐的生成随机字节并添加熵的方法 我在
  • 在 Objective-C 中以编程方式创建 .pem 文件?

    我正在尝试使用 iPhone 应用程序中的 Objective C 和 OpenSSL 库以编程方式从证书签名请求创建 PEM 文件 我按照 Adria Navarro 对这个问题的回答生成了 CSR 类型为 X509 REQ 使用钥匙串存
  • Mechanize 出现 SSL 错误

    我得到了这些命令irb require mechanize agent Mechanize new agent get https monabo lemonde fr customer account forgotpassword 我收到这
  • 如何管理错误“OpenSSL v1.1.1 ssl_choose_client_version 不支持的协议”? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 尝试通过以下方式连接到 VPN 时openvpn我收到以下错误openssl Tue Oct 30 11 34 16 2018 WARNI
  • 在 XCode 中静态链接 OpenSSL

    我正在尝试链接libssl a and libcrypto aXCode 命令行项目中的静态库 在 Link Binary With Libraries 下 我已在搜索路径中包含 Openssl 头文件 编译成功但执行失败dyld Libr
  • 导入错误:无法导入名称 md5

    真的不知道这里发生了什么 我需要在弹性beanstalk上部署我的flask应用程序 但不知何故改变了路径并且无法再运行python application py dotnet info NET Core SDK reflecting an
  • 当 SSL_get_fd 返回 -1 时,这意味着什么?

    我正在使用 frida 分析一个程序 该程序肯定通过 SSL 连接到某个服务器 当我打电话时SSL get fd 它返回 1 从文档中我看到这意味着ssl不包装套接字 BIO 已明确配置 因为我可以通过SSL get rbio openss
  • 以编程方式验证 X509 证书和私钥匹配

    我使用以下命令创建了 RSA 密钥对EVP aes 256 cbc 密码 私钥采用 PEM 编码并具有密码 这需要用户输入密码 这是创建私钥的调用 Save private key bio priv BIO new file full as
  • 如何将 OpenSSL 与 WinSock 一起使用?

    我在网上搜索过 但没有找到任何与此相关的内容 有谁有使用 WinSock 和 OpenSSL 的简单代码示例吗 我正在寻找一个简单的 Visual C 2005 或更高版本的代码示例 它创建并打开一个 Winsock 连接 并使用 Open
  • 向 Python 2.6 添加 SSL 支持

    我尝试使用sslPython 2 6 中的模块 但我被告知它不可用 安装OpenSSL后 我重新编译2 6 但问题仍然存在 有什么建议么 您安装了 OpenSSL 开发库吗 我必须安装openssl devel例如 在 CentOS 上 在

随机推荐

  • 如何为iMessage Sticker App网格贴纸提供不同尺寸

    我创建了一个 iOS iMessage 贴纸应用程序 根据苹果文档 我应该能够以三种不同尺寸之一显示贴纸 但是 无论我将贴纸图像设置为什么尺寸 300px x 300px 408px x 408px 618px x 618px 它们仅显示为
  • Golang 中的函数声明

    在 Golang 中声明函数似乎有两种不同的方式 如下所示 package main import fmt var someFunc func arg string fmt Println arg func main someFunc He
  • 如何在 ruby​​ 中进行 base58 编码?

    我正在尝试编码原型股 http protoshares net 原始格式的钱包地址 如中所述Bitcoin https en bitcoin it wiki Technical background of Bitcoin addresses
  • Jupyter 和 Common Lisp

    我正在尝试安装cl jupyter https github com fredokun cl jupyter common lisp 内核Jupyter http jupyter org 我无法让它工作 当我打开一个新的 lisp 笔记本
  • 如何将文本框中的日期插入数据库

    请帮助我将日期从文本框中以 dd mm yyyy 格式插入到 SQL Server 我的代码如下 int prio Convert ToInt32 Priority Text string stdate planstart Text str
  • 解析装饰器中的 args 和 kwargs

    我有一个需要 args 和 kwargs 的函数 我需要根据 args 和 kwargs 的值在我的装饰器中做一些事情2nd函数中的arg 如下面的代码所示 def workaround func def decorator fn def
  • 从 UWP 应用检查转储文件

    首先 我在 Windows 10 手机上启用转储文件的保存 设置 gt 更新和安全 gt 对于开发人员 gt 保存这么多故障转储 3 然后我调试了一个引发异常的应用程序 我停止后继续调试 断开并再次连接手机后 我能够访问存储在下的转储文件W
  • ASP.Net MVC 中静态文件的永久重定向旧路由

    我们旧的 ASP net 站点将静态图像存储在根目录的子目录中 名为 images 我们新的 ASP net MVC 站点将这些图像存储在新的布局中 内容 图片 我已经更改了网站中的所有页面以适应新的文件夹结构 但我想设置从旧静态图像到新位
  • 为什么表格比 CSS 更糟糕? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP MYSQL 关联数组和表

    这是一个代码 这会从数据库动态加载所有标题部分 即表的标题 下面的代码工作正常 但该列不匹配 即标题的第一行第一列是空白的并且表格中存在错位 Code table border 1 th th table
  • 如何在特定时间和日期运行函数?

    如何在给定时间和日期运行函数 示例 我有一个函数需要在每月 12 日上午 10 点运行 如果这很重要 此页面将 24 7 运行 显然我必须与当前日期进行比较 但我不确定如何检查当前日期和时间是否匹配 Shannon 不建议使用setInte
  • 计算大负值的指数

    我想知道R中如何得到大负数的指数 例如 当我尝试时 gt exp 6400 1 0 gt exp 1200 1 0 gt exp 2000 1 0 但我需要上面表达式的值 即使它很小 我怎样才能在R中得到它 这些数字太小了 要了解您的计算机
  • 列表视图中空白区域的上下文菜单

    我有一个简单的 LinearLayout 里面有 ListView match parent宽度和高度 我需要一个上下文菜单 以便在长时间触摸列表视图中的任何位置时显示 首先 我打电话registerForContextMenu对于列表视图
  • AVPlayer 是否支持在单独的文本文件中提供隐藏式字幕?

    我的团队开发使用 AVPlayer 播放视频的 iOS 应用程序 最近我们被告知 必须允许显示所有视频的隐藏式字幕 但隐藏式字幕不会作为视频文件中的轨道出现 我们已经支持以这种方式出现的隐藏式字幕 相反 我们会将它们作为单独的文本文件获取
  • 与SSE性能相同

    我对以下循环进行了矢量化 该循环出现在我正在开发的应用程序中 void vecScl Node A Node B long val int fact round dot const for i 0 i
  • Symfony 命令中的 RenderView 用法

    如何在 symfony 命令内 而不是在控制器内 使用 this gt renderView 我对 renderView 功能很陌生 但是我必须设置什么才能在命令中使用它 预先感谢您的问候 您的命令类必须扩展ContainerAwareCo
  • 如何在 MySql 的 SQL 查询中将行折叠成逗号分隔的列表

    在 T SQL 中 将相关值连接到 SQL 查询中的逗号分隔字符串中相对简单 请参见此处 将 SELECT 的行折叠成字符串的最佳方法是什么 https stackoverflow com questions 822615 what is
  • 将目录中的所有 csv 文件导入为 pandas dfs 并将其命名为 csv 文件名

    我正在尝试编写一个脚本 将目录中的所有 csv 文件作为数据帧导入到我的工作区 每个数据帧应命名为 csv 文件 减去扩展名 csv 这是我到目前为止所拥有的 但很难理解如何为循环中的数据帧分配正确的名称 我看过建议使用的帖子exec 但这
  • 我可以使用 git-svn 并看起来像我在使用 SVN 吗?如果是的话,如何?

    我习惯了 git 并且非常喜欢它 但是我的一个客户 仍然 使用 subversion 我现在不太了解 svn 但我知道有一个 git svn 包 我知道可以使用 git 从 svn 获取存储库 但是我可以使用 git 而不是 svn 并仍然
  • 如何查看 PKCS 7 文件中签署了哪些属性?

    我有一个PKCS 7 https en wikipedia org wiki PKCS 7文件 其中包含签名数据 它成功验证 openssl smime verify in data p7s CAfile root certificate