如何检查.sig文件是否正确?

如何检查.sig文件是否正确?

我发出了以下命令来为文件(Linux内核)创建签名:

openssl req -newkey rsa -keyout codesign.key -out codesign.req
openssl ca -config ca.cnf -extensions codesigning -in codesign.req -out codesign.crt

openssl cms -sign -binary -noattr -in vmlinuz -signer codesign.crt -inkey codesign.key -certfile ca.crt -outform DER -out vmlinuz.sig

ca.cnf文件用于我自己的私有 CA 基础设施,它启用了 digitalSignature 密钥使用扩展和 codeSigning 扩展密钥使用扩展。

Ca.cnf格式:

[ 加州 ]

default_ca = ca_default

[ ca_default ]

证书 = ca.crt

私钥 = ca.key

序列号 = ca.srl

数据库 = ca.idx

new_certs_dir = /home/apoorv/projects/signed

default_md = 默认

政策 = policy_anything

保留 = 是

默认天数 = 90

unique_subject = 否

[ 政策任何内容 ]

countryName = 可选

stateOrProvinceName = 可选

localityName = 可选

organizationName = 可选

组织单位名称 = 可选

commonName = 可选

emailAddress = 可选

[ 叉 ]

基本约束 = 关键,CA:true

keyUsage = 关键,cRLSign,keyCertSign

[ 共同设计 ]

密钥用法 = 数字签名

扩展密钥使用情况 = 代码签名

命令:openssl cms -verify -binary -content vmlinuz -inform DER -in vmlinuz.sig -CAfile ca.crt

输出:

验证失败 140187569694352:错误:2E099064:CMS 例程:CMS_SIGNERINFO_VERIFY_CERT:证书验证错误:cms_smime.c:287:验证错误:不支持的证书用途

您能提供任何意见吗?非常感谢。

答案1

从你系统的手册页中应该可以清楚地看到或在线假设您的 ca.cnf 中指定的 CA 证书是 ca.crt 并且是根证书,那么您想要的基本功能是

openssl cms -verify -binary -content vmlinuz -inform der -in vmlinuz.sig -CAfile ca.crt 

除了默认情况下它需要 ExtendedKeyUsage(如果存在)包括“emailProtection”id-pkix 3 4 而不是(单独)codeSigning;来覆盖该添加-purpose any

如果证书层次结构更复杂(即如果它使用链),那么就会出现多种情况,具体取决于您在签名文件中包含哪些证书、-certfile默认或指定的信任文件和/或目录中有哪些证书以及是否-certfile使用以及您是否在 1.0.2 中指定-partial_chain,如果没有更具体的问题,我没有时间写那么多。

相关内容