捕風(fēng)之巢

          統(tǒng)計(jì)

          留言簿(3)

          java友情鏈接

          閱讀排行榜

          評(píng)論排行榜

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

          distinguished_name
          ? ?
          指定一個(gè) section, 由那個(gè) section 指定在生成證書或者 CRS 的時(shí)候需要的資料 . section 的格式如下 :
          ? ?
          其格式有倆種 , 如果 KEY prompt set no( 看看 prompt 的解釋 ), 那么這個(gè) secion 的格式看起來(lái)就是這樣子的 :
          ? ???CN=My Name
          ? ? OU=My Organization
          ? ? emailAddress=someone@somewhere.org
          ? ?
          就說(shuō)只包括了字段和值。這樣子可以可以讓其他外部程序生成一個(gè)摸板文件 , 包含所有字段和值 , 把這些值提出來(lái) . 等下舉例時(shí)間會(huì)有詳細(xì)說(shuō)明 . 如果 prompt 沒(méi)有被 set no, 那么這個(gè) section 的格式則如下 :
          ? ? fieldName="please input ur name"
          ? ?
          ? ???fieldName_default="fordesign"
          ? ?
          ? ???fieldName_min= 3
          ? ?
          ? ???fieldName_max= 18
          ? ?
          ? ? "fieldname"
          就是字段名 , 比如 commonName( 或者 CN). fieldName( 本例中是 "prompt" 是用來(lái)提示用戶輸入相關(guān)的資料的 . 如果用戶什么都不輸 , 那么就使用確省值 . 如果沒(méi)有缺省值 , 那么該字段被忽略 . 用戶如果輸入 '.' , 也可以讓該字段被忽略 .
          ? ?
          用戶輸入的字節(jié)數(shù)必須在 fieldName_min fieldName_max 之間 . 不同的 section 還可能對(duì)輸入的字符有特殊規(guī)定 , 比如必須是可打印字符 . 那么在本例里面 , 程序的表現(xiàn)將如下 :
          ? ?
          首先把 fieldName 打印出來(lái)給用戶以提示
          ? ? please input ur name:
          ? ?
          之后如果用戶必須輸入 3 18 之間的一個(gè)長(zhǎng)度的字符串 , 如果用戶什么也不輸入 , 那么就把 fieldName_default 里面的值 "fordesign" 作為該字段的值添入 .
          ? ?
          有的字段可以被重復(fù)使用 . 這就產(chǎn)生了一個(gè)問(wèn)題 , config 文件是不允許同樣的 section 文件里面有多于一個(gè)的相同的 key . 其實(shí)這很容易解決 , 比如把它們的名字分別叫做 "1.organizationName", "2.organizationName"
          ? ? openssl
          在編譯的時(shí)候封裝了最必須的幾個(gè)字段, 比如 commonName, countryName, localityName, organizationName,organizationUnitName, stateOrPrivinceName 還增加了 emailAddress surname, givenName initials dnQualifier.
          ? ?
          舉例時(shí)間 :
          ? ?
          就使用確省值 . 如果沒(méi)有缺省值 , 那么該字段被忽略 . 用戶如果輸入 '.' , 也可以讓該字段被忽略 . 用戶輸入的字節(jié)數(shù)必須在 fieldName_min fieldName_max 之間 . 不同的 section 還可能對(duì)輸入的字符有特殊規(guī)定 , 比如必須是可打印字符 . 那么在本例里面 , 程序的表現(xiàn)將如下 :
          ? ?
          首先把 fieldName 打印出來(lái)給用戶以提示
          ? ? please input ur name:
          ? ?
          之后如果用戶必須輸入 3 18 之間的一個(gè)長(zhǎng)度的字符串 , 如果用戶什么也不輸入 , 那么就把 fieldName_default 里面的值 "fordesign" 作為該字段的值添入 .
          ? ?
          有的字段可以被重復(fù)使用 . 這就產(chǎn)生了一個(gè)問(wèn)題 , config 文件是不允許同樣的 section 文件里面有多于一個(gè)的相同的 key . 其實(shí)這很容易解決 , 比如把它們的名字分別叫做 "1.organizationName", "2.organizationName" openssl 在編譯的時(shí)候封裝了最必須的幾個(gè)字段,比如 commonName,countryName,localityName, organizationName,organizationUnitName, stateOrPrivinceName 還增加了 emailAddress surname, givenName initials dnQualifier.
          ? ?
          舉例時(shí)間 :
          ? ? Examine and verify certificate request:
          ? ?
          檢查和驗(yàn)證 CSR 文件 .
          ? ? openssl req -in req.pem -text -verify -noout
          ? ?
          做自己的私有密鑰文件 , 然后用這個(gè)文件生成 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
          ? ?
          做一個(gè)自簽名的給 Root CA 用的證書 :
          ? ? openssl req -x509 -newkey rsa:1024 -keyout key.pem -out crt.pem
          ? ?
          下面是與本指令有關(guān)的 config 文件中相關(guān)的部分的一個(gè)例子 :
          ? ? [ 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 文件的開(kāi)頭和結(jié)尾一行如下
          ? ? -----BEGIN CERTIFICATE REQUEST----
          ? ? -----END CERTIFICATE REQUEST----
          ? ?
          但個(gè)把變態(tài)軟件和 CA 硬是需要 CSR 的文件要這樣子 :
          ? ? -----BEGIN NEW CERTIFICATE REQUEST----
          ? ? -----END NEW CERTIFICATE REQUEST----
          ? ?
          -newhdr 就可以啦 , 或者你自己手工加也中 .openssl 對(duì)倆種格式都承認(rèn) .
          ? ? openssl
          config 文件也可以用環(huán)境變量 OPENSSL_CONF 或者 SSLEAY_CONF 來(lái)指定 .

          ?

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

          主站蜘蛛池模板: 泗阳县| 筠连县| 儋州市| 万安县| 邯郸县| 本溪市| 杭锦旗| 汽车| 沽源县| 阿克陶县| 勐海县| 盱眙县| 浦东新区| 江城| 天柱县| 四平市| 磐石市| 新兴县| 应用必备| 孟津县| 军事| 永年县| 滨州市| 九寨沟县| 昌黎县| 望都县| 西乌珠穆沁旗| 汶川县| 湘西| 木里| 大港区| 开江县| 石阡县| 崇州市| 桐柏县| 抚宁县| 东方市| 武川县| 盐源县| 满洲里市| 遵化市|