17

OpenSSLを使用するために与えられた証明書C.pfxがあります。証明書C.pfxには、次の認証パスがあります:C-> B-> A

次のコマンドを使用して、C.pfxをPEMに変換しました:openssl pkcs12 -in C.pfx -out C.pem -nodes --WORKS OK

ファイルエディタで証明書C.pemを開いたところ、RSAPRIVATEKEYとCERTIFICATEの両方の部分があることがわかりました。

また、WindowsXPのTrustedRoorCertificationAthoritiesストアにインストールされている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

VERIFYの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

私は何が間違っているのですか?

4

1 に答える 1

23

openssl smime verify opensslを使用すると、使用する証明書が信頼できることを確認するために、その署名がチェックされます(これは、証明書の署名であり、確認を求めた署名付きメッセージの署名ではありません)。これを行うには、証明書を発行したCAのキーの証明書のコピーが必要です。

この-CAfileパラメーターは、メッセージの署名に使用されるキーの証明書ではなく、そのCA証明書を含むファイルの名前を渡すために使用されます。メッセージに署名するために使用されるキー-certfileの証明書をパラメーターで指定します...ただし、この場合、証明書はファイルに含まれます(メッセージに署名するときにtest.tmp指定することで、これを抑制することができます)。-nocerts

メッセージを検証するときにキー証明書のチェックを抑制するため-noverifyに、verifyコマンドにパラメーターを指定できます(openssl smime verify -noverify少し奇妙に見えますが)。

于 2012-10-09T22:23:59.150 に答える