Opensslを使用してx509証明書または任意のドキュメントにデジタル署名する方法はありますか?
はい、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には公開鍵、署名、およびメッセージが必要です。
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
デジタル署名 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