捕風之巢

          統計

          留言簿(3)

          java友情鏈接

          閱讀排行榜

          評論排行榜

          openssl簡介(十八)--指令req

          ?

          十八.???? 指令 req

          用法 :
          ? ?
          ? ? openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename]
          ? ?
          ? ? [-passin arg] [-out filename] [-passout arg] [-text] [-noout]
          ? ?
          ? ? [-verify] [-modulus] [-new] [-rand file(s)] [-newkey rsa]
          ? ?
          ? ? [-newkey dsa] [-nodes] [-key filename] [-keyform PEM|DER]
          ? ?
          ? ? [-keyout filename] [-[md5|sha1|md2|mdc2]] [-config filename]
          ? ?
          ? ? [-x509] [-days n] [-asn1-kludge] [-newhdr] [-extensions section]
          ? ?
          ? ? [-reqexts section]
          ? ?
          ? ???
          描述 :
          ? ?
          本指令用來創建和處理 PKCS#10 格式的證書 . 它還能夠建立自簽名證書 , Root CA.
          ? ?? ?? ?
          ? ? OPTIONS
          ? ? -inform DER|PEM
          ? ?
          指定輸入的格式是 DEM 還是 DER. DER 格式采用 ASN1 DER 標準格式。一般用的多的都是 PEM 格式,就是 base64 編碼格式 . 你去看看你做出來的那些 .key, .crt 文件一般都是 PEM 格式的,第一行和最后一行指明內容,中間就是經過編碼的東西。
          ? ? -outform DER|PEM
          ? ?
          和上一個差不多,不同的是指定輸出格式
          ? ? -in filename
          ? ?
          要處理的 CSR 的文件名稱 , 只有 -new -newkey 倆個 option 沒有被 set, option 才有效
          ? ? -passin arg
          ? ?
          去看看 CA 那一章關于這個 option 的解釋吧。
          ? ???-out filename
          ? ?
          要輸出的文件名
          ? ? -passout arg
          ? ?
          參看 dsa 指令里的 passout 這個 option 的解釋吧 .
          ? ?-text
          ? ?
          CSR 文件里的內容以可讀方式打印出來
          ? ? -noout
          ? ?
          不要打印 CSR 文件的編碼版本信息 .
          ? ? -modulus
          ? ?
          CSR 里面的包含的公共米要的系數打印出來 .
          ? ? -verify
          ? ?
          檢驗請求文件里的簽名信息 .
          ? ? -new
          ? ?
          option 產生一個新的 CSR, 它會要用戶輸入創建 CSR 的一些必須的信息 . 至于需要哪些信息 , 是在 config 文件里面定義好了的 . 如果 -key 沒有被 set, 那么就將根據 config 文件里的信息先產生一對新的 RSA 密鑰
          ? ? -rand file(s)
          ? ?
          產生 key 的時候用過 seed 的文件,可以把多個文件用冒號分開一起做 seed.
          ? ? -newkey arg
          ? ?
          同時生成新的私有密鑰文件和 CSR 文件 . option 是帶參數的 . 如果是產生 RSA 的私有密鑰文件 , 參數是一個數字 , 指明私有密鑰 bit 的長度 . 如果是產生 DSA 的私有密鑰文件 , 參數是 DSA 密鑰參數文件的文件名 .
          ? ? -key filename
          ? ?
          參數 filename 指明我們的私有密鑰文件名 . 允許該文件的格式是 PKCS#8.
          ? ? -keyform DER|PEM
          ? ?
          指定輸入的私有密鑰文件的格式是 DEM 還是 DER. DER 格式采用 ASN1 DER 標準格式。一般用的多的都是 PEM 格式,就是 base64 編碼格式 . 你去看看你做出來的那些 .key, .crt 文件一般都是 PEM 格式的,第一行和最后一行指明內容,中間就是經過編碼的東西。
          ? ? -outform DER|PEM
          ? ?
          和上一個差不多,不同的是指定輸出格式
          ? ? -keyform PEM|DER
          ? ?
          私有密鑰文件的格式 , 缺省是 PEM
          ? ? -keyout filename
          ? ?
          指明創建的新的私有密鑰文件的文件名 . 如果該 option 沒有被 set, 將使用 config 文件里面指定的文件名 .
          ? ? -nodes
          ? ?
          option set 的話 , 生成的私有密鑰文件將不會被加密 .
          ? ? -[md5|sha1|md2|mdc2]
          ? ?
          指明簽發的證書使用什么哈希算法 . 如果沒有被 set, 將使用 config 文件里的相應 item 的設置 . DSA CSR 將忽略這個 option, 而采用 SHA1 哈希算法 .
          ? ? -config filename
          ? ?
          使用的 config 文件的名稱 . option 如果沒有 set, 將使用缺省的 config 文件 .
          ? ? -x509
          ? ?
          option 將產生自簽名的證書 . 一般用來錯測試用 , 或者自己玩下做個 Root CA. 證書的擴展項在 config 文件里面指定 .
          ? ?-days n
          ? ?
          如果 -509 set, 那么這個 option 的參數指定我們自己的 CA 給人家簽證書的有效期 . 缺省是 30 .
          ? ? -extensions section -reqexts section
          ? ?
          這倆個 option 指定 config 文件里面的與證書擴展和證書請求擴展有關的倆個 section 的名字 ( 如果 -x509 這個 option set). 樣你可以在 config 文件里弄幾個不同的與證書擴展有關的 section, 然后為了不同的目的給 CSR 簽名的時候指明不同的 section 來控制簽名的行為 .
          ? ? -asn1-kludge
          ? ?
          缺省的 req 指令輸出完全符合 PKCS10 格式的 CSR, 但有的 CA 僅僅接受一種非正常格式的 CSR, 這個 option set 就可以輸出那種格式的 CSR. 要解釋這倆種格式有點麻煩 , 需要用到 ASN1 PKCS 的知識 , 而且現在這樣子怪的 CA 幾乎沒有 , 所以省略解釋
          ? ? -newhdr
          ? ?
          CSR 問的第一行和最后一行中加一個單詞 "NEW", 有的軟件 (netscape certificate server) 和有的 CA 就有這樣子的怪癖嗜好 . 如果那些必須要的 option 的參數沒有在命令行給出,那么就會到 config 文件里去查看是否有缺省 值, 然后時候。 config 文件中相關的一些 KEY 的解釋與本指令有關的 KEY 都在 [req] 這個 section 里面 .
          ? ? input_password output_password
          ? ?
          私有密鑰文件的密碼和把密碼輸出的文件名 . 同指令的 passin, passout 的意義相同 .
          ? ? default_bits
          ? ?
          指定產生的私有密鑰長度 , 如果為空 , 那么就用 512. 只有 -new set, 這個設置才起作用 , 意義同 -newkey 相同 .
          ? ? default_keyfile
          ? ?
          指定輸出私有密鑰文件名 , 如果為空 , 將輸出到標準輸入 , 意義同 -keyout 相同 .
          ? ? oid_file
          ? ? oid_section
          ? ?
          oid 文件有關的項 , oid 不清楚是什么東西來的 .
          ? ? RANDFILE
          ? ?
          產生隨機數字的時候用過 seed 的文件,可以把多個文件用冒號分開一起做 seed.
          ? ? encrypt_key
          ? ?
          如果本 KEY 設置為 no, 那么如果生成一個私有密鑰文件 , 將不被加密 . 同命令行的 -nodes 的意義相同 .
          ? ? default_md
          ? ?
          指定簽名的時候使用的哈希算法 , 缺省為 MD5. 命令行里有同樣的功能輸入 .
          ? ? string_mask
          ? ?
          屏蔽掉某些類型的字符格式 . 不要亂改這個 KEY 的值 !! 有的字符格式 netscape 不支持 , 所以亂改這個 KEY 很危險 .
          ? ? req_extensions
          ? ?
          指明證書請求擴展 section, 然后由那個 secion 指明擴展的特性 . openssl 的缺省 config 文件里 , 擴展的是 X509v3, 不擴展的是 x509v1. 這個 KEY 的意義和命令行里 -reqexts 相同 .
          ? ? x509_extensions
          ? ?
          同命令行的 -extension 的意義相同 . 指明證書擴展的 sesion, 由那個 section 指明證書擴展的特性 .
          ? ? prompt
          ? ?
          如果這個 KEY 設置為 no, 那么在生成證書的時候需要的那些信息將從 config 文件里讀入 , 而不是從標準輸入由用戶去輸入 , 同時改變下倆個 KEY 所指明的 section 的格式 .
          ? ? attributes
          ? ?
          一個過時了的東西 , 不知道也罷 . 不過它的意義和下一個 KEY 有點類似 ,
          ? ?
          格式則完全相同 .

          distinguished_name
          ? ?
          指定一個 section, 由那個 section 指定在生成證書或者 CRS 的時候需要的資料 . section 的格式如下 :
          ? ?
          其格式有倆種 , 如果 KEY prompt set no( 看看 prompt 的解釋 ), 那么這個 secion 的格式看起來就是這樣子的 :
          ? ???CN=My Name
          ? ? OU=My Organization
          ? ? emailAddress=someone@somewhere.org
          ? ?
          就說只包括了字段和值。這樣子可以可以讓其他外部程序生成一個摸板文件 , 包含所有字段和值 , 把這些值提出來 . 等下舉例時間會有詳細說明 . 如果 prompt 沒有被 set no, 那么這個 section 的格式則如下 :
          ? ? fieldName="please input ur name"
          ? ?
          ? ???fieldName_default="fordesign"
          ? ?
          ? ???fieldName_min= 3
          ? ?
          ? ???fieldName_max= 18
          ? ?
          ? ? "fieldname"
          就是字段名 , 比如 commonName( 或者 CN). fieldName( 本例中是 "prompt" 是用來提示用戶輸入相關的資料的 . 如果用戶什么都不輸 , 那么就使用確省值 . 如果沒有缺省值 , 那么該字段被忽略 . 用戶如果輸入 '.' , 也可以讓該字段被忽略 .
          ? ?
          用戶輸入的字節數必須在 fieldName_min fieldName_max 之間 . 不同的 section 還可能對輸入的字符有特殊規定 , 比如必須是可打印字符 . 那么在本例里面 , 程序的表現將如下 :
          ? ?
          首先把 fieldName 打印出來給用戶以提示
          ? ? please input ur name:
          ? ?
          之后如果用戶必須輸入 3 18 之間的一個長度的字符串 , 如果用戶什么也不輸入 , 那么就把 fieldName_default 里面的值 "fordesign" 作為該字段的值添入 .
          ? ?
          有的字段可以被重復使用 . 這就產生了一個問題 , config 文件是不允許同樣的 section 文件里面有多于一個的相同的 key . 其實這很容易解決 , 比如把它們的名字分別叫做 "1.organizationName", "2.organizationName"
          ? ? openssl
          在編譯的時候封裝了最必須的幾個字段, 比如 commonName, countryName, localityName, organizationName,organizationUnitName, stateOrPrivinceName 還增加了 emailAddress surname, givenName initials dnQualifier.
          ? ?
          舉例時間 :
          ? ?
          就使用確省值 . 如果沒有缺省值 , 那么該字段被忽略 . 用戶如果輸入 '.' , 也可以讓該字段被忽略 . 用戶輸入的字節數必須在 fieldName_min fieldName_max 之間 . 不同的 section 還可能對輸入的字符有特殊規定 , 比如必須是可打印字符 . 那么在本例里面 , 程序的表現將如下 :
          ? ?
          首先把 fieldName 打印出來給用戶以提示
          ? ? please input ur name:
          ? ?
          之后如果用戶必須輸入 3 18 之間的一個長度的字符串 , 如果用戶什么也不輸入 , 那么就把 fieldName_default 里面的值 "fordesign" 作為該字段的值添入 .
          ? ?
          有的字段可以被重復使用 . 這就產生了一個問題 , config 文件是不允許同樣的 section 文件里面有多于一個的相同的 key . 其實這很容易解決 , 比如把它們的名字分別叫做 "1.organizationName", "2.organizationName" openssl 在編譯的時候封裝了最必須的幾個字段,比如 commonName,countryName,localityName, organizationName,organizationUnitName, stateOrPrivinceName 還增加了 emailAddress surname, givenName initials dnQualifier.
          ? ?
          舉例時間 :
          ? ? Examine and verify certificate request:
          ? ?
          檢查和驗證 CSR 文件 .
          ? ? openssl req -in req.pem -text -verify -noout
          ? ?
          做自己的私有密鑰文件 , 然后用這個文件生成 CSR 文件 .
          ? ? openssl genrsa -out key.pem 1024
          ? ? openssl req -new -key key.pem -out req.pem
          ? ?
          也可以一步就搞定 :
          ? ? openssl req -newkey rsa:1024 -keyout key.pem -out req.pem
          ? ?
          做一個自簽名的給 Root CA 用的證書 :
          ? ? openssl req -x509 -newkey rsa:1024 -keyout key.pem -out crt.pem
          ? ?
          下面是與本指令有關的 config 文件中相關的部分的一個例子 :
          ? ? [ req ]
          ? ? default_bits = 1024
          ? ? default_keyfile = privkey.pem
          ? ? distinguished_name = req_distinguished_name
          ? ? attributes = req_attributes
          ? ? x509_extensions = v3_ca
          ? ? dirstring_type = nobmp
          ? ? [ req_distinguished_name ]
          ? ? countryName = Country Name (2 letter code)
          ? ? countryName_default = AU
          ? ? countryName_min = 2
          ? ? countryName_max = 2
          ? ? localityName = Locality Name (eg, city)
          ? ? organizationalUnitName = Organizational Unit Name (eg, section)
          ? ? commonName = Common Name (eg, YOUR name)
          ? ? commonName_max = 64
          ? ? emailAddress = Email Address
          ? ? emailAddress_max = 40
          ? ? [ req_attributes ]
          ? ? challengePassword = A challenge password
          ? ? challengePassword_min = 4
          ? ? challengePassword_max = 20
          ? ???[ v3_ca ]
          ? ???subjectKeyIdentifier=hash
          ? ? authorityKeyIdentifier=keyid:always,issuer:always
          ? ? basicConstraints = CA:true
          ? ? RANDFILE = $ENV::HOME/.rnd
          ? ? [ req ]
          ? ? default_bits = 1024
          ? ? default_keyfile = keyfile.pem
          ? ? distinguished_name = req_distinguished_name
          ? ? attributes = req_attributes
          ? ? prompt = no
          ? ? output_password = mypass
          ? ? [ req_distinguished_name ]
          ? ? C = GB
          ? ? ST = Test State or Province
          ? ? L = Test Locality
          ? ? O = Organization Name
          ? ? OU = Organizational Unit Name
          ? ? CN = Common Name
          ? ? emailAddress = test@email.address
          ? ? [ req_attributes ]
          ? ? challengePassword = A challenge password
          ? ?
          一般的 PEM 格式的 CSR 文件的開頭和結尾一行如下
          ? ? -----BEGIN CERTIFICATE REQUEST----
          ? ? -----END CERTIFICATE REQUEST----
          ? ?
          但個把變態軟件和 CA 硬是需要 CSR 的文件要這樣子 :
          ? ? -----BEGIN NEW CERTIFICATE REQUEST----
          ? ? -----END NEW CERTIFICATE REQUEST----
          ? ?
          -newhdr 就可以啦 , 或者你自己手工加也中 .openssl 對倆種格式都承認 .
          ? ? openssl
          config 文件也可以用環境變量 OPENSSL_CONF 或者 SSLEAY_CONF 來指定 .

          ?

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

          主站蜘蛛池模板: 双牌县| 朔州市| 云霄县| 启东市| 桂平市| 静宁县| 临邑县| 古田县| 巴塘县| 韶山市| 合水县| 高要市| 唐河县| SHOW| 米泉市| 三门峡市| 新昌县| 昭平县| 深州市| 格尔木市| 修武县| 育儿| 东至县| 周至县| 吴桥县| 同江市| 长沙县| 嘉鱼县| 夹江县| 麻栗坡县| 朔州市| 乌拉特中旗| 巩留县| 班戈县| 于田县| 高要市| 洛阳市| 四平市| 东台市| 汾阳市| 海晏县|