web-dev-qa-db-ja.com

署名を確認するためのopensslコマンドライン

こんにちは、キーペアを生成し、秘密キーを使用して署名を生成しました。

openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig

ただし、公開鍵で署名を確認できません。

openssl rsautl -verify -in helloworld.txt -inkey aa.pub -sigfile sig

-sigfileは非推奨です。また、openssl.orgのオンラインドキュメントの一部が間違っています。

公開鍵で署名を検証するために使用するコマンドは何ですか?

22
c2h2

私はあなたの問題に対する2つの解決策を見つけました。

Rsautlをそのように使用できます:(秘密鍵:my.keyおよび公開鍵my-pub.pemを使用)

$ openssl rsautl -sign -inkey my.key -out in.txt.rsa -in in.txt
Enter pass phrase for my.key:
$ openssl rsautl -verify -inkey my-pub.pem -in in.txt.rsa -pubin
Bonjour

この方法では、すべてのドキュメントが署名ファイル内に含まれ、最終コマンドによって出力されます。

しかし、私の場合、私の証明書には次のように書かれています:署名アルゴリズム:sha1WithRSAEncryption。したがって、4つのステップで文書に署名する標準的な方法を使用することをお勧めします。

  1. 署名するドキュメントのダイジェストを作成(sender)
  2. 秘密鍵でダイジェストに署名(送信者)
  3. 検証するドキュメントのダイジェストを作成します(recipient)
  4. 公開鍵で署名を検証(recipient)

OpenSSLはこれを2つのステップで行います。

$ openssl dgst -sha256 -sign my.key -out in.txt.sha256 in.txt 
Enter pass phrase for my.key:
$ openssl dgst -sha256 -verify my-pub.pem -signature in.txt.sha256 in.txt  
Verified OK

この方法では、受信者に2つのドキュメントを送信しました。元のファイルプレーンテキスト、署名ファイル署名済みダイジェスト。注意:署名ファイルにはドキュメント全体が含まれていません!ダイジェストのみ。

55
M'vy

あなたの方法は基本的に正しいです。見逃しているのは、rsutlに「-pubin」を追加して、inutキーファイルファイルが公開キーであることを伝えることです。 「-pubin」OpenSSL rsautl文書は正確ではありません。「-pubin入力ファイルはRSA公開鍵です。」は「-pubin入力鍵ファイルはRSA公開鍵です。」入力ファイルは署名である必要があるためファイル。

3
Sheng Yu

公開キーを使用して確認する

echo "plop" > "helloworld.txt"
openssl rsautl -sign -in hello.txt -inkey private.pem -out sig
openssl rsautl -verify -in sig -inkey public.pem -pubin
> plop
2
jessn

ドキュメントで rsautl を確認できます

あなたの例では、これは次のようになります:

openssl rsautl -verify -in sig -inkey aa.pem

以下に完全な履歴をコピーしました。

echo "plop" > "helloworld.txt"
openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig
openssl rsautl -verify -in sig -inkey aa.pem
> plop
1
vaugham