PE 数字签名

http://www.youdzone.com/signature.html  英文文章,介绍了证书与签名的关系。

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html 是翻译后的文章。


PE 数字签名是被DER编码方式编码的二进制数据,数据的构成有 PKCS #7 V1.5 定义,具体请参考 PKCS #7Cryptographic Message Syntax Standard.

PKCS#7 数据中包含了签发签名的证书以及其上级证书的完整证书链。根证书签发下一级证书,然后一级一级的签发下去最后一级证书签发签名。

x.509 定义了证书的数据构成。

这里有有关数字证书的ASN.1描述
http://www.rfc-base.org/txt/rfc-5280.txt
Internet X.509 Public Key Infrastructure Certificate
             and Certificate Revocation List (CRL) Profile
PKCS #7 V1.5 和 X.509 的定义都采用了ASN.1 语法

http://msdn.microsoft.com/en-us/windows/hardware/gg463180 是微软对数字签名的ASN.1语法描述,但是没有 PKCS #7Cryptographic Message Syntax Standard. 讲些的详细。


http://www.lapo.it/asn1js/   可以将PE 文件最后的证书数据直接解析为 ASN.1语法

asn1viewer 是一个免费工具,也可以解析DER数据

使用 openssl pkcs7命令能够将完整数字签名消息中的全部数字证书都导出,然后在使用openssl x509 进行解析。

openssl pkcs7 -inform DER -in Certificate.cer -print_certs

这说明,openssl 是能够验证PKCS7并解析pkcs#7数字签名数据的。

注: 这里导出的证书文件与通过Windows 文件属性的签名选项导出的der格式的证书是一样的。


Linux 下将数字证书解析为ASN.1 文本的命令:

openssl x509 -inform der -in vmUpdate.cer -text 


利用openssl pkcs7 命令导出了一个数字签名数据的全部证书,发现包含了从根证书到最终签发签名的全部证书以及用于校验时间戳的证书。通过这个能够确定 WinVerifyTrust 函数,应该不会以联网方式校验证书的。此外,证书链的关联是通过证书中的Issuer Name  与Subject 建立的。Issuer Name 标记了上一级证书的名字,Subject 标记了证书的名字

微软文档中提到了验证数据签名是,使用了 Certificates Store 来验证完成的证书链。根据猜测,在Windows  下运行certmgr.msc 后看得应该就是Certificates Store
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章