openssl簡介(二十)--指令rsautl
一.????
指令
rsautl
用法:
? ?
? ? openssl rsautl [-in file] [-out file] [-inkey file] [-pubin] [-certin]
? ?
? ? [-sign] [-verify] [-encrypt] [-decrypt] [-pkcs] [-ssl] [-raw] [-hexdump]
? ?
? ? [-asn1parse]
? ?
? ???
? ?
描述:
? ?
本指令能夠使用
RSA
算法簽名,驗證身份,
加密
/
解密數(shù)據(jù)。
? ?
? ? OPTIONS
? ? -in filename
? ?
指定輸入文件名。缺省為標準輸入。
? ? -out filename
? ?
指定輸入文件名,
缺省為標準輸出。
? ? -inkey file
? ?
指定我們的私有密鑰文件,
格式必須是
RSA
私有密鑰文件。
? ? -pubin
? ?
指定我們的公共密鑰文件。說真的我還真不知道
RSA
的公共密鑰文件有什么用,一般公共密鑰都是放在證書里面的。
? ? -certin
? ?
指定我們的證書文件了。
? ? -sign
? ?
給輸入的數(shù)據(jù)簽名。需要我們的私有密鑰文件。
? ? -verify
? ?
對輸入的數(shù)據(jù)進行驗證。
? ? -encrypt
? ?
用我們的公共密鑰對輸入的數(shù)據(jù)進行加密。
? ? -decrypt
? ?
用
RSA
的私有密鑰對輸入的數(shù)據(jù)進行解密。
? ? -pkcs, -oaep, -ssl, -raw
? ?
采用的填充模式,
上述四個值分別代表:
PKCS#1.5(
缺省值
), PKCS#1 OAEP, SSLv2
里面特定的填充模式,或者不填充。如果要簽名,只有
-pkcs
和
-raw
可以使用
.
? ? -hexdump
? ?
用十六進制輸出數(shù)據(jù)。
? ? -asn1parse
? ?
對輸出的數(shù)據(jù)進行
ASN1
分析。看看指令
asn1parse
吧。該指令一般和
-verify
一起用的時候威力大。
? ?
本指令加密數(shù)據(jù)的時候只能加密少量數(shù)據(jù),要加密大量數(shù)據(jù),估計要調
API.
我也沒試過寫
RSA
加密解密的程序來玩。
? ?
舉例時間:
? ?
用私有密鑰對某文件簽名:
? ? openssl rsautl -sign -in file -inkey key.pem -out sig
? ?
注意哦,
文件真的不能太大,
這個不能太大意思是必須很小。
? ?
文件大小最好不要大過
73
。絕對不能多過
150
,多了就會出錯。
? ?
這個工具真是用來玩的
? ?
? ?
對簽名過的數(shù)據(jù)進行驗證,得到原來的數(shù)據(jù)。
? ? openssl rsautl -verify -in sig -inkey key.pem
? ?
檢查原始的簽名過的數(shù)據(jù):
? ? openssl rsautl -verify -in sig -inkey key.pem -raw -hexdump
? ?
? ???0000 - 00 01 ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
? ?
? ???0010 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
? ?
? ???0020 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
? ?
? ???0030 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
? ?
? ???0040 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
? ?
? ???0050 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
? ?
? ???0060 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
? ?
? ???0070 - ff ff ff ff 00 68 65
? ?
很明顯,這是
PKCS#1
結構:使用
0xff
填充模式。
? ?
配合指令
asn1parse,
可以分析簽名的證書,我們在
req
指令里說了怎么做自簽名的證書了,現(xiàn)在來分析一下先。
? ? openssl asn1parse -in pca-cert.pem
? ?
? ? 0:d=0 hl=
? ?
? ???4:d=1 hl=
? ?
? ???8:d=2 hl=
? ?
? ???10:d=3 hl=
? ?
? ???13:d=2 hl=
? ?
? ???16:d=2 hl=
? ?
? ???18:d=3 hl=
? ?
? ???29:d=3 hl=
? ?
? ???31:d=2 hl=
? ?
? ???33:d=3 hl=
? ?
? ???35:d=4 hl=
? ?
? ???37:d=5 hl=
? ?
? ???42:d=5 hl=
? ?
? ???....
? ?
? ???599:d=1 hl=
? ?
? ???601:d=2 hl=
? ?
? ???612:d=2 hl=
? ?
? ???614:d=1 hl=
? ?
? ?
最后一行
BIT STRING
就是實際的簽名。我們可以這樣子捏它出來:
? ? openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614
? ?
還可以這樣子把公共密鑰給弄出來:
? ? openssl x509 -in test/testx509.pem -pubkey -noout >;pubkey.pem
? ?
我們也可以這樣子分析簽名:
? ? openssl rsautl -in sig -verify -asn1parse -inkey pubkey.pem -pubin
? ? 0:d=0 hl=
? ?
? ???2:d=1 hl=
? ?
? ???4:d=2 hl=
? ?
? ???14:d=2 hl=
? ?
? ???16:d=1 hl=
? ?
? ???0000 - f3 46 9e aa
? ?
? ?
這是經過分析后的
ASN1
結構。可以看出來使用的哈希算法是
md5. (
很抱歉,我自己試這一行的時候輸出結果卻完全不同。
? ? 0:d=0 hl=
? ? length is greater than 18
? ?
完全沒有辦法看出那里有寫哈希算法。
)
? ?
證書里面的簽名部分可以這么捏出來:
? ? openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4
? ?
這樣得到他的哈希算法的細節(jié):
? ? openssl md5 -c tbs
? ? MD5(tbs)= f3:46:9e:aa:
posted on 2006-10-17 15:44 捕風 閱讀(587) 評論(0) 編輯 收藏 所屬分類: java安全