OpenSSL:无法获取本地颁发者证书

问题描述 投票:0回答:1

我有一个证书 C.pfx,是为我提供的用于使用 OpenSSL 的证书。证书 C.pfx 具有以下认证路径:C->B->A

我使用以下命令将 C.pfx 转换为 PEM: openssl pkcs12 -in C.pfx -out C.pem -nodes -- 工作正常

我在文件编辑器中打开证书 C.pem,看到它同时具有 RSA PRIVATE KEY 和 CERTIFICATE 部分。

我还看到 Windows XP 中的 Trusted Roor Certification Athorities 存储下安装了 A 和 B 证书。

目标是使用 OpenSSL for Windows 1.0.1c 版本(目前是最新版本)对测试文件进行签名、加密、解密和验证

我使用以下命令:

--签名--

openssl smime -sign -signer C.pem -in test.txt -out test.tmp    -- WORKS OK

--加密--

openssl smime -encrypt -in test.tmp -out test.enc C.pem     -- WORKS OK

--解密--

openssl smime -decrypt -in test.enc -recip C.pem -inkey C.pem -out test1.tmp    -- WORKS OK

--验证--

openssl smime -verify -in test1.tmp -CAfile "C.pem" -out notes1.txt -- FAILS

我使用MMC控制台将B和A证书导出到CER文件,然后使用OpenSSL将它们转换为PEM。之后我尝试了以下2:

openssl smime -verify -in test1.tmp -CAfile "A.pem" -out notes1.txt -- FAILS

openssl smime -verify -in test1.tmp -CAfile "B.pem" -out notes1.txt -- FAILS

所有 3 次验证尝试均失败,并出现以下错误:

Verification failure
3672:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:.\crypt
o\pkcs7\pk7_smime.c:342:Verify error:unable to get local issuer certificate

我做错了什么?

openssl certificate
1个回答
26
投票

当您使用

openssl smime -verify
时,openssl 会尝试通过检查其签名(这是证书中的签名,而不是您要求验证的签名消息中的签名)来验证要使用的证书是否受信任。为此,它必须拥有颁发证书的 CA 密钥的证书副本。

-CAfile
参数用于传递包含该 CA 证书的文件的名称,而不是用于对消息进行签名的密钥的证书。您可以使用
-certfile
参数指定用于签署消息的密钥的证书...但在您的情况下,证书将位于
test.tmp
文件中(您可以通过在签名时指定
-nocerts
来抑制该证书)消息)。

要在验证消息时禁止检查密钥证书,您可以向验证命令提供

-noverify
参数(尽管
openssl smime -verify -noverify
看起来确实有点奇怪)。

© www.soinside.com 2019 - 2024. All rights reserved.