2011-02-28 90 views
18

您好我已經生成了一個密鑰對並使用私鑰生成簽名。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的在線文檔是錯誤的。

我應該用什麼命令來驗證我的公鑰的sig?

+0

任何運氣的答案? –

+2

你的方法是正確的,我錯過了消化一部分,試圖簽下全文檔!感謝您的幫助!我還發現了一些有用的鏈接,我用它來做X.509 CA的事情:http://sandbox.rulemaker.net/ngps/m2/howto.ca.html http:// octaldream .com /〜scottm/talks/ssl/opensslca.html – c2h2

回答

47

我發現了兩個解決方案你的問題。

您可以使用rsautl那樣:(用私鑰:my.key和公鑰我-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個步驟:(用於所有非對稱的電子簽名,以免過充簽名文件和/或CPU使用此方法)

  1. 創建消化文件簽署(發件人)
  2. 簽署私鑰(發件人)消化
  3. 的文件創建摘要驗證(收件人)
  4. 驗證簽名W¯¯第i個公鑰(收件人)

的OpenSSL做這兩個步驟:

$ 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 

使用這種方法,您發送的收件人兩個文件:原始文件明文,簽名文件簽署摘要。注意:簽名文件不包含整個文檔!只有摘要。

+0

好的,簽署摘要是一個好方法! – c2h2

+0

使用此命令行驗證給定數據的簽名時,會得到以下錯誤輸出:'驗證失敗\ n dgst中的錯誤是否意味着驗證失敗,原因是錯誤或文件不匹配正確嗎? – Badda

+0

簽名解碼沒有真正的原因失敗,所以我會說失配。 –

0

您可以檢查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 
+0

嗨,謝謝,我沒看過手冊,但是我需要用公鑰來驗證,而不是私鑰。 – c2h2

+2

使用-pubin並將公鑰作爲參數爲-inkey –

3

你的方法基本上是正確的。您錯過的是通過添加「-pubin」來告訴rsautl,inut密鑰文件文件是公鑰。 項目「-pubin」OpenSSL rsautl文件不準確 「 -pubin 輸入文件是RSA公鑰。 「 應該是 」 -pubin 輸入密鑰文件是一個RSA公鑰。 「 由於輸入文件應該是一個簽名文件。

2

驗證使用公鑰

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 
相關問題