零全零美(www.zzgwt.com)
          生活中的很多事情,并不像If...Else那么簡(jiǎn)單!
          posts - 96,comments - 52,trackbacks - 0
          openssl簡(jiǎn)介-指令x509

              用法:
             
              openssl x509 [-inform DER|PEM|NET] [-outform DER|PEM|NET]
             
               [-keyform DER|PEM][-CAform DER|PEM] [-CAkeyform DER|PEM]
             
               [-in filename][-out filename] [-serial] [-hash] [-subject]
             
               [-issuer] [-nameopt option] [-email] [-startdate] [-enddate]
             
               [-purpose] [-dates] [-modulus] [-fingerprint] [-alias]
             
               [-noout] [-trustout] [-clrtrust] [-clrreject] [-addtrust arg]
             
               [-addreject arg] [-setalias arg] [-days arg]
             
               [-signkey filename][-x509toreq] [-req] [-CA filename]
             
               [-CAkey filename] [-CAcreateserial] [-CAserial filename]
             
               [-text] [-C] [-md2|-md5|-sha1|-mdc2] [-clrext]
             
               [-extfile filename] [-extensions section]
             
             
              說(shuō)明:
              本指令是一個(gè)功能很豐富的證書(shū)處理工具??梢杂脕?lái)顯示證書(shū)的內(nèi)容,轉(zhuǎn)換其格式,給CSR簽名等等。由于功能太多,我們按功能分成幾部分來(lái)講。

              輸入,輸出等一些一般性的option
              -inform DER|PEM|NET
              指定輸入文件的格式。
              -outform DER|PEM|NET
              指定輸出文件格式
              -in filename
              指定輸入文件名
              -out filename
              指定輸出文件名
              -md2|-md5|-sha1|-mdc2
              指定使用的哈希算法。缺省的是MD5于打印有關(guān)的option
              -text
              用文本方式詳細(xì)打印出該證書(shū)的所有細(xì)節(jié)。
              -noout
              不打印出請(qǐng)求的編碼版本信息。
              -modulus
              打印出公共密鑰的系數(shù)值。沒(méi)研究過(guò)RSA就別用這個(gè)了。
              -serial
              打印出證書(shū)的系列號(hào)。
              -hash
              把證書(shū)的擁有者名稱(chēng)的哈希值給打印出來(lái)。
              -subject
              打印出證書(shū)擁有者的名字。
              -issuer
              打印證書(shū)頒發(fā)者名字。
              -nameopt option
              指定用什么格式打印上倆個(gè)option的輸出。
              后面有詳細(xì)的介紹。
              -email
              如果有,打印出證書(shū)申請(qǐng)者的email地址
              -startdate
              打印證書(shū)的起始有效時(shí)間
              -enddate
              打印證書(shū)的到期時(shí)間
              -dates
              把上倆個(gè)option都給打印出來(lái)
              -fingerprint
              打印DER格式的證書(shū)的DER版本信息。
              -C
              用C代碼風(fēng)格打印結(jié)果。
              與證書(shū)信任有關(guān)的option
              一個(gè)可以信任的證書(shū)的就是一個(gè)普通證書(shū),但有一些附加項(xiàng)指定其可以用于哪些用途和不可以用于哪些用途, 該證書(shū)還應(yīng)該有一個(gè)"別名"。
              一般來(lái)說(shuō)驗(yàn)證一個(gè)證書(shū)的合法性的時(shí)候,相關(guān)的證書(shū)鏈上至少有一個(gè)證書(shū)必須是一個(gè)可以信任的證書(shū)。缺省的認(rèn)為如果該證書(shū)鏈上的Root CA的證書(shū)可以信任,那么整條鏈上其他證書(shū)都可以用于任何用途。
              以下的幾個(gè)option只用來(lái)驗(yàn)證Root CA的證書(shū)。CA在頒發(fā)證書(shū)的時(shí)候可以控制該證書(shū)的用途,比如頒發(fā)可以用于SSL client而不能用于SSL server的證書(shū)。
              -trustout
              打印出可以信任的證書(shū)。
              -setalias arg
              設(shè)置證書(shū)別名。比如你可以把一個(gè)證書(shū)叫"fordesign's certificate", 那么以后就可以使用這個(gè)別名來(lái)引用這個(gè)證書(shū)。
              -alias
              打印證書(shū)別名。
             -clrtrust
             清除證書(shū)附加項(xiàng)里所有有關(guān)用途允許的內(nèi)容。
             -clrreject
             清除證書(shū)附加項(xiàng)里所有有關(guān)用途禁止的內(nèi)容。
             -addtrust arg
             添加證書(shū)附加項(xiàng)里所有有關(guān)用途允許的內(nèi)容。
             -addreject arg
             添加證書(shū)附加項(xiàng)里所有有關(guān)用途禁止的內(nèi)容。
             -purpose
             打印出證書(shū)附加項(xiàng)里所有有關(guān)用途允許和用途禁止的內(nèi)容。
             
          與簽名有關(guān)的otpion
              本指令可以用來(lái)處理CSR和給證書(shū)簽名,就象一個(gè)CA
              -signkey filename
              使用這個(gè)option同時(shí)必須提供私有密鑰文件。這樣把輸入的文件變成字簽名的證書(shū)。
              如果輸入的文件是一個(gè)證書(shū),那么它的頒發(fā)者會(huì)被set成其擁有者.其他相關(guān)的項(xiàng)也會(huì)被改成符合自簽名特征的證書(shū)項(xiàng)。
              如果輸入的文件是CSR, 那么就生成自簽名文件。
              -clrext
              把證書(shū)的擴(kuò)展項(xiàng)刪除。
              -keyform PEM|DER
              指定使用的私有密鑰文件格式。
              -days arg
              指定證書(shū)的有效時(shí)間長(zhǎng)短。缺省為30天。
              -x509toreq
              把一個(gè)證書(shū)轉(zhuǎn)化成CSR.用-signkey指定私有密鑰文件
              -req
              缺省的認(rèn)為輸入文件是證書(shū)文件,set了這個(gè)option說(shuō)明輸入文件是CSR.
              -CA filename
              指定簽名用的CA的證書(shū)文件名。
              -CAkey filename
              指定CA私有密鑰文件。如果這個(gè)option沒(méi)有參數(shù)輸入,那么缺省認(rèn)為私有密鑰在CA證書(shū)文件里有。
              -CAserial filename
              指定CA的證書(shū)系列號(hào)文件。證書(shū)系列號(hào)文件在前面介紹過(guò),這里不重復(fù)了。
              -CAcreateserial filename
              如果沒(méi)有CA系列號(hào)文件,那么本option將生成一個(gè)。
              -extfile filename
              指定包含證書(shū)擴(kuò)展項(xiàng)的文件名。如果沒(méi)有,那么生成的證書(shū)將沒(méi)有任何擴(kuò)展項(xiàng)。
              -extensions section
             指定文件中包含要增加的擴(kuò)展項(xiàng)的section
              上面?zhèn)z個(gè)option有點(diǎn)難明白是吧?后面有舉例。
              與名字有關(guān)的option.這些option決定證書(shū)擁有者/頒發(fā)者的打印方式。缺省方式是印在一行中。
              這里有必要解釋一下這個(gè)證書(shū)擁有者/頒發(fā)者是什么回事。它不是我們常識(shí)里的一個(gè)名字,而是一個(gè)結(jié)構(gòu),包含很多字段。
              英文分別叫subject name/issuer name.下面是一個(gè)subject name的例子
              subject=
              countryName = AU
              stateOrProvinceName = Some-State
              localityName = gz
              organizationName = ai ltd
              organizationalUnitName = sw
              commonName = fordesign
              emailAddress = xxx@xxx.xom


          -nameopt
              這個(gè)option后面的參數(shù)就是決定打印的方式,其參數(shù)有以下可選:
              compat
              使用以前版本的格式,等于沒(méi)有設(shè)置任何以下option
              RFC2253
              使用RFC2253規(guī)定的格式。
              oneline
              所有名字打印在一行里面。
             multiline
              名字里的各個(gè)字段用多行打印出來(lái)。
              上面那幾個(gè)是最常用的了,下面的這些我怎么用怎么不對(duì),也許以后研究source在完善這里了。
              esc_2253 esc_ctrl esc_msb use_quote utf8 no_type show_type dump_der
              dump_nostr dump_all dump_unknown sep_comma_plus sep_comma_plus_space
              sep_semi_plus_space sep_multiline dn_rev nofname, sname, lname, oid spc_eq
              舉例時(shí)間:
              打印出證書(shū)的內(nèi)容:
              openssl x509 -in cert.pem -noout -text
              打印出證書(shū)的系列號(hào)
              openssl x509 -in cert.pem -noout -serial
              打印出證書(shū)的擁有者名字
              openssl x509 -in cert.pem -noout -subject
              以RFC2253規(guī)定的格式打印出證書(shū)的擁有者名字
              openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
              在支持UTF8的終端一行過(guò)打印出證書(shū)的擁有者名字
              openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb
              打印出證書(shū)的MD5特征參數(shù)
              openssl x509 -in cert.pem -noout -fingerprint
              打印出證書(shū)的SHA特征參數(shù)
              openssl x509 -sha1 -in cert.pem -noout -fingerprint
              把PEM格式的證書(shū)轉(zhuǎn)化成DER格式
              openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
              把一個(gè)證書(shū)轉(zhuǎn)化成CSR
              openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
              給一個(gè)CSR進(jìn)行處理,頒發(fā)字簽名證書(shū),增加CA擴(kuò)展項(xiàng)
              openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem
              給一個(gè)CSR簽名,增加用戶(hù)證書(shū)擴(kuò)展項(xiàng)
              openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial
              把某證書(shū)轉(zhuǎn)化成用于SSL client可信任證書(shū), 增加別名alias
              openssl x509 -in cert.pem -addtrust sslclient -alias "Steve's Class 1 CA" -out trust.pem
              上面有很多地方涉及到證書(shū)擴(kuò)展/證書(shū)用途,這里解釋一下:
             我們知道一個(gè)證書(shū)是包含很多內(nèi)容的,除了基本的那幾個(gè)之外,還有很多擴(kuò)展的項(xiàng)。比如證書(shū)用途,其實(shí)也只是證書(shū)擴(kuò)展項(xiàng)中的一個(gè)。
              我們來(lái)看看一個(gè)CA證書(shū)的內(nèi)容:
              openssl x509 -in ca.crt -noout -text
              Certificate:
              Data:
              Version: 3 (0x2)
              Serial Number: 0 (0x0)
              Signature Algorithm: md5WithRSAEncryption
              Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd,
              CN=fordesign/Email=fordeisgn@21cn.com
              Validity
              Not Before: Nov 9 04:02:07 2000 GMT
              Not After : Nov 9 04:02:07 2001 GMT
              Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd,
              CN=fordesign/Email=fordeisgn@21cn.com
              Subject Public Key Info:
              Public Key Algorithm: rsaEncryption
              RSA Public Key: (1024 bit)
              Modulus (1024 bit):
              00:e7:62:1b:fb:78:33:d7:fa:c4:83:fb:2c:65:c1:
              08:03:1f:3b:79:b9:66:bb:31:aa:77:d4:47:ac:be:
              e5:20:ce:ed:1f:b2:b5:4c:79:c9:9b:ad:1d:0b:7f:
              84:49:03:6b:79:1a:fd:05:ca:36:b3:90:b8:5c:c0:
              26:93:c0:02:eb:78:d6:8b:e1:91:df:85:39:33:fc:
              3d:59:e9:7f:58:34:bf:be:ef:bd:22:a5:be:26:c0:
              16:9b:41:36:45:05:fe:f9:b2:05:42:04:c9:3b:28:
              c1:0a:48:f4:c7:d6:a8:8c:f9:2c:c1:1e:f5:8b:dc:
              19:59:7c:47:f7:91:cc:5d:75
              Exponent: 65537 (0x10001)
              X509v3 extensions:
              X509v3 Subject Key Identifier:
              69:41:87:55:BD:52:990:F5:EC:11:7F:0A:01:53:58:4E:0B:7C:F7
              X509v3 Authority Key Identifier:
              keyid:69:41:87:55:BD:52:990:F5:EC:11:7F:0A:01:53:58:
              4E:0B:7C:F7
              DirName:/C=AU/ST=Some-State/O=Internet Widgits Pty
              Ltd/CN=fordesign/Email=fordeisgn@21cn.com
              serial:00
              X509v3 Basic Constraints:
              CA:TRUE
              Signature Algorithm: md5WithRSAEncryption
              79:14:99:4a:8f:64:63:ab:fb:ad:fe:bc:ba:df:53:97:c6:92:
              41:4d:de:fc:59:98:39:36:36:8e:c6:05:8d:0a:bc:49:d6:20:
              02:9d:a2:5f:0f:03:12:1b:f2:af:23:90:7f:b1:6a:86:e8:3e:
              0b:2c:fd:11:89:86:c3:21:3c:25:e2:9c:de:64:7a:14:82:32:
              22:e1:35:be:39:90:f5:41:60:1a:77:2e:9f:d9:50:f4:81:a4:
              67:b5:3e:12:e5:06:da:1f:d9:e3:93:2d:fe:a1:2f:a9:f3:25:
              05:03:00:24:00:f1:5d:1f:d7:77:8b:c8:db:62:82:32:66:fd:
              10:fa
              是否看到我們先提到過(guò)的subject name/issuer name.本證書(shū)中這倆個(gè)字段是一樣的,明顯是自簽名證書(shū),是一個(gè)Root CA的證書(shū)。從X509v3 extension開(kāi)始就是證書(shū)擴(kuò)展項(xiàng)了。
              這里有個(gè)X509v3 Basic constraints. 里面的CA字段決定該證書(shū)是否可以做CA的證書(shū),這里是TURE。如果這個(gè)字段沒(méi)有,那么會(huì)根據(jù)其他內(nèi)容決定該證書(shū)是否可以做CA證書(shū)。
              如果是X509v1證書(shū),又沒(méi)有這個(gè)擴(kuò)展項(xiàng),那么只要subject name和issuer name相同,就認(rèn)為是Root CA證書(shū)了。
              本例的證書(shū)沒(méi)有證書(shū)用途擴(kuò)展項(xiàng),它是一個(gè)叫keyUseage的字段。
              舉個(gè)例子就可以看出該字段目前可以有以下值
              openssl x509 -purpose -in server.crt
              Certificate purposes:
              SSL client : Yes
              SSL client CA : No
              SSL server : Yes
              SSL server CA : No
              Netscape SSL server : Yes
              Netscape SSL server CA : No
              S/MIME signing : Yes
               S/MIME signing CA : No
              S/MIME encryption : Yes
               S/MIME encryption CA : No
               CRL signing : Yes
              CRL signing CA : No
              Any Purpose : Yes
              Any Purpose CA : Yes
              SSL Client
              SSL Client CA
             
              每個(gè)值的具體意義應(yīng)該可以看名字就知道了吧?
              X509指令在轉(zhuǎn)化證書(shū)成CSR的時(shí)候沒(méi)有辦法把證書(shū)里的擴(kuò)展項(xiàng)轉(zhuǎn)化過(guò)去給CSR簽名做證書(shū)的時(shí)候,如果使用了多個(gè)option,應(yīng)該自己保證這些option沒(méi)有沖突。

          posted on 2009-11-27 17:47 零全零美 閱讀(1414) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 安全相關(guān)
          主站蜘蛛池模板: 额敏县| 洪江市| 平阴县| 金川县| 盐津县| 蚌埠市| 炉霍县| 嵩明县| 浦北县| 毕节市| 阿坝县| 沙坪坝区| 霍城县| 介休市| 巴楚县| 重庆市| 曲水县| 辽中县| 涞水县| 罗江县| 霸州市| 巩义市| 满洲里市| 独山县| 宿迁市| 广南县| 敦化市| 梓潼县| 东乌| 闵行区| 古浪县| 克山县| 定远县| 上饶县| 项城市| 青神县| 定陶县| 方正县| 凉城县| 温泉县| 类乌齐县|