捕風之巢

          統(tǒng)計

          留言簿(3)

          java友情鏈接

          閱讀排行榜

          評論排行榜

          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 6c-6c6f 20 77 6f 72 6c 64 .....hello world
          ? ?
          很明顯,這是 PKCS#1 結構:使用 0xff 填充模式。
          ? ?
          配合指令 asn1parse, 可以分析簽名的證書,我們在 req 指令里說了怎么做自簽名的證書了,現(xiàn)在來分析一下先。
          ? ? 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 1a4a73 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
          ? ?
          這樣得到他的哈希算法的細節(jié):
          ? ? openssl md5 -c tbs
          ? ? MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5

          posted on 2006-10-17 15:44 捕風 閱讀(587) 評論(0)  編輯  收藏 所屬分類: java安全

          主站蜘蛛池模板: 达日县| 云浮市| 通辽市| 清水河县| 都江堰市| 都安| 多伦县| 无棣县| 淮阳县| 彰化市| 鄂托克旗| 手游| 南木林县| 白玉县| 临颍县| 连江县| 陈巴尔虎旗| 抚顺县| 贺兰县| 山东省| 南和县| 邛崃市| 泽州县| 德庆县| 四子王旗| 阿克苏市| 万山特区| 无锡市| 白银市| 贵溪市| 罗平县| 台北市| 北京市| 巴彦淖尔市| 秭归县| 界首市| 日照市| 抚松县| 南和县| 蒙自县| 岳池县|