web-dev-qa-db-ja.com

opensslを使用したファイルのデジタル署名

Opensslを使用してx509証明書または任意のドキュメントにデジタル署名する方法はありますか?

38
Ajay kumar

はい、OpenSSLの dgst および rsautl コンポーネントを使用して、RSAキーペアを指定して署名を計算できます。

署名:

openssl dgst -sha256 data.txt > hash
openssl rsautl -sign -inkey privatekey.pem -keyform PEM -in hash >signature

署名のみを検証する:

openssl rsautl -verify -inkey publickey.pem -pubin -keyform PEM -in signature

更新:これは重要なニュアンスなので、Retoのコメントを下からキャプチャします。おそらく、検証に問題がある場合、署名が添付されているプレーンテキストで生成されたことを知りたいでしょう:

これは一部の人には明白に聞こえるかもしれませんが、注意してください、rsault verifyはファイルsignatureを単に復号化するだけです。この呼び出しの出力は、秘密鍵の所有者によって生成されることが保証されていますが、他には何もチェックされていません。したがって、data.txtの一貫性を実際に検証するには、ダイジェストを再生成し、openssl rsautl -verifyの出力と比較する必要があります。

秘密鍵の所有者がdata.txtを保証していることを確認する:

openssl dgst -sha256 -verify publickey.pem -signature signature data.txt

この操作では、opensslには公開鍵、署名、およびメッセージが必要です。

43
Anders Lindahl

Anders Lindahlの答え に触発された、単一の署名/検証の代替方法。

to sign

openssl dgst -sha256 -sign snakeoil.key -out some-file.sha256 some-file 

検証するために

# dgst -verify requires the public key
openssl x509 -in snakeoil.crt -pubkey -noout > snakeoil.pub

openssl dgst -sha256  -verify  snakeoil.pub -signature some-file.sha256 some-file

# in case of success: prints "Verified OK"
# in case of failure: prints "Verification Failure", return code 1

# or compact (requires a modern Shell)
openssl dgst -sha256  \
    -verify  <(openssl x509 -in snakeoil.crt -pubkey -noout) \
    -signature some-file.sha256 some-file
55
reto

デジタル署名 opensslのドキュメントに動作します

この最初のあなたの証明書を信頼する必要がありますそれはこのようになります

-----BEGIN TRUSTED CERTIFICATE-----
MIIDbjCCAlYCCQCOyunl25ProDANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJJ
...
-----END TRUSTED CERTIFICATE-----

次に、次のコマンドを使用します

smime -sign -signer certificate.pem -inkey private.key -in test.txt \
    -out test1.txt -from ashish -to singhal
5
Ashish Singhal