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

Ale*_*oga 16 openssl certificate

我有一个证书C.pfx给了我使用OpenSSL.证书C.pfx具有以下证书路径:C-> B-> A.

我使用以下命令将C.pfx转换为PEM:openssl pkcs12 -in C.pfx -out C.pem -nodes - WORKS OK

我在文件编辑器中打开了证书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
Run Code Online (Sandbox Code Playgroud)

--TO ENCRYPT--

openssl smime -encrypt -in test.tmp -out test.enc C.pem     -- WORKS OK
Run Code Online (Sandbox Code Playgroud)

- 去DEC - -

openssl smime -decrypt -in test.enc -recip C.pem -inkey C.pem -out test1.tmp    -- WORKS OK
Run Code Online (Sandbox Code Playgroud)

- 核实 -

openssl smime -verify -in test1.tmp -CAfile "C.pem" -out notes1.txt -- FAILS
Run Code Online (Sandbox Code Playgroud)

我使用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
Run Code Online (Sandbox Code Playgroud)

所有3次VERIFY尝试都失败,并出现以下错误:

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
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

daj*_*mes 21

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

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

要在验证消息时禁止检查密钥证书,可以将-noverify参数提供给verify命令(虽然openssl smime verify -noverify看起来有点奇怪).

  • @PassKit虽然命令看起来最自相矛盾. (3认同)
  • 我需要的是openssl smime -verify -noverify的+1! (2认同)