基于公钥标准的密码工作站。 解析和查看ASN1结构的函数

创建cryptoarmpkcs实用程序时的主要工作不是代码或图形界面的开发,而是ASN1结构的工作。 在这些结构中,存储了x509v3证书,电子文档签名(PKCS#7,CMS),证书请求(PKCS#10,CSR),公钥和私钥,PKCS#12 / PFX安全容器,已撤销的CRL证书和时间戳的列表。电子签名,OCSP请求和响应等等。 经常不得不查看现有结构以了解其他人是如何做到的,还要查看我们自己组装的AN1结构。 这个过程很清楚。 但是,由于我使用Linux(现在是Mageia,并且还准备在Linux上使用Windows的代码),因此NSS软件包中的openssl和derdump实用程序都来自可用于解析ASN1结构的工具。 就个人而言,我的偏好是在降级方面。 正是她成为了derdump.tcl / tclderdump实用程序的原型,在这里考虑用于查看ASN1结构。 而且,如果将NSS软件包中的derdump实用程序的输出与derdump.tcl实用程序进行比较,则几乎看不到任何区别:



差异与oid名称有关。 该实用程序具有以下语法:

$dertcl.tcl < > <  | stdout> <1 | 0> <der | pem | hex> 

在哪里

  • <输入文件>-指示具有ASN1结构的文件的路径;
  • <输出文件>-指示将保存分析结果的文件:如果将stdout指定为输出文件,则结果将发送到标准输出;
  • 第三个参数表示必须显示完整的(1)信息;
  • 第四个参数设置输入文件的格式,其中der是二进制文件,pem表示文件包含base64编码的数据,标题为“ ----- BEGIN ...-”,尾部为“ ----- END ...-”按照openssl的惯例,最后十六进制表示文件包含十六进制代码。 此外,它可能包含特殊字符(\ r,\ n,\ t),空格和字符“。”。 和“:”。 点和冒号符号的来源将在下面清楚显示。

十六进制格式对我来说至关重要。 确实,为了解析已解析文件中的任何片段,您必须将其转换为二进制形式(der编码),然后再次将其传递给实用程序。 十六进制格式使生活更加轻松。

当然,使用纯tcl代码(以及使用任何其他脚本代码,例如python)并不完全适合。 因此,这些实用程序包含在Linux,Windows和OS X平台的tclderdump发行版中,这些发行版是自给自足的:下载并运行。

但是回到查看以十六进制存储的ASN1结构的功能。 除了上述用于查看ASN1结构的实用程序之外,还有一个很好的用Python编写的pyderasn实用程序,该实用程序在输出中使用点号和冒号字符,因此决定它们也可以以十六进制代码形式出现。 以下是使用derdump.tcl和pederasn实用程序解析相同的x509 v.3证书的结果:



但是我还想要更多,即图形界面和动态分析内部块的功能。 决定将此功能添加到cryptoarmpkcs实用程序中,特别是因为该功能尚待开发,例如可以对接收者证书上的文档进行加密。 同样,这里也离不开观众ASN1结构。

为此,决定重新定位功能按钮“令牌信息”。 我们重新调整了按钮的方向,并为其分配了新功能“ View ASN1结构”,您仍然可以通过将光标移到“选择令牌/智能卡”标签右侧的令牌名称上来获取有关已连接令牌信息:



这里的一切都很简单。 我们选择具有ASN1结构的文件,指明其格式,确定是否需要其他详细信息,然后单击“查看ASN1文件”按钮:



比较左右屏幕截图,您可以亲自看到按下“其他信息”按钮时可以获得的其他信息。 要以分解形式保存结构,只需单击“保存”按钮。

如果按住鼠标左键,则可以选择我们感兴趣的区块。 并且,如果现在在所选块上,请按鼠标右键,将出现一个菜单,其中包含以下项目:

  • 复制到剪贴板;
  • 查看突出显示的块。

并且,如果选择“查看选定的块”(View selected block)项目,则将出现一个包含已分析块的窗口:



如果单击“复制到剪贴板”按钮,则所选块将被复制到剪贴板。 单击“ ASN1-剪贴板”按钮可以查看剪贴板。 用户可以用自己的资金将数据放入剪贴板,然后在此处查看。

并且由于该实用程序经常更新,因此增加了直接从该实用程序获取新版本的功能。 为此,只需将鼠标光标移到“ PKCS#11,x509v3,PKCS#10,PKCS#7,CMS,PKCS#12,ASN1”字段上,按鼠标右键并在出现的菜单中选择“关于程序”。 在出现的窗口中,只需选择平台并按鼠标左键:



成功收到分发工具包后,您将收到一条有关接收的归档文件保存位置的相应消息:



PS对于那些想第一次获得实用程序的人,仍然可以在这里完成:

Linux,OS X和Windows的发行版

Source: https://habr.com/ru/post/zh-CN473886/


All Articles