零全零美(www.zzgwt.com)
          生活中的很多事情,并不像If...Else那么簡(jiǎn)單!
          posts - 96,comments - 52,trackbacks - 0
          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          •  

          積分與排名

          • 積分 - 152356
          • 排名 - 402

          最新評(píng)論

          openssl簡(jiǎn)介-指令rsautl
              用法:
             
              openssl rsautl [-in file] [-out file] [-inkey file] [-pubin] [-certin]
             
              [-sign] [-verify] [-encrypt] [-decrypt] [-pkcs] [-ssl] [-raw] [-hexdump]
             
              [-asn1parse]
             
               
              描述:
              本指令能夠使用RSA算法簽名,驗(yàn)證身份, 加密/解密數(shù)據(jù)。

             
              OPTIONS
              -in filename
              指定輸入文件名。缺省為標(biāo)準(zhǔn)輸入。
              -out filename
              指定輸入文件名, 缺省為標(biāo)準(zhǔn)輸出。
              -inkey file
              指定我們的私有密鑰文件, 格式必須是RSA私有密鑰文件。
              -pubin
              指定我們的公共密鑰文件。說(shuō)真的我還真不知道RSA的公共密鑰文件有什么用,一般公共密鑰都是放在證書里面的。
              -certin
              指定我們的證書文件了。
              -sign
              給輸入的數(shù)據(jù)簽名。需要我們的私有密鑰文件。
              -verify
              對(duì)輸入的數(shù)據(jù)進(jìn)行驗(yàn)證。
              -encrypt
              用我們的公共密鑰對(duì)輸入的數(shù)據(jù)進(jìn)行加密。
              -decrypt
              用RSA的私有密鑰對(duì)輸入的數(shù)據(jù)進(jìn)行解密。
              -pkcs, -oaep, -ssl, -raw
             采用的填充模式, 上述四個(gè)值分別代表:PKCS#1.5(缺省值), PKCS#1 OAEP, SSLv2里面特定的填充模式,或者不填充。如果要簽名,只有-pkcs和-raw可以使用.
              -hexdump
              用十六進(jìn)制輸出數(shù)據(jù)。
              -asn1parse
              對(duì)輸出的數(shù)據(jù)進(jìn)行ASN1分析。看看指令asn1parse吧。該指令一般和-verify一起用的時(shí)候威力大。
              本指令加密數(shù)據(jù)的時(shí)候只能加密少量數(shù)據(jù),要加密大量數(shù)據(jù),估計(jì)要調(diào)API.我也沒(méi)試過(guò)寫RSA加密解密的程序來(lái)玩。
              舉例時(shí)間:
              用私有密鑰對(duì)某文件簽名:
              openssl rsautl -sign -in file -inkey key.pem -out sig
              注意哦, 文件真的不能太大, 這個(gè)不能太大意思是必須很小。
              文件大小最好不要大過(guò)73。絕對(duì)不能多過(guò)150,多了就會(huì)出錯(cuò)。
              這個(gè)工具真是用來(lái)玩的
             
              對(duì)簽名過(guò)的數(shù)據(jù)進(jìn)行驗(yàn)證,得到原來(lái)的數(shù)據(jù)。
              openssl rsautl -verify -in sig -inkey key.pem
              檢查原始的簽名過(guò)的數(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-6c 6f 20 77 6f 72 6c 64 .....hello world
              很明顯,這是PKCS#1結(jié)構(gòu):使用0xff填充模式。
              配合指令asn1parse,可以分析簽名的證書,我們?cè)趓eq指令里說(shuō)了怎么做自簽名的證書了,現(xiàn)在來(lái)分析一下先。
              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就是實(shí)際的簽名。我們可以這樣子捏它出來(lái):
              openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614
             還可以這樣子把公共密鑰給弄出來(lái):
              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%..
             
              這是經(jīng)過(guò)分析后的ASN1結(jié)構(gòu)。可以看出來(lái)使用的哈希算法是md5. (很抱歉,我自己試這一行的時(shí)候輸出結(jié)果卻完全不同。
              0:d=0 hl=2 l= 120 cons: appl [ 24 ]
              length is greater than 18
              完全沒(méi)有辦法看出那里有寫哈希算法。)
              證書里面的簽名部分可以這么捏出來(lái):
              openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4
              這樣得到他的哈希算法的細(xì)節(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 2009-11-27 17:42 零全零美 閱讀(1227) 評(píng)論(0)  編輯  收藏 所屬分類: 安全相關(guān)
          主站蜘蛛池模板: 濮阳县| 鹤峰县| 海淀区| 章丘市| 弥勒县| 新宁县| 嘉定区| 潮州市| 沈阳市| 龙川县| 黑水县| 邢台县| 陵川县| 法库县| 阜新市| 灵宝市| 永德县| 清远市| 太和县| 霞浦县| 舒兰市| 崇礼县| 喀什市| 葵青区| 宜宾市| 义乌市| 永昌县| 自贡市| 江西省| 高台县| 三台县| 大同市| 阳江市| 石嘴山市| 昂仁县| 永和县| 新乡县| 淳化县| 宝山区| 六安市| 章丘市|