零全零美(www.zzgwt.com)
          生活中的很多事情,并不像If...Else那么簡單!
          posts - 96,comments - 52,trackbacks - 0
          openssl簡介-指令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]
             
             
              說明:
              本指令是一個功能很豐富的證書處理工具。可以用來顯示證書的內容,轉換其格式,給CSR簽名等等。由于功能太多,我們按功能分成幾部分來講。

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


          -nameopt
              這個option后面的參數就是決定打印的方式,其參數有以下可選:
              compat
              使用以前版本的格式,等于沒有設置任何以下option
              RFC2253
              使用RFC2253規定的格式。
              oneline
              所有名字打印在一行里面。
             multiline
              名字里的各個字段用多行打印出來。
              上面那幾個是最常用的了,下面的這些我怎么用怎么不對,也許以后研究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
              舉例時間:
              打印出證書的內容:
              openssl x509 -in cert.pem -noout -text
              打印出證書的系列號
              openssl x509 -in cert.pem -noout -serial
              打印出證書的擁有者名字
              openssl x509 -in cert.pem -noout -subject
              以RFC2253規定的格式打印出證書的擁有者名字
              openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
              在支持UTF8的終端一行過打印出證書的擁有者名字
              openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb
              打印出證書的MD5特征參數
              openssl x509 -in cert.pem -noout -fingerprint
              打印出證書的SHA特征參數
              openssl x509 -sha1 -in cert.pem -noout -fingerprint
              把PEM格式的證書轉化成DER格式
              openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
              把一個證書轉化成CSR
              openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
              給一個CSR進行處理,頒發字簽名證書,增加CA擴展項
              openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem
              給一個CSR簽名,增加用戶證書擴展項
              openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial
              把某證書轉化成用于SSL client可信任證書, 增加別名alias
              openssl x509 -in cert.pem -addtrust sslclient -alias "Steve's Class 1 CA" -out trust.pem
              上面有很多地方涉及到證書擴展/證書用途,這里解釋一下:
             我們知道一個證書是包含很多內容的,除了基本的那幾個之外,還有很多擴展的項。比如證書用途,其實也只是證書擴展項中的一個。
              我們來看看一個CA證書的內容:
              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
              是否看到我們先提到過的subject name/issuer name.本證書中這倆個字段是一樣的,明顯是自簽名證書,是一個Root CA的證書。從X509v3 extension開始就是證書擴展項了。
              這里有個X509v3 Basic constraints. 里面的CA字段決定該證書是否可以做CA的證書,這里是TURE。如果這個字段沒有,那么會根據其他內容決定該證書是否可以做CA證書。
              如果是X509v1證書,又沒有這個擴展項,那么只要subject name和issuer name相同,就認為是Root CA證書了。
              本例的證書沒有證書用途擴展項,它是一個叫keyUseage的字段。
              舉個例子就可以看出該字段目前可以有以下值
              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
             
              每個值的具體意義應該可以看名字就知道了吧?
              X509指令在轉化證書成CSR的時候沒有辦法把證書里的擴展項轉化過去給CSR簽名做證書的時候,如果使用了多個option,應該自己保證這些option沒有沖突。

          posted on 2009-11-27 17:47 零全零美 閱讀(1414) 評論(0)  編輯  收藏 所屬分類: 安全相關
          主站蜘蛛池模板: 巨鹿县| 吴川市| 灵山县| 周宁县| 修水县| 洛南县| 墨玉县| 什邡市| 山阴县| 大关县| 北碚区| 进贤县| 侯马市| 枣强县| 宁远县| 敖汉旗| 华宁县| 余江县| 雅安市| 定远县| 嘉黎县| 利津县| 金坛市| 南阳市| 湖南省| 友谊县| 康马县| 屏东市| 会同县| 工布江达县| 化隆| 铁力市| 乳山市| 安吉县| 金坛市| 余江县| 克山县| 嵊州市| 西贡区| 曲水县| 兖州市|