openssl簡介-指令rsautl
用法:
openssl rsautl [-in file] [-out file] [-inkey file] [-pubin] [-certin]
[-sign] [-verify] [-encrypt] [-decrypt] [-pkcs] [-ssl] [-raw] [-hexdump]
[-asn1parse]
描述:
本指令能夠使用RSA算法簽名,驗證身份, 加密/解密數據。
OPTIONS
-in filename
指定輸入文件名。缺省為標準輸入。
-out filename
指定輸入文件名, 缺省為標準輸出。
-inkey file
指定我們的私有密鑰文件, 格式必須是RSA私有密鑰文件。
-pubin
指定我們的公共密鑰文件。說真的我還真不知道RSA的公共密鑰文件有什么用,一般公共密鑰都是放在證書里面的。
-certin
指定我們的證書文件了。
-sign
給輸入的數據簽名。需要我們的私有密鑰文件。
-verify
對輸入的數據進行驗證。
-encrypt
用我們的公共密鑰對輸入的數據進行加密。
-decrypt
用RSA的私有密鑰對輸入的數據進行解密。
-pkcs, -oaep, -ssl, -raw
采用的填充模式, 上述四個值分別代表:PKCS#1.5(缺省值), PKCS#1 OAEP, SSLv2里面特定的填充模式,或者不填充。如果要簽名,只有-pkcs和-raw可以使用.
-hexdump
用十六進制輸出數據。
-asn1parse
對輸出的數據進行ASN1分析。看看指令asn1parse吧。該指令一般和-verify一起用的時候威力大。
本指令加密數據的時候只能加密少量數據,要加密大量數據,估計要調API.我也沒試過寫RSA加密解密的程序來玩。
舉例時間:
用私有密鑰對某文件簽名:
openssl rsautl -sign -in file -inkey key.pem -out sig
注意哦, 文件真的不能太大, 這個不能太大意思是必須很小。
文件大小最好不要大過73。絕對不能多過150,多了就會出錯。
這個工具真是用來玩的
對簽名過的數據進行驗證,得到原來的數據。
openssl rsautl -verify -in sig -inkey key.pem
檢查原始的簽名過的數據:
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 6c-6c 6f 20 77 6f 72 6c 64 .....hello world
很明顯,這是PKCS#1結構:使用0xff填充模式。
配合指令asn1parse,可以分析簽名的證書,我們在req指令里說了怎么做自簽名的證書了,現在來分析一下先。
openssl asn1parse -in pca-cert.pem
0:d=0 hl=4 l= 742 cons: SEQUENCE
4:d=1 hl=4 l= 591 cons: SEQUENCE
8:d=2 hl=2 l= 3 cons: cont [ 0 ]
10:d=3 hl=2 l= 1 prim: INTEGER :02
13:d=2 hl=2 l= 1 prim: INTEGER :00
16:d=2 hl=2 l= 13 cons: SEQUENCE
18:d=3 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption
29:d=3 hl=2 l= 0 prim: NULL
31:d=2 hl=2 l= 92 cons: SEQUENCE
33:d=3 hl=2 l= 11 cons: SET
35:d=4 hl=2 l= 9 cons: SEQUENCE
37:d=5 hl=2 l= 3 prim: OBJECT :countryName
42:d=5 hl=2 l= 2 prim: PRINTABLESTRING :AU
....
599:d=1 hl=2 l= 13 cons: SEQUENCE
601:d=2 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption
612:d=2 hl=2 l= 0 prim: NULL
614:d=1 hl=3 l= 129 prim: BIT STRING
最后一行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 l= 32 cons: SEQUENCE
2:d=1 hl=2 l= 12 cons: SEQUENCE
4:d=2 hl=2 l= 8 prim: OBJECT :md5
14:d=2 hl=2 l= 0 prim: NULL
16:d=1 hl=2 l= 16 prim: OCTET STRING
0000 - f3 46 9e aa 1a 4a 73 c9-37 ea 93 00 48 25 08 b5 .F...Js.7...H%..
這是經過分析后的ASN1結構。可以看出來使用的哈希算法是md5. (很抱歉,我自己試這一行的時候輸出結果卻完全不同。
0:d=0 hl=2 l= 120 cons: appl [ 24 ]
length is greater than 18
完全沒有辦法看出那里有寫哈希算法。)
證書里面的簽名部分可以這么捏出來:
openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4
這樣得到他的哈希算法的細節:
openssl md5 -c tbs
MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5
posted on 2009-11-27 17:42
零全零美 閱讀(1217)
評論(0) 編輯 收藏 所屬分類:
安全相關