web-dev-qa-db-ja.com

openssl署名の検証

S/MIMEの場合、PKCS#7の分離された署名を次の方法で確認できることがわかりました。

openssl smime -verify -in detachedsign.pem -content content.txt

しかし、非MIMEメッセージはどうですか?
メッセージに署名した場合Hello, World!openssl smime -sign -text....実際に署名します

Content-Type: plain/text

Hello, World!

opensslを使用して、通常のテキストファイルに署名できますか(そのままです)?いつ -signはPKCS#7分離署名を出力し、-verify PKCS#7分離署名およびコンテンツを受け入れます

10
Filipe Pina

はい、OpenSSLを使用してプレーンテキストファイルのメッセージダイジェストを作成および署名し、後でその署名済みダイジェストを使用してテキストの有効性を確認できます。

openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt

後でテキストメッセージの有効性を確認します

openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt

O'Reillyの本OpenSSLを使用したネットワークセキュリティを調べて、これらの関数の優れたドキュメントソースを確認してください。上記の例はその本から来ました。

10
zedman9991

qistophのブログ (およびdave_thompson_085のコメント)によると、メッセージに署名する

openssl smime -sign -nodetach -inkey keyfile.key -signer cert.cer -in unsigned.txt -inform pem -out signed.p7m

ここで、unsigned.txtは署名するファイルです。 keyfile.keyはPKCS#8秘密鍵です(暗号化されていません)。 cert.cerはX.509証明書です。 signed.p7sは、添付されたPKCS#7署名になります。つまり、ペイロード(unsigned.txt)が署名に含まれます。デタッチされた署名を取得するには、フラグ-nodetachを削除します(そして 標準 に従って、出力ファイルに拡張子.p7sを付けます)。

署名を確認するには:

openssl smime -verify -in signed.p7 -inform pem

証明書自体を検証する必要がない場合(たとえば、パブリックCAによって署名されていない場合)、-noverifyフラグを追加します。 -noverifyは証明書の検証のみを無効にします。ペイロードの署名はまだ検証されています。

1
Franklin Yu