openssl を使用して x509 証明書またはドキュメントにデジタル署名する方法はありますか?
3 に答える
秘密鍵を生成するには
openssl genrsa -out privatekey.pem 2048
署名する
openssl dgst -sha256 -sign privatekey.pem -out data.txt.signature data.txt
公開鍵を生成するには
dgst -verify
公開鍵が必要
openssl rsa -in privatekey.pem -outform PEM -pubout -out publickey.pem
検証します
openssl dgst -sha256 -verify publickey.pem -signature data.txt.signature data.txt
- 成功の場合: を出力し
"Verified OK"
、コードを返します0
- 失敗した場合: を出力し
"Verification Failure"
、コードを返します1
はい、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 のコメントをキャプチャします。おそらく、検証するのに苦労する場合は、署名が添付されているプレーンテキストで作成されたことを知りたいと思うでしょう:
これは一部の人にとっては明白に聞こえるかもしれませんがrsautl verify
、ファイルを復号化するだけであることに注意してくださいsignature
。この呼び出しの出力は、秘密鍵の所有者によって生成されることが保証されていますが、それ以外には何もチェックされていません。したがって、実際に の一貫性を検証するにはdata.txt
、ダイジェストを再生成し、それを の出力と比較する必要がありますopenssl rsautl -verify
。
秘密鍵の所有者が次のことを保証していることを確認しますdata.txt
。
openssl dgst -sha256 -verify publickey.pem -signature signature data.txt
この操作のために、opensslは公開鍵、署名、およびメッセージを必要とします。
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