什么是包属性以及如何生成它们?

在将一些证书从密钥库转换为openssl / pem时,我第一次注意到证书之前有“Bag Attributes”.

看起来像这样:

Bag Attributes
    friendlyName: CN=PositiveSSL CA,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB
subject=/C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=PositiveSSL CA
issuer=/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST    Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware

他们是否提供任何功能

我注意到我喜欢它们,因为它们使我的链文件(证书的串联)更加清晰.可悲的是,我下载的ca证书没有它们.

那么我该如何生成它们呢?

解决方法

确切地说,您显然意味着使用openssl pkcs12(import)实用程序转换(或仅读取)PKCS#12文件,Java可以作为密钥库支持,但在2017年Java9之前不是认(更新).PKCS #12被设计并且通常用于私钥和该密钥的证书(通常是多个),尽管格式足够灵活以允许单独的证书. OpenSSL命令行pkcs12 -export需要私钥,虽然它会添加“额外”证书,而调用API的程序显然不会执行私钥.根据我的经验,Java在版本8之前不支持PKCS#12中的单独证书,而在我的8和9中有两个属性:pkcs9.friendlyName和2.16.840.1.113894.746875.1.1,这显然是Oracle定义的trustedKeyUsage.大多数单独的证书不会作为PKCS#12存储或下载.

PKCS#12是根据包含各种内容的几个(略有不同)“bag”结构来定义的,主要是私有密钥和带有可选属性的证书,这些属性不出所料地被称为“包属性”;你的情况(显然)只有证书.这些属性遵循现在常规结构的任意数量的OID对值取决于OID.请注意,在您的显示中,friendlyName是一个bag属性,因为它在标题下缩进.

subject =和issuer = lines是来自cert本身的字段,openssl pkcs12(import)实用程序为方便起见提取和打印.如果这已足够,您可以使用x509实用程序为任何证书显示它们;特别是如果你想在pkcs12输出的方式之前在PEM编码的证书“blob”之前使用它们,请使用openssl x509 -in infile -subject -issuer -out outfile.这样做一个证书,所以如果你在PEM文件中有一个链,你需要将它拆开并分别执行每个证书,然后可能再次组合;比如说像

# split into files cert_1,cert_2,etc.
$awk <chain.pem -va="openssl x509 -subject -issuer >cert_" 
  '/^-----BEGIN/{b=a (++n);x=1}x{print|b}/^-----END/{close(b);x=0}'

# output entire "bag" to stdout (with blank lines between certs)
$awk <chain.pem -va="openssl x509 -subject -issuer" \
  '/^-----BEGIN/{b=a;x=1}x{print|b}/^-----END/{close(b);x=0;print""}'

作为比较,openssl s_client -showcerts做了类似的事情:它从接收到的链中输出每个cert blob的subject和issuer,用级别号“s:”和“i:”标记它们.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...