日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

密码学专题 证书和CA指令 申请证书|建立CA|CA操作|使用证书|验证证书

發(fā)布時(shí)間:2023/12/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 密码学专题 证书和CA指令 申请证书|建立CA|CA操作|使用证书|验证证书 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Req指令介紹

功能概述和指令格式

  • req指令一般來(lái)說(shuō)應(yīng)該是提供給證書申請(qǐng)用戶的工具,用來(lái)生成證書請(qǐng)求以便交給CA驗(yàn)證和簽發(fā)證書。但是,OpenSSL的req指令的功能遠(yuǎn)比這樣的要求強(qiáng)大得多,它不僅可以生成RSA密鑰、DSA密鑰,以及將它們封裝成證書請(qǐng)求,還可以對(duì)現(xiàn)有的證書請(qǐng)求進(jìn)行簽名驗(yàn)證、格式轉(zhuǎn)換及信息修改等。下面將通過(guò)對(duì)req指令的各個(gè)參數(shù)的介紹來(lái)了解其全面的功能。首先來(lái)看看req指令的格式:

  • eq指令的許多選項(xiàng)跟OpenSSL配置文件(默認(rèn)為openslcnf)的證書請(qǐng)求部分是緊密相關(guān)的,如果在指令中有些選項(xiàng)需要指定的參數(shù)沒有給定,那么req指令就會(huì)從配置文件中相應(yīng)的字段去查找設(shè)置值。此外,有相當(dāng)部分的證書請(qǐng)求屬性都是由配置文件的相關(guān)部分決定的。在本節(jié)的介紹中,會(huì)指出相應(yīng)的證書請(qǐng)求配置部分內(nèi)容。?

輸入和輸出格式選項(xiàng)inform,outform和keyform

  • inform選項(xiàng)指定了選項(xiàng)in指定的輸入證書請(qǐng)求文件的編碼格式,目前來(lái)說(shuō),支持的編碼格式有兩種:PEM編碼和DER編碼,默認(rèn)為PEM編碼。in選項(xiàng)指定的文件輸入內(nèi)容是一個(gè)已經(jīng)存在的符合PKCS#10標(biāo)準(zhǔn)的證書請(qǐng)求,在這里輸入的目的一般是為了驗(yàn)證和顯示其中的一些內(nèi)容。outform選項(xiàng)指定了輸出選項(xiàng)out輸出的證書請(qǐng)求或自簽名證書的編碼格式,目前支持的編碼格式包括PEM編碼和DER編碼,默認(rèn)為PEM編碼。需要注意的是,該選項(xiàng)指定的格式不影響keyout選項(xiàng)的密鑰編碼格式和pubkey輸出的公鑰編碼格式keyform選項(xiàng)指定了密鑰輸入選項(xiàng)key指定的密鑰編碼格式,目前來(lái)說(shuō),可以接受的編碼格式包括PEM編碼格式、DER編碼格式、PKCS#12編碼格式、Netscape編碼格式、舊版本的IISSGC編碼格式及Engine格式

輸入和輸出文件選項(xiàng)in,out,key和keyout

  • in選項(xiàng)指定了保存證書請(qǐng)求的文件名,默認(rèn)是標(biāo)準(zhǔn)輸入。如果啟用了該選項(xiàng),那么指令將根據(jù)一個(gè)已經(jīng)存在的證書請(qǐng)求生成自簽名根證書或者顯示其中的一些內(nèi)容,但是該證書請(qǐng)求的內(nèi)容基本上是不能進(jìn)行變更的。如果是要根據(jù)現(xiàn)有的證書請(qǐng)求生成自簽名根證書(使用x509選項(xiàng)),那么要求同時(shí)使用key選項(xiàng)指定證書請(qǐng)求里面的公鑰相應(yīng)的私鑰以便對(duì)自簽名根證書進(jìn)行簽名。
  • 如果使用了new選項(xiàng)或者newkey選項(xiàng),那么in選項(xiàng)指定的證書請(qǐng)求文件將被忽略
  • in選項(xiàng)輸入的證書請(qǐng)求的編碼可以是PEM格式也可以是DER格式,由inform選項(xiàng)指定。
  • out選項(xiàng)指定了輸出文件名,默認(rèn)是標(biāo)準(zhǔn)輸出。輸出文件可以保存包括證書請(qǐng)求、自簽名證書、編碼公鑰,以及由text、subject、modulus等選項(xiàng)指定的明文輸出信息
  • 其中,證書請(qǐng)求和自簽名證書的輸出編碼格式可以為DER編碼或者PEM編碼,由outform選項(xiàng)指定。
  • 公鑰(如果使用了pubkey選項(xiàng)輸出)的編碼格式固定為PEM格式。
  • key選項(xiàng)指定了輸入私鑰的文件,該文件內(nèi)的私鑰編碼格式由keyform指定。
  • 需要注意的是,如果keyform指定的編碼格式是ENGINE格式,那么key指定的文件內(nèi)容要根據(jù)具體的Engine接口而定,可能是一個(gè)編碼公鑰,也可能是一個(gè)字符串ID,甚至可能是毫無(wú)意義的內(nèi)容。
  • 密鑰類型可以是RSA私鑰,也可以是DSA私鑰。
  • keyout選項(xiàng)指定了新生成的私鑰的輸出保存文件,如果沒有指定,那么默認(rèn)情況下會(huì)從OpenSSL配置文件中的req字段的default_keyfile選項(xiàng)的參數(shù)中獲取輸出私鑰文件名(openssl.cnf文件默認(rèn)值是privkey.pem)。僅在使用了newkey或new選項(xiàng)導(dǎo)致生成新密鑰對(duì)的時(shí)候該選項(xiàng)才有效,如果使用了已有的私鑰(key選項(xiàng)指定),那么該選項(xiàng)就會(huì)被忽略。該選項(xiàng)輸出的私鑰編碼格式固定為PEM編碼。
  • 輸出到keyout選項(xiàng)指定文件的私鑰一般都會(huì)被加密保護(hù),加密的算法是DES3的CBC模式。

輸入和輸出口令選項(xiàng)passin和passout

  • passin選項(xiàng)指定了讀取key選項(xiàng)指定的私鑰所需要的解密口令,輸入口令的方式可以是多樣的。如果沒有使用該選項(xiàng),而key選項(xiàng)指定的私鑰又要求提供解密口令,那么指令會(huì)在指令行提示用戶輸入口令。
  • passout選項(xiàng)指定了使用keyout選項(xiàng)輸出私鑰時(shí)使用的加密口令。如果使用了nodes選項(xiàng),則表示不對(duì)私鑰進(jìn)行加密,那么該選項(xiàng)指定的口令無(wú)效。如果該選項(xiàng)沒有使用,并且輸出了私鑰,也沒有使用nodes選項(xiàng),那么指令會(huì)要求用戶從指令行界面輸入加密口令。

指令操作類型new,newkey,nodes和x509

  • new選項(xiàng)告訴指令執(zhí)行生成新的證書請(qǐng)求操作,這時(shí)候,in選項(xiàng)指定的輸入文件會(huì)被忽略。使用new選項(xiàng)后,如果沒有使用key選項(xiàng)指定私鑰用于生成證書請(qǐng)求,那么就會(huì)根據(jù)newkey選項(xiàng)的參數(shù)生成新的密鑰對(duì)。
  • 默認(rèn)情況下,如果指令既沒有使用key選項(xiàng),也沒有使用newkey選項(xiàng),那么指令就會(huì)生成一個(gè)RSA密鑰,其長(zhǎng)度由OpenSSL配置文件中req字段的default_bits選項(xiàng)的參數(shù)決定。newkey選項(xiàng)讓指令生成一個(gè)新的密鑰對(duì),該選項(xiàng)只有在沒有使用key選項(xiàng)的時(shí)候才有效。
  • newkey選項(xiàng)有兩項(xiàng)功能:指定生成的密鑰類型和密鑰長(zhǎng)度。
  • newkey選項(xiàng)的參數(shù)有如下兩種形式:
  • rsa : numbits
  • dsa : file
  • 其中,rsa代表生成RSA密鑰作為證書請(qǐng)求的密鑰對(duì),dsa則表示生成DSA密鑰對(duì)作為證書請(qǐng)求的密鑰對(duì)。
  • numbits表示要生成RSA密鑰的長(zhǎng)度,一般來(lái)說(shuō)使用1024位作為普通證書請(qǐng)求是合適的。
  • file是存儲(chǔ)了DSA密鑰參數(shù)的文件名,DSA密鑰的長(zhǎng)度由該文件存儲(chǔ)的DSA參數(shù)決定。
  • nodes選項(xiàng)告訴指令不對(duì)新生成的私鑰進(jìn)行加密保存,這樣,passout選項(xiàng)將被簡(jiǎn)單忽略。如果沒有使用nodes選項(xiàng),并且生成了新的私鑰,那么私鑰輸出到keyout指定的文件中時(shí)將會(huì)被以DES3的CBC模式加密。x509選項(xiàng)讓指令生成一個(gè)自簽名根證書而不是輸出一個(gè)證書請(qǐng)求。
  • 所謂自簽名根證書,就是指用一對(duì)密鑰對(duì)的私鑰對(duì)自己相應(yīng)的公鑰生成的證書請(qǐng)求進(jìn)行簽名而頒發(fā)證書,這樣,證書申請(qǐng)人和簽發(fā)人都是同一個(gè),所以稱為自簽名根證書。如果根證書不是用于根CA,那么一般來(lái)說(shuō)只有測(cè)試上的意義。在req指令中,既可以直接生成一個(gè)新的自簽名根證書,也可以根據(jù)現(xiàn)有的證書請(qǐng)求和其相應(yīng)私鑰生成自簽名根證書。如果是根據(jù)現(xiàn)有證書請(qǐng)求生成自簽名根證書,那么一定要key選項(xiàng)提供相應(yīng)的私鑰指令才能執(zhí)行成功。

屬性設(shè)置選項(xiàng)digest,subj,days和set_serial

  • digest選項(xiàng)指定了生成證書請(qǐng)求或者自簽名根證書時(shí)使用的信息摘要算法,該信息摘要算法一般在生成數(shù)字簽名的時(shí)候使用
  • 需要注意的是,如果使用的是RSA算法,理論上除了DSS數(shù)字簽名標(biāo)準(zhǔn)指定的信息摘要算法(ds1)不能使用以外,其他信息摘要算法都能夠用于生成數(shù)字簽名并且req指令也能夠正確執(zhí)行,但是,由于RIPEMD算法在標(biāo)準(zhǔn)中沒有得到支持,很可能導(dǎo)致某些CA和應(yīng)用程序不能正確使用。如果使用的密鑰是DSA密鑰,那么digest的任何設(shè)定都會(huì)被忽略,事實(shí)上,這時(shí)digest的值就固定為DSS規(guī)定的信息摘要算法。默認(rèn)的digest算法是MD5。
  • subj選項(xiàng)直接從指令行指定了證書請(qǐng)求的主體名稱,如果沒有出示該選項(xiàng),那么req指令將會(huì)根據(jù)配置文件特征名稱字段的設(shè)定提示用戶輸入必要的信息,比如國(guó)家代號(hào)(通常是兩個(gè)字符)、省份、單位名稱,等等。如果使用subj選項(xiàng),那么這些提示信息就不會(huì)再出現(xiàn)。
  • subj選項(xiàng)的參數(shù)格式如下:

  • ?參數(shù)應(yīng)該以“/”開頭,每個(gè)值直接使用“/”作為分隔符號(hào)。“type* ”應(yīng)該是OpenSSL內(nèi)部支持的數(shù)據(jù)對(duì)象名稱。比如下面是一個(gè)例子:

  • days選項(xiàng)設(shè)定了生成的自簽名根證書的有效期,單位是天。該選項(xiàng)只有在使用了x509選項(xiàng)生成自簽名根證書的時(shí)候才有效。默認(rèn)值是30天。set_serial選項(xiàng)指定了生成的自簽名根證書的序列號(hào),默認(rèn)情況下生成的自簽名根證書序列號(hào)是0。該選項(xiàng)也只有在生成自簽名根證書的時(shí)候有效。?

配置文件選項(xiàng)config,extensions和reqexts

  • config選項(xiàng)指定了req指令在生成證書請(qǐng)求的時(shí)候使用OpenSSL配置文件,該文件的最好例子是openssl.cnf,一般來(lái)說(shuō),openssl.cnf也是默認(rèn)的req指令配置文件。但是,如果在Windows環(huán)境中使用并且在編譯的時(shí)候沒有指定正確的路徑,那么該默認(rèn)配置文件很可能因?yàn)槁窂讲徽_而不能不到,這時(shí)候使用config選項(xiàng)就顯得非常必要了。當(dāng)然,config選項(xiàng)并非指定配置文件的唯一方法,你還可以使用OPENSSL_CONF或者SSLEAY_CONF環(huán)境變量指定默認(rèn)的配置文件
  • extensions選項(xiàng)指定了生成自簽名根證書的時(shí)候使用的擴(kuò)展字段,其參數(shù)為OpenSSL配置文件中某個(gè)字段名(比如opensl.cnf文件中的v3_ca字段)。該字段一般規(guī)定了一些證書的擴(kuò)展項(xiàng)信息,比如證書的用途,是否能夠作為CA證書等性質(zhì)
  • reqexts選項(xiàng)指定了生成證書請(qǐng)求時(shí)使用的擴(kuò)展字段,該字段參數(shù)也是配置文件中的某個(gè)字段名,比如openssl.cnf文件中的v3_req字段,該字段也是證書請(qǐng)求中設(shè)置的要求申請(qǐng)的證書的一些使用限制信息。其內(nèi)容跟證書擴(kuò)展項(xiàng)內(nèi)容基本一致。extensions選項(xiàng)和reqexts選項(xiàng)使得在同一個(gè)配置文件中可以存在多個(gè)不同的字段用于生成不同用途和目的的證書,比如,申請(qǐng)一個(gè)CA證書和用戶證書的證書請(qǐng)求擴(kuò)展字段設(shè)置是不一樣的,那么可以在配置文件中將兩種不同的證書請(qǐng)求設(shè)置分別寫成兩個(gè)不同的字段,在生成證書請(qǐng)求的時(shí)候根據(jù)需要使用reqexts選項(xiàng)指定不同的字段即可達(dá)到不同的目的。

屬性格式化選項(xiàng)asn1-kludge,newhdr和utf8

  • 一般情況下,如果證書請(qǐng)求的某個(gè)屬性沒有填寫,那么對(duì)應(yīng)的證書請(qǐng)求字段會(huì)填寫一個(gè)空的值。
  • 但是某些不完全標(biāo)準(zhǔn)的CA不能正確處理這些空值,它們的要求是:如果沒有填寫任何值,那么該屬性字段就不應(yīng)該出現(xiàn)在證書請(qǐng)求中。
  • 對(duì)于這些CA,你可能就需要使用asn1-kludge選項(xiàng)實(shí)現(xiàn)這個(gè)目的(與屬性相對(duì)應(yīng)的字段為空就不出現(xiàn)在證書請(qǐng)求中)
  • newhdr選項(xiàng)使用后將會(huì)在輸出的PEM編碼的證書請(qǐng)求開始和結(jié)束行增加“NEW”標(biāo)記字符串,這是為了跟Netscape和其他一些證書服務(wù)器兼容設(shè)置的選項(xiàng)。使用newhdr和不用newhdr選項(xiàng)的證書請(qǐng)求格式如下。

  • utf8選項(xiàng)使用之后,將對(duì)輸入的信息采用UTF8編碼,而不是默認(rèn)的ASCI編碼。UTF8編碼對(duì)于中文來(lái)說(shuō)具有很重要的作用。

engine選項(xiàng)

  • engine選項(xiàng)指定后,所有指定Engine支持的操作都將使用Engine指定的加密庫(kù)或者硬件設(shè)備進(jìn)行,而不再是使用OpenSSL默認(rèn)的算法庫(kù)。對(duì)于req指令來(lái)說(shuō),可能使用Engine設(shè)備的操作包括RSA或者DSA密鑰產(chǎn)生、簽名時(shí)使用的信息摘要算法、簽名時(shí)使用的私鑰加密算法、簽名驗(yàn)證操作的公鑰解密操作、隨機(jī)數(shù)產(chǎn)生和對(duì)私鑰進(jìn)行加密的DES3算法。如果engine選項(xiàng)指定了有效的Engine設(shè)備,那么指令中任何該Engine設(shè)備支持的上述操作都會(huì)使用Engine設(shè)備的操作流程而不再使用OpenSSL算法庫(kù)本身提供的函數(shù)。

輸出內(nèi)容選項(xiàng)text,reqopt,pubkey,noout和subject

  • text選項(xiàng)讓指令輸出證書請(qǐng)求或者自簽名根證書內(nèi)容的明文解析,默認(rèn)情況下,它將輸出所有可能輸出的內(nèi)容
  • 但是如果使用了reqopt選項(xiàng),其輸出內(nèi)容就取決于reqopt選項(xiàng)。
  • reqopt選項(xiàng)用于指定text選項(xiàng)輸出的內(nèi)容,其參數(shù)可以是多個(gè),每個(gè)之間使用“,”作為連接符號(hào)。
  • reqopt支持的參數(shù)如表所示。?

  • ?對(duì)于證書請(qǐng)求來(lái)說(shuō),上表中的很多內(nèi)容沒有,對(duì)于這種情況,指令會(huì)自然忽略,相關(guān)的參數(shù)也就不會(huì)產(chǎn)生任何作用。
  • reqopt選項(xiàng)只有在跟text選項(xiàng)一起使用的時(shí)候才有效
  • 例如我們要使輸出自簽名證書的文本信息不包含序列號(hào)和公鑰信息,則可以使用下面的指令:

  • pubkey選項(xiàng)使用后,指令將會(huì)輸出PEM編碼的公鑰到out選項(xiàng)指定的文件中。默認(rèn)情況下只輸出私鑰到keyout指定的文件,并不輸出公鑰。
  • noout選項(xiàng)使用后,指令將不會(huì)輸出編碼的證書請(qǐng)求或者自簽名根證書到out選項(xiàng)指定的文件中,該選項(xiàng)一般用來(lái)測(cè)試指令或者查看證書請(qǐng)求的信息。
  • subject選項(xiàng)告訴指令輸出主體名信息,即使已經(jīng)使用text選項(xiàng)輸出了主體名信息,該選項(xiàng)的啟用也會(huì)讓指令重復(fù)輸出一遍主體名信息。

輸出字符編碼選項(xiàng)nameopt

  • nameopt選項(xiàng)指定了如何顯示主體名稱和簽發(fā)者名稱,主要用于顯示名稱中不同編碼的內(nèi)容,比如UTF8編碼等。如果沒有使用該選項(xiàng),那么默認(rèn)使用的是“oneline”參數(shù)。該選項(xiàng)可以同時(shí)使用多個(gè)參數(shù),每個(gè)參數(shù)之間使用“,”作為連接符。此外,每個(gè)參數(shù)之前還可以使用“-”表示不使用該參數(shù)定義的顯示方式。
  • 如表所述是nameopt選項(xiàng)支持的所有參數(shù)。

  • 需要注意的是,nameopt選項(xiàng)只影響使用text和subject選項(xiàng)輸出的主體名稱和簽發(fā)者名稱的顯示方式,對(duì)其他項(xiàng)目的顯示方式?jīng)]有影響。上述的功能對(duì)于正確顯示中文信息來(lái)說(shuō)具有很重要的意義。前面說(shuō)過(guò),可以同時(shí)使用多個(gè)參數(shù),下面是一個(gè)例子:?

  • 上述指令指定在顯示自簽名證書的主體名稱和簽發(fā)者名稱時(shí),使用單行顯示方式,但是禁止在顯示之前進(jìn)行UTF8格式的轉(zhuǎn)換,并且域名稱使用長(zhǎng)名稱進(jìn)行顯示。?

證書請(qǐng)求數(shù)字簽名驗(yàn)證選項(xiàng)verify

  • 使用verify選項(xiàng)的指令將對(duì)證書請(qǐng)求的數(shù)字簽名進(jìn)行驗(yàn)證操作,并給出失敗或者成功的提示信息。其驗(yàn)證的過(guò)程是從證書請(qǐng)求里面提取公鑰,然后使用該公鑰對(duì)證書請(qǐng)求的數(shù)字簽名進(jìn)行驗(yàn)證。

其他選項(xiàng)rand,batch和verbose

  • rand選項(xiàng)指定了生成密鑰對(duì)或者其他一些操作需要的隨機(jī)數(shù)種子文件。如果沒有使用rand選項(xiàng),指令會(huì)從其他可能得到的資源取得隨機(jī)數(shù)種子數(shù)據(jù)。
  • 使用batch選項(xiàng)將不再提示用戶輸入生成證書請(qǐng)求需要的用戶信息,而是直接從OpenSSL配置文件特征名稱字段讀取默認(rèn)值,如果沒有默認(rèn)值,則不填寫該值域。一般來(lái)說(shuō),在你做測(cè)試的時(shí)候使用該選項(xiàng)會(huì)提高效率。
  • verbose選項(xiàng)讓指令輸出執(zhí)行的各個(gè)操作的詳細(xì)信息,一般來(lái)說(shuō),該選項(xiàng)也僅對(duì)調(diào)試程序有意義。

?生成證書密鑰

證書請(qǐng)求中使用RSA密鑰

  • RSA密鑰是目前證書中最經(jīng)常使用的密鑰類型,這一部分是因?yàn)槠浼瓤梢灾С置荑€交換,又可以支持?jǐn)?shù)字簽名的特性;
  • 更重要的是RSA算法是一種經(jīng)過(guò)充分考驗(yàn)和密碼分析的算法,其安全性得到了公認(rèn)。在使用req指令生成證書請(qǐng)求時(shí),我們可以采用兩種方法生成RSA密鑰對(duì):一種是使用genrsa指令預(yù)先生成密鑰對(duì),一種是直接在req指令中生成密鑰對(duì)。從本質(zhì)上來(lái)說(shuō),這兩種方法沒有區(qū)別,但是,使用第一種方式能夠更靈活地處理密鑰的保存和格式等問(wèn)題
  • 我們首先看下面的指令,它使用req指令直接生成了一個(gè)新的1024位RSA密鑰用于新的證書請(qǐng)求中:

  • 上述指令對(duì)生成的RSA私鑰進(jìn)行了加密,加密的算法自己是沒有選擇余地的,只能是DES3-CBC模式,當(dāng)然,你可以使用rsa指令對(duì)密鑰使用的加密方法和口令進(jìn)行重新的更改。此外,私鑰輸出的編碼格式也沒有選擇的余地,只能是PEM編碼。這些限制可能很多時(shí)候不能滿足你的要求。
  • 為了避免上面這些限制,你可以使用genrsa指令先生成需要的RSA密鑰對(duì),然后再使用req指令生成證書請(qǐng)求。事實(shí)上,在實(shí)際應(yīng)用中,你的RSA密鑰對(duì)甚至可能不是使用OpenSSL的指令工具生成的,但這沒有關(guān)系,只要你的密鑰封裝格式是req指令中keyform選項(xiàng)支持的,那么就能夠使用req指令生成證書請(qǐng)求。下面我們來(lái)看怎么使用genrsa指令和req指令生成一個(gè)證書請(qǐng)求。雖然說(shuō)DES3-CBC方式的安全性一般還是值得信賴的,但我們更愿意使用256位的AES算法保護(hù)我們的RSA私鑰,畢竟對(duì)于私鑰來(lái)說(shuō),怎么提高它的安全性都不為過(guò)。
  • 顯然,req指令滿足不了我們的要求,那么可以使用genrsa指令:?

?證書請(qǐng)求中使用DSA密鑰

  • DSA密鑰是專門用于數(shù)字簽名的密鑰,當(dāng)你要申請(qǐng)一個(gè)用于數(shù)字簽名的證書的時(shí)候就可能需要使用這種類型的密鑰。跟RSA密鑰產(chǎn)生不同,DSA密鑰一般通過(guò)其預(yù)先生成的DSA密鑰參數(shù)來(lái)生成DSA密鑰。req指令提供了根據(jù)DSA密鑰參數(shù)生成DSA密鑰的功能,而DSA密鑰的長(zhǎng)度則由給定的DSA密鑰參數(shù)決定。當(dāng)然,你也可以根據(jù)給定的DSA密鑰對(duì)生成證書請(qǐng)求。下面我們介紹利用req指令本身生成DSA密鑰的功能。由于req指令要求輸入一組DSA密鑰參數(shù)來(lái)生成DSA密鑰,所以我們必須首先使用dsaparam指令生成DSA密鑰參數(shù)。
  • 需要注意的是,req指令只能接受PEM編碼的DSA密鑰參數(shù)
  • 首先生成DSA密鑰參數(shù)的指令如下:

  • ?跟使用req指令生成RSA密鑰對(duì)相同的是,輸出DSA私鑰的加密算法只能是DES3-CBC模式,編碼方式也只能是PEM方式。所以為了靈活和方便,你可能愿意使用gendsa指令來(lái)生成DSA密鑰,然后再使用req指令生成證書請(qǐng)求文件。首先我們利用剛才生成的DSA密鑰參數(shù)文件生成一對(duì)DSA密鑰:

  • ?再次強(qiáng)調(diào),上面我們?cè)谏蒖SA或者DSA密鑰對(duì)的時(shí)候,都只輸出了私鑰文件,這是因?yàn)?strong>私鑰文件結(jié)構(gòu)中已經(jīng)包含了相應(yīng)的公鑰參數(shù),req指令使用私鑰的時(shí)候,事實(shí)上主要是從其中提取出相應(yīng)的公鑰,并封裝在PKCS#10的證書請(qǐng)求結(jié)構(gòu)中,然后采用私鑰對(duì)整個(gè)證書請(qǐng)求結(jié)構(gòu)簽名從而完成操作。

誰(shuí)來(lái)生成密鑰對(duì)

  • 如果私鑰由用戶本地生成,使用其公鑰加密數(shù)據(jù),如果用戶消失會(huì)給組織帶來(lái)巨大的危險(xiǎn)。考慮到這點(diǎn),為了方便管理,通常就由CA或者RA來(lái)生成用戶的密鑰對(duì),并在發(fā)放證書的時(shí)候?qū)⒆C書和密鑰對(duì)一起發(fā)送給用戶。但這顯然違背了私鑰是唯一被主人擁有的假設(shè),這樣你可能覺得非常沒有安全感,因?yàn)檎莆諅浞菝荑€庫(kù)的人可能隨時(shí)可以查看你的任何資料和通信內(nèi)容,但是你沒有任何辦法
  • 對(duì)于用于數(shù)字簽名的證書來(lái)說(shuō)情況會(huì)好一點(diǎn),因?yàn)閿?shù)字簽名不需要對(duì)整個(gè)文件進(jìn)行加密,它不存在數(shù)據(jù)恢復(fù)的問(wèn)題。即便私鑰丟失或者破壞了,也只是不能使用它繼續(xù)簽名其他文件而已,換一個(gè)就是了。所以用于數(shù)字簽名的密鑰對(duì)不需要備份功能,一般可以由用戶自己產(chǎn)生。從法律角度而不是保密角度來(lái)看,數(shù)字簽名的唯一性顯得尤為重要。
  • 由于上述的這些原因,現(xiàn)在很多系統(tǒng)都使用所謂雙證書的概念,即一個(gè)證書用于密鑰交換,一個(gè)證書用于數(shù)字簽名用于密鑰交換的證書其密鑰對(duì)一般由CA或者RA代替用戶產(chǎn)生;而用于數(shù)字簽名的證書的密鑰對(duì)則由用戶自己產(chǎn)生。事實(shí)上,這樣的做法只是在法律上得到了保證,而數(shù)據(jù)保密性能則很值得懷疑,尤其是個(gè)人的隱私問(wèn)題。具體到技術(shù)上,如果采用的是用戶自身生成密鑰對(duì),那么req指令的功能應(yīng)該由用戶來(lái)使用。但是如果是CA或者RA生成密鑰對(duì),req指令跟用戶基本就沒有關(guān)系了,事實(shí)上這時(shí)候req指令的功能應(yīng)該由RA或者CA執(zhí)行,而用戶只要簡(jiǎn)單地把自己的信息交給RA或者CA就可以了。但是,CA真的那么值得信任?

在證書中添加擴(kuò)展項(xiàng)

  • 要真正用好req指令提供的功能,僅僅了解req指令的選項(xiàng)和參數(shù)是不夠的,還需要對(duì)req指令所依賴的OpenSSL配置文件中的req指令相關(guān)字段有比較深入的了解。一下子要全部了解是不可能的,使用OpenSSL配置文件中的證書請(qǐng)求相關(guān)字段實(shí)現(xiàn)一些擴(kuò)展的功能。首先我們看看怎么在證書請(qǐng)求中增加一個(gè)自己定義的擴(kuò)展項(xiàng)。在某些特殊情況下,可能需要在證書中擴(kuò)展一些標(biāo)記以便實(shí)現(xiàn)一些特定的功能,比如,你可能需要在給你公司員工發(fā)放的證書中增加一項(xiàng)權(quán)限的功能,這可能給會(huì)給管理帶來(lái)很大的方便,尤其對(duì)于有多個(gè)服務(wù)器的分布式系統(tǒng)中,這種證書尤其有用。下面我們就通過(guò)往證書的特征名稱字段中添加一個(gè)擴(kuò)展的字段實(shí)現(xiàn)存取用戶的權(quán)限信息
  • 首先請(qǐng)打開OpenSSL默認(rèn)的配置文件opensl.cnf,然后確保其中的下列語(yǔ)句沒有被注釋掉:

  • 上面定義了一個(gè)新的OID對(duì)象,其簡(jiǎn)短名稱和長(zhǎng)名稱都是UserRights,而OID則為2.5.4.255。下面,我們就要在證書請(qǐng)求的特征名稱字段添加我們新增加的這個(gè)OID對(duì)象,使得證書主體名稱中能夠增加一項(xiàng)代表用戶權(quán)限的值域。
  • 為了使得管理方便,我們限定該項(xiàng)的值只能是兩個(gè)字符,默認(rèn)的值是“US”(User),表示普通用戶權(quán)限。
  • 下面是往req_distinguished_name字段添加的語(yǔ)句:?

?

  • ?設(shè)置完上面這些內(nèi)容,我們就可以使用這個(gè)配置文件作為req指令的配置文件,進(jìn)行新證書請(qǐng)求的簽發(fā)。你會(huì)發(fā)現(xiàn)在生成證書請(qǐng)求時(shí)提示輸入信息中多了一項(xiàng)提示內(nèi)容,即“UserRights”選項(xiàng),用戶就可以根據(jù)自己對(duì)不同權(quán)限的命名填寫內(nèi)容了。
  • 如果你用text選項(xiàng)則顯示的證書請(qǐng)求主體名稱形式如下:

  • 如果證書應(yīng)用的系統(tǒng)是一個(gè)分布式的系統(tǒng),那么這些選項(xiàng)對(duì)于分布式的權(quán)限控制等會(huì)產(chǎn)生非常大的好處。當(dāng)然,要在最后生成的證書中增加這些擴(kuò)展項(xiàng),CA的配置文件相應(yīng)的一些選項(xiàng)也需要做一些更改?

申請(qǐng)用戶證書

  • 證書按照其在證書鏈中的位置分類,一般可以分為兩種:終端用戶證書和CA證書。所謂CA證書,是指該證書可以用于簽發(fā)別的用戶證書,也就是說(shuō),它可以有下級(jí)的證書終端用戶證書則用于具體應(yīng)用程序或協(xié)議中,它不能用來(lái)簽發(fā)別的證書,在證書鏈中,它處于最末端
  • 對(duì)于一般用戶來(lái)說(shuō),申請(qǐng)的證書都是終端用戶證書。對(duì)于生成證書請(qǐng)求的req指令來(lái)說(shuō),生成的證書請(qǐng)求是用于申請(qǐng)一個(gè)終端用戶證書還是CA證書是由OpenSSL配置文件的證書請(qǐng)求X.509v3擴(kuò)展項(xiàng)字段來(lái)決定的,opensl.cnf文件中的默認(rèn)字段名是req_v3。
  • 為了使req_v3擴(kuò)展字段生效,首先必須確保配置文件req字段中的下面語(yǔ)句沒有被注釋掉:

  • 接著,我們修改v3_req字段中的basicConstraints選項(xiàng)為下面的形式:

?

  • ?然后保存,利用這個(gè)配置文件作為req指令的配置文件,其生成的證書請(qǐng)求就是一個(gè)申請(qǐng)終端用戶證書的證書請(qǐng)求,如果你使用text選項(xiàng)輸出明文信息,你會(huì)發(fā)現(xiàn)在“RequestedExtensions”部分出現(xiàn)下面的信息:

  • ?上述的CA:FALSE值即表示該證書請(qǐng)求不是CA證書請(qǐng)求,而是普通的終端用戶證書請(qǐng)求。當(dāng)然,證書請(qǐng)求的這個(gè)擴(kuò)展字段最后能起到什么作用,還得取決于簽發(fā)證書的CA的具體策略。
  • 生成一個(gè)CA證書請(qǐng)求而不是普通的終端用戶證書請(qǐng)求,修改如下

  • ?然后保存,利用這個(gè)配置文件作為req指令的配置文件,其生成的證書請(qǐng)求就是一個(gè)申請(qǐng)CA證書的證書請(qǐng)求,如果你使用text選項(xiàng)輸出明文信息,你會(huì)發(fā)現(xiàn)在“RequestedExtensions”部分出現(xiàn)下面的信息:

  • 上述的CA:TRUE值即表示該證書請(qǐng)求是CA證書請(qǐng)求。同樣,證書請(qǐng)求的這個(gè)擴(kuò)展字段最后能起到什么作用,還得取決于簽發(fā)證書的上級(jí)CA的具體策略。

建立CA

  • CA是集技術(shù)和管理于一體的龐大機(jī)構(gòu)

CA服務(wù)器的基本功能

  • CA服務(wù)器是一個(gè)應(yīng)用程序,它從技術(shù)上實(shí)現(xiàn)了符合PKI和X.509等相關(guān)標(biāo)準(zhǔn)的證書簽發(fā)和管理功能。
  • 總的來(lái)說(shuō),其基本功能應(yīng)該包括以下幾個(gè)方面:接受申請(qǐng)證書的請(qǐng)求、審核證書請(qǐng)求、簽發(fā)證書、發(fā)布證書、吊銷證書、生成和發(fā)布證書吊銷列表(CRL)及證書庫(kù)的管理

接受證書請(qǐng)求

  • 這是首先必備的功能,一個(gè)CA應(yīng)用程序必須能夠從各種途徑接受用戶的證書請(qǐng)求,至少需要一個(gè)這樣的途徑和接口。一般來(lái)說(shuō),證書請(qǐng)求的提交歸納起來(lái)有三種:在線實(shí)時(shí)提交、在線非實(shí)時(shí)提交和本地提交
  • 在線實(shí)時(shí)提交是指提供一個(gè)應(yīng)用接口(一般是個(gè)服務(wù)端口),用戶可以通過(guò)支持CA服務(wù)器規(guī)定的證書請(qǐng)求協(xié)議發(fā)送證書請(qǐng)求信息,CA服務(wù)器能夠?qū)崟r(shí)響應(yīng)提交的請(qǐng)求并作出是否提交成功的回復(fù),如果CA服務(wù)器是自動(dòng)簽發(fā)證書并且你的申請(qǐng)符合設(shè)定的條件,用戶就有可能快速得到簽發(fā)好的證書。這種方式的實(shí)現(xiàn)一般采用C/S的模式,需要客戶端軟件的支持
  • 在線非實(shí)時(shí)提交一般通過(guò)Web方式實(shí)現(xiàn),用戶可以通過(guò)Web頁(yè)面把證書請(qǐng)求提交到服務(wù)器指定的一個(gè)目錄或者數(shù)據(jù)庫(kù)中,然后,CA服務(wù)器程序或其管理員可以定期或者不定期檢測(cè)數(shù)據(jù)庫(kù),如果發(fā)現(xiàn)有新的證書請(qǐng)求,則起動(dòng)證書請(qǐng)求審核和簽發(fā)流程。這種方式的實(shí)現(xiàn)一般采用B/S結(jié)構(gòu)
  • 本地提交方式即用戶到CA服務(wù)器所在地或者RA服務(wù)器所在地提交或填寫自己的資料和申請(qǐng)證書的請(qǐng)求,然后交給CA服務(wù)器管理員處理。一般來(lái)說(shuō),如果你的CA實(shí)現(xiàn)的是密鑰對(duì)由用戶自己生成的方式,那么一般接受的證書請(qǐng)求都是符合PKCS#10標(biāo)準(zhǔn)的。如果不是這樣,即CA服務(wù)器號(hào)稱可以替代用戶生成“安全”的密鑰對(duì)的方式,那么接受的資料很可能就是一些文本資料,至于具體的格式,就根據(jù)自己的需要決定了。
  • 上述三種接受證書請(qǐng)求的模式各有其不同的應(yīng)用環(huán)境。在線實(shí)時(shí)接受申請(qǐng)模式,實(shí)現(xiàn)起來(lái)工作量會(huì)比較大,并且需要客戶端軟件的支持;但是也有好處,在某些必須使用數(shù)字證書的客戶端軟件中可以集成證書自動(dòng)申請(qǐng)功能,這樣就簡(jiǎn)化了用戶使用客戶端軟件時(shí)候的配置操作。而基于Web方式的在線非實(shí)時(shí)提交方式實(shí)現(xiàn)起來(lái)顯然比較容易。本地提交方式能夠提供對(duì)用戶身份進(jìn)行嚴(yán)格確認(rèn)的機(jī)會(huì),這對(duì)于證書的安全應(yīng)用能夠提供很好的保障。

審核證書請(qǐng)求

  • 很難說(shuō)審核證書請(qǐng)求僅僅是一個(gè)技術(shù)上的問(wèn)題,事實(shí)上,審核過(guò)程要求得更多的是管理的策略。當(dāng)然,你可以通過(guò)CA服務(wù)器程序?qū)⒛愕墓芾聿呗詫?shí)現(xiàn),比如必須要求用戶提交的證書請(qǐng)求中國(guó)家名稱跟規(guī)定的相一致,等等。當(dāng)然,僅僅這些是不夠的,嚴(yán)肅對(duì)待一個(gè)證書請(qǐng)求的態(tài)度是驗(yàn)證嚴(yán)格審核其各個(gè)條目的信息,并在有必要的時(shí)候跟用戶本人進(jìn)行核實(shí)。這就至少要求CA服務(wù)器能夠向管理員顯示出一個(gè)證書請(qǐng)求的所有詳細(xì)內(nèi)容,這就是CA服務(wù)器對(duì)審核證書請(qǐng)求的基本要求,當(dāng)然,CA服務(wù)器可以實(shí)現(xiàn)

簽發(fā)證書

  • 如果通過(guò)了證書請(qǐng)求的審核過(guò)程,那么簽發(fā)證書就是CA服務(wù)器馬上要執(zhí)行的操作。該操作實(shí)際上是將證書請(qǐng)求的信息和CA服務(wù)器自己的部分信息按照X.509的標(biāo)準(zhǔn)進(jìn)行格式化,然后CA服務(wù)器使用自己的私鑰對(duì)所有這些信息進(jìn)行數(shù)字簽名,然后形成一個(gè)X.509標(biāo)準(zhǔn)的證書
  • 接著,當(dāng)然要將證書保存在證書庫(kù)中,并對(duì)證書庫(kù)進(jìn)行更新。

發(fā)布證書

  • 證書簽發(fā)好后,就需要將證書發(fā)布出去。發(fā)布對(duì)象有兩種:一種是申請(qǐng)證書的用戶本人,必須讓他能夠及時(shí)獲得自己的證書;一種是其他用戶,可以向他們提供獲得所有用戶證書的途徑
  • 一般來(lái)說(shuō),可以通過(guò)Web方式或LDAP目錄發(fā)布證書,當(dāng)然,對(duì)于申請(qǐng)證書的用戶本人,也可以通過(guò)Mail或其他途徑發(fā)送。在某些情況下,比如是CA服務(wù)器生成證書密鑰對(duì)的情況下,還要考慮私鑰的傳輸問(wèn)題,這一般來(lái)說(shuō)需要高度考慮其安全性,最好采用硬件設(shè)備來(lái)傳送私鑰。如果非要考慮用軟件的方式來(lái)保存私鑰,那么一般需要對(duì)私鑰進(jìn)行加密保存,最簡(jiǎn)單的方式,就是將證書和私鑰一起封裝成PKCS#12的證書然后通過(guò)可能的途徑發(fā)送給用戶本人。

吊銷證書

  • 有些情況下需要取消一個(gè)沒有過(guò)期的證書的有效性,那么這就需要CA服務(wù)器執(zhí)行吊銷該證書的操作,這是確保整個(gè)CA證書域安全性的必備條件。吊銷證書的操作一般就是更新證書數(shù)據(jù)庫(kù),發(fā)布新的CRL等,目的就是為了盡可能讓所有用戶都知道該證書已經(jīng)無(wú)效

生成和發(fā)布CRL

  • 雖然所有已經(jīng)吊銷的證書在CA有效的證書數(shù)據(jù)庫(kù)中都已經(jīng)不存在,但是用戶在很多時(shí)候并不能實(shí)時(shí)地訪問(wèn)和查詢CA數(shù)據(jù)庫(kù),當(dāng)然也就不能就此終止所有基于證書的應(yīng)用服務(wù)。這時(shí)候就需要利用CA服務(wù)器發(fā)布的證書吊銷列表(CRL)來(lái)進(jìn)行證書的驗(yàn)證。CA服務(wù)器必須能夠定期更新和發(fā)布CRL,以便用戶能夠獲得準(zhǔn)確的CRL信息。

證書庫(kù)管理

  • CA服務(wù)器的證書庫(kù)存儲(chǔ)了CA簽發(fā)的所有有效證書,有時(shí)候,甚至也包括無(wú)效的證書和證書相應(yīng)的私鑰,這就要求CA服務(wù)器能夠?qū)ψC書進(jìn)行有效的管理。例如對(duì)證書狀態(tài)的更新,無(wú)效和過(guò)期的證書應(yīng)該刪除或者做相應(yīng)的標(biāo)記狀態(tài),等等.

CA服務(wù)器的基本要素

  • 要建立和運(yùn)行一個(gè)CA服務(wù)器,那么至少應(yīng)該具備以下一些要素:
    • 一個(gè)具備CA應(yīng)用程序;
    • 一個(gè)CA證書和一個(gè)其相應(yīng)的私鑰,可能是自簽名的根證書,也可能是向另一個(gè)CA申請(qǐng)的證書;
    • 證書數(shù)據(jù)庫(kù),用于存儲(chǔ)證書(有時(shí)候還包括私鑰)。
  • CA應(yīng)用程序的選擇有很多,如果你不介意微軟的神秘代碼可能隱含的安全性問(wèn)題,那么可以用Windows系統(tǒng)的CA服務(wù)器程序。你還可以選擇OpenCA提供的CA服務(wù)器,當(dāng)然,它事實(shí)上就是OpenSSL的封裝版本。
  • CA證書和私鑰的產(chǎn)生根據(jù)不同的應(yīng)用而定,如果你的CA服務(wù)器是自成體系,并不需要一個(gè)上級(jí)CA的支持,那么可以使用OpenSSL的req指令生成一個(gè)自簽名根證書作為CA服務(wù)器的證書即可。
  • 如果你的CA服務(wù)器是上級(jí)CA的一個(gè)下級(jí)CA,那么就需要生成一個(gè)CA證書請(qǐng)求并發(fā)送給上級(jí)CA,然后等待上級(jí)CA簽發(fā)你的CA證書。
  • 證書數(shù)據(jù)庫(kù)的選擇是多樣的,你可以使用任何像SQLServer,Oracle和MySql這樣的數(shù)據(jù)庫(kù),也可以使用自定義的文本數(shù)據(jù)庫(kù),甚至可以使用特定的目錄結(jié)構(gòu)等。這需要根據(jù)自己的需要而定。如果你選擇現(xiàn)有的CA應(yīng)用程序,你可能沒有這么多選擇,比如OpenSSL的ca指令,就僅僅使用文本數(shù)據(jù)庫(kù)。具備了上述這些基本的要素,你的CA服務(wù)器就可以啟動(dòng)并運(yùn)行簽發(fā)證書的服務(wù)了。

OpenSSL模擬CA服務(wù)器架構(gòu)

  • 默認(rèn)的CA目錄結(jié)構(gòu)上面介紹了各種CA應(yīng)用服務(wù)器,本章節(jié)的目的只有一個(gè):就是介紹基于OpenSSL的ca指令的證書服務(wù)器。
  • 當(dāng)然,并非僅僅想告訴你OpenSSL的CA服務(wù)器是如何配置和使用的,而是希望通過(guò)上面的介紹,讓你深刻理解CA服務(wù)器的工作流程和操作過(guò)程。OpenSSL的ca指令是一個(gè)模擬的CA服務(wù)器程序,它實(shí)現(xiàn)了CA服務(wù)器的基本功能。
  • ca指令的正常運(yùn)行依賴于一個(gè)目錄結(jié)構(gòu)和一個(gè)OpenSSL配置文件,OpenSSL配置文件我們已經(jīng)相對(duì)熟悉了,本節(jié)主要對(duì)這個(gè)目錄結(jié)構(gòu)進(jìn)行介紹。
  • 如圖所示展現(xiàn)了整個(gè)CA目錄的結(jié)構(gòu)。圖中,粗線條框顯示的是目錄,而細(xì)線條框顯示的則是文件。圖中,certs和crl目錄是使用ca.pl程序創(chuàng)建生成的,目前來(lái)說(shuō),ca指令并沒有使用這兩個(gè)目錄,可以忽略
  • newcerts目錄存放新簽發(fā)的證書文件,證書文件名是序列號(hào),后綴名是pem,即輸出的證書默認(rèn)都是PEM編碼的。比如簽發(fā)的證書如果其序列號(hào)是01,那么其保存在newcerts目錄的證書文件名就是“01.pem”。
  • private目錄目前僅對(duì)于存放CA證書相應(yīng)的私鑰文件有意義,其默認(rèn)私鑰文件名為cakey.pem。每次使用CA指令如果沒有指定特別的密鑰,那么就會(huì)使用該密鑰簽發(fā)證書。
  • demoCA根目錄下的cacert.pem文件就是PEM編碼的CA證書文件,里面保存了CA的證書。如果沒有使用ca指令的選項(xiàng)指定別的證書文件,那么每次使用ca指令簽發(fā)證書的時(shí)候就使用該證書
  • demoCA根目錄下的index.txt文件是ca指令相應(yīng)的文本證書數(shù)據(jù)庫(kù),index.txt文件保存了已經(jīng)簽發(fā)的證書的信息和狀態(tài)
  • demoCA根目錄下的serial文件是ca指令決定簽發(fā)證書的序列號(hào)所依賴的文件,其格式和內(nèi)容請(qǐng)參考第6章相關(guān)內(nèi)容。在使用ca指令簽發(fā)證書后,你還會(huì)發(fā)現(xiàn)在根目錄下還會(huì)產(chǎn)生serial.old和index.txt.old文件,這是上次簽發(fā)證書時(shí)serial和index.txt文件的備份文件,一般來(lái)說(shuō)不用理會(huì)它們。

OpenSSL配置文件

  • 事實(shí)上,上面所說(shuō)的所有目錄結(jié)構(gòu)都是可以改變的,它們都由OpenSSL配置文件的CA字段所決定,讓我們來(lái)看看默認(rèn)的opensl.cnf文件的這些相關(guān)配置選項(xiàng):?

?

  • ?如果你愿意,你可以通過(guò)更改上述這些選項(xiàng)的值來(lái)更改ca指令使用的目錄結(jié)構(gòu)和文件。事實(shí)上,在使用ca指令時(shí),指定特定的OpenSSL配置文件也是必備的條件之一。為了方便起見,本書后面的章節(jié)在介紹ca指令時(shí),都以默認(rèn)的目錄結(jié)構(gòu)為準(zhǔn)

建立基于OpenSSL的CA服務(wù)器

手動(dòng)創(chuàng)建一個(gè)CA目錄結(jié)構(gòu)

  • 假設(shè)我們已經(jīng)擁有了ca指令程序和配置文件,為了使ca指令能夠正確運(yùn)行,首先就是按前面介紹的CA目錄結(jié)構(gòu)的要求創(chuàng)建這樣一個(gè)CA目錄結(jié)構(gòu)和相應(yīng)的文件。如果你愿意自己來(lái)一步一步建立這么一個(gè)目錄,那么可以按照下面的步驟進(jìn)行。
    • 1 在opensl可執(zhí)行程序(Windows下是opensl.exe)所在目錄下創(chuàng)建一個(gè)名為“demoCA”的目錄。
    • 2 在demoCA目錄下創(chuàng)建newcerts,private,crl和certs子目錄。
    • 3 在demoCA目錄下創(chuàng)建一個(gè)空的名為index.txt的文本文件。
    • 4 在demoCA目錄下創(chuàng)建一個(gè)空的名為serial的文件,用文本編輯器打開(vi或者記事本),在文件中填入01,保存退出。
    • 5 將CA證書文件轉(zhuǎn)換成PEM格式,復(fù)制到demoCA根目錄下,并重新命名為cacert.pem。
    • 6 將CA私鑰文件轉(zhuǎn)換成PEM格式,復(fù)制到demoCA/private目錄下,并重新命名為cakey.pem。
  • 經(jīng)過(guò)上述兩個(gè)步驟,你就建立了一個(gè)ca程序能夠使用的CA目錄結(jié)構(gòu)。如果你的CA使用上級(jí)CA簽發(fā)的證書,那么你可能需要將證書和私鑰文件轉(zhuǎn)換成PEM編碼的格式以完成第5和第6步的配置
  • 如果你使用的是自簽名根證書,那么可以使用下面的req指令生成一個(gè)自簽名根證書和私鑰:

自動(dòng)創(chuàng)建一個(gè)CA目錄結(jié)構(gòu)

  • 手動(dòng)創(chuàng)建一個(gè)CA目錄的過(guò)程是很煩瑣的,OpenSSL開發(fā)者能夠理解大家的這種心情,提供了一個(gè)基于Perl的腳本幫助大家自動(dòng)創(chuàng)建一個(gè)CA目錄結(jié)構(gòu)
  • 前提是,你正確安裝了Perl軟件。首先你將OpenSSL的apps目錄下的ca.pl文件復(fù)制到你想要放置CA目錄結(jié)構(gòu)的目錄
  • 接著,在指令行界面進(jìn)入到ca.pl所在的目錄,運(yùn)行下面的指令:

?證書配置文件選項(xiàng)config,name,extensions,extfile和policy

  • ca指令跟OpenSSL的配置文件關(guān)系非常緊密,ca指令的證書請(qǐng)求值域匹配策略、擴(kuò)展項(xiàng)參數(shù)及其他默認(rèn)的參數(shù)設(shè)置都是依賴于OpenSSL配置文件的相關(guān)字段
  • ca指令除了會(huì)自動(dòng)尋找和使用默認(rèn)的OpenSSL配置文件和字段外,還運(yùn)行用戶在指令中指定的配置文件及特定的字段
  • config選項(xiàng)指定將要使用的配置文件。在默認(rèn)情況下,如果不使用config選項(xiàng),ca指令首先會(huì)尋找環(huán)境變量OPENSSL_CONF或者SSLEAY_CONF定義的文件名,如果這兩個(gè)環(huán)境變量都沒有定義,那么就使用OpenSSL安裝時(shí)默認(rèn)的路徑。這個(gè)默認(rèn)的路徑通常情況下是“/usr/local/sl/opensl.cnf”,當(dāng)然,你可以在安裝OpenSSL的時(shí)候使用configure腳本指令更改這個(gè)默認(rèn)的安裝目錄
  • 比如通常在Windows下編譯完OpenSSL后,可執(zhí)行文件openssl.exe通常在目錄out32dll下,而其配置文件則在apps目錄下,為了在out32dll目錄下能夠正確使用OpenSSL的ca指令,可以使用config選項(xiàng):

  • 在默認(rèn)的情況下,ca指令使用的CA主配置字段由配置文件中ca字段的default_ca選項(xiàng)的參數(shù)值決定。其形式如:?

  • ?當(dāng)然,某些情況下你可能想使用在同一配置文件下(由config選項(xiàng)指定或默認(rèn)得到的配置文件值)另外一個(gè)字段作為CA的主配置字段,那么name選項(xiàng)就可以實(shí)現(xiàn)你這個(gè)目的。name選項(xiàng)的參數(shù)是字段名,比如上面的“CA_default”,指定的字段名應(yīng)該是已經(jīng)在使用的配置文件中定義好了的。
  • 例如在下面的名為openssl.cnf的配置文件中,定義了一個(gè)新的名為My_CA的CA主配置字段:

  • ?policy選項(xiàng)讓指令使用其參數(shù)指定的字段名作為簽發(fā)證書請(qǐng)求時(shí)的匹配策略字段,其參數(shù)是配置文件中定義的一個(gè)字段名稱。事實(shí)上,在OpenSSL提供的openssl.cnf文件中,就已經(jīng)定義了兩個(gè)匹配策略字段:policy_match和policy_anything
  • 默認(rèn)情況下,ca指令通過(guò)CA主配置字段的下列選項(xiàng)采用policy_match字段作為匹配策略:

  • 如果你不想更改openssl.cnf,但想使用policy_anything字段作為匹配策略字段,則可以使用下面的指令實(shí)現(xiàn)你的要求:?

  • ?假設(shè)你的CA需要管理不同的用戶群,而每個(gè)用戶群需要自己特定的匹配策略,比如每個(gè)用戶群組織名稱都不同但是要求同一用戶群的用戶組織名稱必須相同,那么就可以在配置文件中預(yù)先定義不同的匹配策略字段,然后根據(jù)具體用戶使用不同的匹配策略字段來(lái)簽發(fā)證書。policy選項(xiàng)在這種情況下可以大顯身手。
  • extensions和extfile兩個(gè)選項(xiàng)用來(lái)選定簽發(fā)證書時(shí)候使用的X.509v3擴(kuò)展項(xiàng)定義字段。extensions的參數(shù)是字段名,用來(lái)選定配置文件中用于定義X.509v3擴(kuò)展項(xiàng)的特定字段,默認(rèn)的字段所在文件跟config選項(xiàng)選定的配置文件或者默認(rèn)的配置文件是同一個(gè)文件。
  • 但是某些情況下你可能希望使用一個(gè)專用的文件用來(lái)保存X.509v3擴(kuò)展項(xiàng)信息,那么這時(shí)候可以使用extfile選項(xiàng)指定這個(gè)文件。如果僅僅使用了extfile選項(xiàng)指定額外的X.509v3擴(kuò)展項(xiàng)配置文件,而沒有使用extensions選項(xiàng),那么具體使用extfile指定的文件中那個(gè)字段,由默認(rèn)配置文件中CA主配置字段的x509_extensions選項(xiàng)決定,類似如下的格式:

  • 如果extensions和extfile兩個(gè)選項(xiàng)都沒有使用,那么默認(rèn)的情況下就會(huì)使用config選項(xiàng)指定或者默認(rèn)配置文件的CA主配置字段中x509_extensions選項(xiàng)參數(shù)指定的字段。例如在opensl.cnf文件中指定的就是上面所描述的usr_cert字段。假設(shè)我們?cè)趍y_con.fig.cnf文件中定義了一個(gè)X.509v3擴(kuò)展項(xiàng)字段如下:?

  • 使用好extensions和extfile兩個(gè)選項(xiàng)能夠使ca指令的運(yùn)用更加靈活。例如,你管理的用戶可能其證書用途各不相同,這可以通過(guò)在X.509v3的擴(kuò)展項(xiàng)中來(lái)定義。為了方便簽發(fā)各種不同用途的證書,如果你不使用extensions選項(xiàng),或許你需要不斷煩瑣地更改配置文件的X.509v3擴(kuò)展項(xiàng)字段(默認(rèn)是usr_cert),相信這樣下去,很快你就會(huì)產(chǎn)生辭職的想法。不過(guò),如果你會(huì)使用extensions選項(xiàng),事情就不一樣了,你可以根據(jù)需要預(yù)先編輯好幾個(gè)不同的x509_v3擴(kuò)展項(xiàng)字段,然后根據(jù)簽發(fā)證書的需要使用extensions和extfile選項(xiàng)選用不同的字段,從而實(shí)現(xiàn)不同權(quán)限的證書的簽發(fā)。需要注意的是,如果你提供了有效的X.509v3擴(kuò)展項(xiàng)字段(不管通過(guò)指令選項(xiàng)提供還是配置文件選項(xiàng)提供),即便字段是空的,指令也會(huì)生成一個(gè)X.509v3版本的證書。但是如果沒有提供有效的X.509v3擴(kuò)展項(xiàng),那么就生成X.509v1證書。

輸入和輸出選項(xiàng)in,infiles,out和outdir

  • in選項(xiàng)的參數(shù)是一個(gè)可以包含路徑的文件名,該文件保存的應(yīng)該是一個(gè)PEM編碼的PKCS#10格式的證書請(qǐng)求。事實(shí)上,in選項(xiàng)僅用于證書請(qǐng)求的輸入,而不能輸入其他類型的內(nèi)容,也就是說(shuō),如果你使用了in選項(xiàng),那么表示你要執(zhí)行的操作就是簽發(fā)一個(gè)證書
  • infiles選項(xiàng)的參數(shù)是一系列包含PEM編碼證書請(qǐng)求的文件,跟in選項(xiàng)唯一不同的是,它可以一下子輸入多個(gè)證書請(qǐng)求文件,而不是一個(gè)該選項(xiàng)總是作為指令的最后一個(gè)選項(xiàng),其后面的所有參數(shù)都被認(rèn)為是證書請(qǐng)求文件
  • out選項(xiàng)指定了輸出簽發(fā)好的證書或者新生成的CRL的文件。此外,如果沒有使用notext選項(xiàng),那么證書的明文信息也會(huì)輸出到out選項(xiàng)指定的文件中,這在大多數(shù)Windows平臺(tái)上會(huì)導(dǎo)致證書文件不能被正確解釋,解決的最簡(jiǎn)單辦法是使用notext選項(xiàng)禁止這些明文信息的輸出。不過(guò),在較新的Windows系統(tǒng),如WindowsServer2003,這個(gè)問(wèn)題得到了解決。
  • out選項(xiàng)指定的文件中輸出的證書或者CRL都是PEM編碼的
  • outdir選項(xiàng)指定了新生成證書的輸出目錄,在默認(rèn)情況下,新生成證書總是輸出到newcerts目錄,并且是以序列號(hào)加“pem”后綴成為一個(gè)完整的證書文件名。這些證書都采用了PEM編碼。如果使用outdir選項(xiàng)指定了新的目錄,那么新生成的證書文件就會(huì)輸出到這個(gè)新指定的目錄。需要注意的是,不管out選項(xiàng)是否給出,都不會(huì)對(duì)輸出到outdir或者其默認(rèn)目錄的證書文件產(chǎn)生影響

特殊的證書請(qǐng)求輸入選項(xiàng)s_cert和spkac

  • 前面介紹的兩種證書請(qǐng)求的輸入方式,即使用in或者infiles選項(xiàng)。它們的區(qū)別是輸入單個(gè)證書請(qǐng)求文件還是輸入多個(gè)證書請(qǐng)求文件。而它們的共同點(diǎn)則是輸入的都是PEM編碼的符合PKCS#10標(biāo)準(zhǔn)的證書請(qǐng)求
  • OpenSSL還提供了其他兩種輸入證書請(qǐng)求的方法,即ss_cert選項(xiàng)和spkac選項(xiàng)支持的方法。
  • ss_cert選項(xiàng)允許用戶輸入一個(gè)自簽名的證書作為申請(qǐng)證書的證書請(qǐng)求,ca指令將會(huì)從這個(gè)自簽名證書中提取用戶信息和公鑰用于簽發(fā)最后的用戶證書。也就是說(shuō),你可以使用req指令生成一個(gè)自簽名證書而不是證書請(qǐng)求,然后用這個(gè)自簽名證書來(lái)向上級(jí)CA提供信息申請(qǐng)你的證書。
  • spkac選項(xiàng)允許用戶輸入一個(gè)SPKAC格式的文件作為申請(qǐng)證書請(qǐng)求的資料,spkac是Netscape規(guī)定的一種格式,該格式包含了一個(gè)簽名的公鑰和其他附加用戶信息。需要注意的是,使用spkac作為證書請(qǐng)求輸入時(shí),輸出的證書編碼是DER格式,而不是PEM格式的。

證書有效期選項(xiàng)

  • startdate,days和enddate這三個(gè)都是用來(lái)設(shè)置證書有效日期的選項(xiàng),分別是設(shè)置證書的生效時(shí)間、證書的到期時(shí)間及有效時(shí)間
  • startdate設(shè)置證書的生效時(shí)間,其參數(shù)格式是“YYMMDDHHMMSSZ”,每?jī)晌淮硪粋€(gè)時(shí)間變量,分別是“年月日時(shí)分秒”。比如要定義簽發(fā)的證書生效時(shí)間是2003年9月10日12時(shí)24分36秒(格林威治時(shí)間),那么startdate選項(xiàng)的參數(shù)就應(yīng)該為“030910122436Z”。證書生效時(shí)間除了可以在ca指令的startdate選項(xiàng)指定外,也可以在配置文件的CA主配置字段的default_startdate選項(xiàng)指定,其參數(shù)格式跟startdate選項(xiàng)參數(shù)格式一致。如果沒有設(shè)置startdate選項(xiàng),也沒有在配置文件中定義default_startdate選項(xiàng),那么證書生效時(shí)間就是簽發(fā)證書的時(shí)間
  • days選項(xiàng)設(shè)置證書的有效天數(shù)。所謂有效天數(shù),也就是從證書生效的時(shí)間到證書到期的時(shí)間之間的天數(shù)。
  • enddate選項(xiàng)的參數(shù)格式跟startdate選項(xiàng)一樣,用來(lái)設(shè)置證書的到期時(shí)間。同樣,你也可以通過(guò)配置文件CA主配置字段中的default_enddate選項(xiàng)設(shè)定證書到期時(shí)間。如果設(shè)置了enddate選項(xiàng),那么days選項(xiàng)將會(huì)被自動(dòng)忽略。如果沒有設(shè)置證書到期時(shí)間,那么就會(huì)根據(jù)days選項(xiàng)設(shè)置的有效時(shí)間來(lái)決定證書到期時(shí)間。如果指令中也沒有使用days選項(xiàng),那么指令就會(huì)從CA主配置字段讀取default_days選項(xiàng)的參數(shù)來(lái)決定證書有效期。

證書內(nèi)容選項(xiàng)subj,preserveDN,noemailDN,md和msie_hack

  • 一般情況下,簽發(fā)證書的時(shí)候,證書的主體名稱(subjectname,也稱為特征名稱)由證書請(qǐng)求中的主體名稱決定。不過(guò),有時(shí)候用戶自己填寫的資料可能并不能讓你這個(gè)挑剔的CA管理員滿意,那么你可以使用subj選項(xiàng)重新填寫用戶的證書主體名稱。
  • subj選項(xiàng)的參數(shù)格式應(yīng)該如下:

  • ?其中,“type*”必須是已經(jīng)由OpenSSL內(nèi)部定義或者在配置文件中定義了的數(shù)據(jù)對(duì)象。preserveDN選項(xiàng)使指令在簽發(fā)證書的時(shí)候讓證書主體名稱內(nèi)的各項(xiàng)內(nèi)容順序跟證書請(qǐng)求中的順序保持一致。
  • 而在默認(rèn)情況下,證書主體名稱內(nèi)的各個(gè)選項(xiàng)順序是按照配置文件中的證書匹配策略字段的選項(xiàng)順序進(jìn)行排列的。這個(gè)選項(xiàng)對(duì)于老版本的IE證書管理器是必要的,而現(xiàn)在則顯得很不必要了。
  • 一般來(lái)說(shuō),證書的主體名稱里面可以包含E-mail項(xiàng)目,但是,因?yàn)镋-mail可能是一個(gè)經(jīng)常變動(dòng)的項(xiàng)目,所以如果不把它放在證書主體名稱中而是放在主體別名中會(huì)更好一點(diǎn)。noemailDN選項(xiàng)可以幫你做到這一點(diǎn),當(dāng)證書請(qǐng)求中有E-mail這一項(xiàng),但是你不希望在證書主體名稱中出現(xiàn)E-mail時(shí),可以使用這個(gè)選項(xiàng)來(lái)去除。如果你還使用了證書主體別名,并使用了“email:move”或者“email:copy”策略,那么使用該選項(xiàng)后指令會(huì)自動(dòng)將證書請(qǐng)求中的E-mail項(xiàng)目移動(dòng)到證書主體別名中。
  • 缺少 md 和 msie_hack

CA證書和私鑰選項(xiàng)cert,keyfile,keyform,passin和key

  • 在簽發(fā)證書的時(shí)候,需要使用CA的證書和私鑰對(duì)用戶的證書請(qǐng)求進(jìn)行簽發(fā)證書操作。默認(rèn)情況下,證書和私鑰文件都是通過(guò)配置文件的CA主配置字段的certificate和private_key兩個(gè)選項(xiàng)決定的。
  • 不過(guò),OpenSSL的ca指令提供了cert和keyfile選項(xiàng)讓用戶能夠選擇另外的證書和私鑰文件作為簽發(fā)證書的CA證書和私鑰文件。或許你很難想像這種特殊的需要,為什么不使用預(yù)先設(shè)置好的證書和私鑰文件呢?但是,至少在測(cè)試的時(shí)候,我們需要這些靈活的選項(xiàng)。事實(shí)上,這些選項(xiàng)不僅僅可以用于測(cè)試,因?yàn)镃A的指令不僅僅用于簽發(fā)證書,還可以用于吊銷證書和發(fā)布CRL,某些時(shí)候,發(fā)布CRL的角色跟CA的角色可以是不同的,即需要使用不同的證書來(lái)完成證書簽發(fā)工作和生成CRL的工作,但是它們都使用同一個(gè)ca指令,所以這些選項(xiàng)就能派上用場(chǎng)了。cert選項(xiàng)的參數(shù)是一個(gè)可以包括路徑的文件名,文件里面是一個(gè)PEM編碼的X.509證書文件
  • keyfile選項(xiàng)的參數(shù)也是一個(gè)可以包括路徑的文件名,不過(guò),該文件里面可以包含的私鑰格式就比證書文件豐富多了。目前來(lái)說(shuō),支持的編碼格式包括PEM編碼格式、DER編碼格式、PKCS#12編碼格式、Netscape編碼格式、舊版本的IISSGC編碼格式及ENGINE格式。當(dāng)然,OpenSSL指令不能自動(dòng)識(shí)別這些格式,必須使用keyform選項(xiàng)指定某種具體的格式
  • pasin選項(xiàng)給定了讀取私鑰文件的時(shí)候需要提供的口令,當(dāng)然,跟我們所熟悉的一樣,提供口令的方式可以是多樣的,比如從指令直接輸入、從環(huán)境變量獲取或者從文件獲取,等等。
  • key選項(xiàng)是一個(gè)老選項(xiàng),其作用是直接從指令輸入一個(gè)口令,其功能可以被“-pasinpass:”選項(xiàng)所替代。

證書吊銷選項(xiàng)revoke,crl_reason,crl_hold,crl_compromise和crl_CA_compromise

  • revoke選項(xiàng)讓你能夠輕松地吊銷一個(gè)證書,其參數(shù)就是你需要吊銷的證書文件名,revoke選項(xiàng)吊銷的證書應(yīng)該是PEM編碼的X.509證書。
  • 當(dāng)然,僅僅這樣吊銷可能還滿足不了你的管理需求,某些情況下,你甚至希望告訴所有用戶為什么要吊銷這個(gè)證書以證明你是正確的。那么,使用crl_reason選項(xiàng)吧,crl_reason選項(xiàng)的參數(shù)是CRLv2版規(guī)定的一些吊銷理由
  • 如表所示。

  • 上述的吊銷參數(shù)對(duì)大小寫是不敏感的。如果在吊銷操作的時(shí)候使用了這些吊銷參數(shù),那么生成的CRL就是v2版本的,如果所有吊銷證書操作都沒有使用任何參數(shù),那么生成的CRL將是v1版本的。
  • 當(dāng)你希望使用certificateHold碼作為吊銷一個(gè)證書的理由時(shí),還可以使用凍結(jié)指示代碼擴(kuò)展,這可以通過(guò)使用crl_hold參數(shù)來(lái)添加
  • 目前,crl_hold支持的參數(shù)包括holdInstructionNone,holdInstructionCalIsuer和holdInstructionReject
  • crl_hold選項(xiàng)使用后,設(shè)置證書吊銷碼為certificateHold,并且用其參數(shù)設(shè)置凍結(jié)指示代碼擴(kuò)展項(xiàng)。
  • crl_compromise選項(xiàng)使用后,將證書吊銷原因設(shè)定為keyCompromise,其參數(shù)表示私鑰泄密的時(shí)間。它的參數(shù)是符合“YYYYMMDDHHMMSSZ”格式的時(shí)間。其中“YYYY”代表4位的年份,而其他位跟startdate選項(xiàng)的參數(shù)代表的意義一樣的。crl_CA_compromise選項(xiàng)使用后,將證書吊銷原因設(shè)定為CACompromise,其參數(shù)表示私鑰泄密的時(shí)間。它的參數(shù)格式跟crl_compromise格式一致。
  • 上述的crl_reason,crl_hold,crl_compromise和crl_CA_compromise只要同時(shí)使用一項(xiàng)即可,如果同時(shí)使用了多項(xiàng),那么在指令中最靠后的一個(gè)將是有效的,而前面的都視為無(wú)效

CRL生成選項(xiàng)gencrl,crldays,crlhours和crlexts

  • 執(zhí)行完證書吊銷操作后,證書庫(kù)中相應(yīng)的證書記錄會(huì)更新,但是,對(duì)于離線的應(yīng)用驗(yàn)證程序而言,還是沒有辦法知道被吊銷的證書的序列號(hào)。為了讓所有證書用戶及時(shí)得到吊銷證書的消息,CA必須及時(shí)生成和發(fā)布CRL
  • gencrl選項(xiàng)用于生成一個(gè)CRL,并將生成的CRL使用PEM編碼輸出到out選項(xiàng)指定的文件,如果沒有使用out選項(xiàng),則輸出到標(biāo)準(zhǔn)輸出設(shè)備。為了保證CRL能及時(shí)反映證書庫(kù)的更新信息,CRL也必須不斷定期或者不定期更新,最好的方法就是,當(dāng)發(fā)布一個(gè)CRL的時(shí)候,同時(shí)限定該CRL的有效期,那么到了有效期之后,用戶就必須下載新的CRL來(lái)使用。CRL更新的間隔時(shí)間可以根據(jù)需要選擇,如果是非常重要的證書應(yīng)用系統(tǒng),并且用戶數(shù)量比較大,那么單位時(shí)間內(nèi)執(zhí)行吊銷操作的可能性就大,這時(shí)候可以將CRL的更新時(shí)間設(shè)置得短一點(diǎn)。反之,如果系統(tǒng)用戶數(shù)量不多,證書應(yīng)用系統(tǒng)的安全性也不是要求特別高,那么更新時(shí)間可以設(shè)置得稍微長(zhǎng)一點(diǎn)。
  • crldays和crlhours選項(xiàng)跟gencrl選項(xiàng)一起使用以設(shè)置CRL的更新時(shí)間。默認(rèn)情況下,如果沒有使用crldays選項(xiàng)或者crlhours選項(xiàng),指令會(huì)從配置文件的CA主配置字段的default_crl_days或者default_crl_hours選項(xiàng)讀取默認(rèn)值。crldays以“天”為單位設(shè)置CRL的有效期,而crlhours則以小時(shí)為單位設(shè)置CRL有效期,這兩個(gè)選項(xiàng)可以一起使用,比如你要設(shè)置CRL的有效期為5天12個(gè)小時(shí),那么可以設(shè)置crldays的參數(shù)為5,而crlhours為12。crlexts指定了生成CRL的時(shí)候使用的擴(kuò)展項(xiàng)定義字段,其參數(shù)為字段名稱。CRL擴(kuò)展項(xiàng)字段是在OpenSSL配置文件中定義的。如果定義了CRL擴(kuò)展項(xiàng)字段,即便該字段是空的,生成的CRL也將是v2版本的。如果沒有提供CRL擴(kuò)展項(xiàng)字段,則將生成v1版的CRL。

證書管理選項(xiàng)status和updatedb

  • status選項(xiàng)用來(lái)查看證書庫(kù)中指定證書的狀態(tài),比如是否有效、吊銷或者過(guò)期等。該選項(xiàng)的參數(shù)是證書序列號(hào)。
  • updatedb選項(xiàng)用來(lái)更新文本數(shù)據(jù)庫(kù)的證書狀態(tài),它主要用來(lái)更新證書庫(kù)中已經(jīng)過(guò)期的證書的狀態(tài)信息。通常情況下,即便證書已經(jīng)過(guò)了有效期,如果不使用這個(gè)選項(xiàng),OpenSSL的ca指令也不會(huì)自動(dòng)更新證書庫(kù)中相應(yīng)證書條目的狀態(tài),所以需要使用這個(gè)選?項(xiàng)來(lái)自動(dòng)更新證書庫(kù)的狀態(tài)信息。

engine選項(xiàng)

  • engine選項(xiàng)告訴ca指令盡可能使用Engine設(shè)備提供的加密函數(shù)和算法替代OpenSSL本身的函數(shù)。對(duì)于ca指令來(lái)說(shuō),可能替代的算法包括:簽名時(shí)使用的信息摘要算法、簽名時(shí)使用的私鑰加密算法、驗(yàn)證證書請(qǐng)求中的數(shù)字簽名時(shí)使用的公鑰解密算法、隨機(jī)數(shù)函數(shù)及私鑰數(shù)據(jù)。
  • engine選項(xiàng)對(duì)于使用硬件加密設(shè)備中的私鑰作為CA的私鑰具有重要的意義,因?yàn)橛布械乃借€一般是不能導(dǎo)出的,從而能夠增加CA私鑰的安全性。當(dāng)然,這需要相應(yīng)Engine接口的支持。

notext,batch和verbose選項(xiàng)

  • 使用ca指令簽發(fā)完一個(gè)證書的時(shí)候,你是不是經(jīng)常發(fā)現(xiàn)大部分版本的Windows都不能正確解釋你的PEM編碼的證書文件?事實(shí)上這是因?yàn)镺penSSL的ca指令在簽發(fā)證書的時(shí)候,同時(shí)將證書的明文解析信息輸出到了保存編碼證書的文件前面,從而導(dǎo)致這些不怎么標(biāo)準(zhǔn)的Windows程序解碼失敗(WindowsServer2003已經(jīng)解決了這個(gè)問(wèn)題)。
  • 解決這個(gè)問(wèn)題很簡(jiǎn)單,在簽發(fā)證書的時(shí)候使用notext選項(xiàng),那么指令就不會(huì)輸出明文信息到證書文件。
  • 使用batch選項(xiàng)后ca指令以批處理方式工作,在這種方式下,ca指令不提示用戶輸入任何信息而直接簽發(fā)所有輸入的證書請(qǐng)求。
  • 使用verbose選項(xiàng)將會(huì)輸出更詳細(xì)的一些操作過(guò)程信息

例子

?在證書中添加擴(kuò)展項(xiàng)

  • 先前介紹了怎么在證書請(qǐng)求中增加自定義的擴(kuò)展項(xiàng)。但是,證書請(qǐng)求中增加了擴(kuò)展項(xiàng),并不等于簽發(fā)的證書就會(huì)自動(dòng)增加擴(kuò)展項(xiàng)。事實(shí)上,從嚴(yán)格意義上說(shuō),證書請(qǐng)求應(yīng)該是用戶生成的申請(qǐng)文件,也就是說(shuō),其所有內(nèi)容基本上都是代表了用戶的意愿,并不能由此推斷CA的策略。所以,為了使證書中能夠順利增加擴(kuò)展項(xiàng)信息,我們還需要在CA指令的配置文件上做一些工作。你可能已經(jīng)可以想像得到,我們的證書擴(kuò)展項(xiàng)工作同樣需要在OpenSSL的配置文件中完成。首先,請(qǐng)確認(rèn)你已經(jīng)在OpenSSL配置文件opensl.cnf中增加了擴(kuò)展項(xiàng)的OID,即以下信息:

  • 注意,如果證書請(qǐng)求指令(req)使用的配置文件跟證書簽發(fā)指令(ca)使用的配置文件不相同,必須確保上面的信息在兩個(gè)配置文件中都存在并且一致。
  • 下面,找到配置文件中的CA策略配置字段,如在openssl.cnf文件中是policy_match或者policy_anything字段,在其中增加新增擴(kuò)展項(xiàng):

?

  • 當(dāng)然,跟其他DN字段信息一樣,新增擴(kuò)展項(xiàng)的匹配策略也可以根據(jù)CA的需要調(diào)整為optional或者match等。
  • 完成上面的配置之后,保存配置文件,并使用該配置文件簽發(fā)證書,就可以生成增加了擴(kuò)展項(xiàng)的證書。當(dāng)然,上述配置方法使得擴(kuò)展項(xiàng)信息是增加在證書主體名稱中的。

簽發(fā)用戶證書

  • 先前介紹了怎么申請(qǐng)一個(gè)終端用戶證書,即怎么使用OpenSSL的req指令生成一個(gè)終端用戶證書請(qǐng)求。同樣,簽發(fā)什么類型的證書事實(shí)上是由CA決定的,也就是說(shuō),即便生成了一個(gè)有效的終端用戶證書請(qǐng)求,但是如果接受申請(qǐng)的CA不簽發(fā)終端用戶證書,或者,甚至因?yàn)殄e(cuò)誤配置導(dǎo)致簽發(fā)了CA證書,都是可能發(fā)生的。
  • 可以通過(guò)在OpenSSL配置文件中的X.509v3擴(kuò)展項(xiàng)字段告訴ca指令簽發(fā)用戶證書。ca指令在使用默認(rèn)的openssl.cnf作為配置文件的情況下,使用的X.509v3擴(kuò)展項(xiàng)字段是user_cert字段
  • 在openssl.cnf文件中找到該字段,確保basicConstraints選項(xiàng)的參數(shù)如下:?證明頒發(fā)的是終端證書

  • ?當(dāng)然,默認(rèn)情況下一般就是如此。使用該配置文件簽發(fā)的證書就是一個(gè)終端用戶證書。如果你使用的是自己定義的另外的X.509v3擴(kuò)展字段,那么也只需要保證上述的basicConstraints選項(xiàng)值為CA:FALSE,就可以成功簽發(fā)一個(gè)終端用戶證書了。使用自定義的字段的方法就是在ca指令中使用extensions選項(xiàng),當(dāng)然,也可以通過(guò)修改配置文件中CA主配置字段的x509_extensions選項(xiàng)的值來(lái)實(shí)現(xiàn)。事實(shí)上,當(dāng)OpenSSL的ca指令使用默認(rèn)的openssl.cnf作為配置文件的時(shí)候,其簽發(fā)的證書總是終端用戶證書

簽發(fā)下級(jí)CA證書

  • 如果你正在為一個(gè)大型的跨區(qū)域企業(yè)或者政府部門建立一個(gè)CA系統(tǒng),那么你可能需要建立一個(gè)多級(jí)的CA體系,這就涉及簽發(fā)下級(jí)CA證書的問(wèn)題。從技術(shù)上來(lái)說(shuō),一個(gè)CA證書和一個(gè)用戶證書并沒有本質(zhì)區(qū)別,它們的數(shù)據(jù)項(xiàng)是基本相同的,格式也是相同的,一個(gè)下級(jí)CA證書的合法性也是通過(guò)上級(jí)CA的數(shù)字簽名來(lái)保證和證明的。事實(shí)上,區(qū)別普通終端用戶證書和CA證書的唯一標(biāo)記就是X.509v3擴(kuò)展項(xiàng)字段中的選項(xiàng)basicConstraints。如果該選項(xiàng)值為CA:FALSE,則表示證書是普通的終端用戶證書;如果該選項(xiàng)值是CA:TRUE,則表示該證書是CA證書。
  • 在OpenSSL的默認(rèn)配置文件opensl.cnf文件中已經(jīng)存在一個(gè)簽發(fā)CA證書的X.509v3擴(kuò)展字段v3_ca。
  • 將該字段的basicConstraints設(shè)置為如下格式:

  • 當(dāng)然,你還可以使用自己定義的X.509v3擴(kuò)展項(xiàng)字段,其使用方法是相同的。
  • 通過(guò)上面這些介紹,你就可以使用OpenSSL的指令順利簽發(fā)一個(gè)下級(jí)CA證書,從而建立整個(gè)證書域的分級(jí)管理,對(duì)于大型的企業(yè)或者機(jī)構(gòu)來(lái)說(shuō),這非常方便?

例子 建立多級(jí)CA

  • ?在完成這些步驟的整個(gè)過(guò)程中,使用的OpenSSL指令只有req和ca兩個(gè),并且參數(shù)形式基本是相同的。此外,還需要配置OpenSSL的配置文件。

建立rootCA

  • 建立RootCA技術(shù)上抽象的任務(wù)有三部分:建立一個(gè)CA目錄結(jié)構(gòu)、生成一個(gè)自簽名根證書和修改配置文件。
  • 為了管理方便,我們選定RootCA的根目錄在C盤。首先,在C盤根目錄創(chuàng)建一個(gè)名為“RootCA”的目錄。從編譯好的OpenSSL目錄中復(fù)制“openssl.exe”程序,“opensl.cnf”和ca.pl文件到“C:\RootCA”目錄下。
  • 打開Windows的指令行界面,進(jìn)入到“C:\RootCA”目錄,執(zhí)行下面的指令:

  • 根據(jù)其提示步驟完成整個(gè)操作流程,就可以成功在C:\RootCA目錄下創(chuàng)建一個(gè)demoCA目錄。執(zhí)行ca.pl腳本指令的過(guò)程中,會(huì)提示產(chǎn)生自簽名的根證書,可以忽略。下面我們使用req指令來(lái)生成一個(gè)使用2048位密鑰的自簽名根證書作為RootCA的證書。
  • 首先執(zhí)行如下指令啟動(dòng)OpenSSL.exe程序進(jìn)入OpenSSL的運(yùn)行環(huán)境。?

  • ?然后,將文件rootca_cert.pem重命名為cacert.pem,復(fù)制到“C:\RootCA\demo.CA”目錄下取代原來(lái)的文件;將文件rootca_key.pem重命名為cakey.pem,復(fù)制到“C:\RootCA\demoCA\private”目錄下取代原來(lái)的同名文件。這就完成了RootCA證書和其相應(yīng)私鑰的設(shè)置。
  • 為了使RootCA能夠同時(shí)簽發(fā)普通用戶證書和下級(jí)CA證書,很多時(shí)候我們還需要對(duì)OpenSSL配置文件(C:\RootCA\opensl.cnf)進(jìn)行一些配置,但是,由于OpenSSL默認(rèn)的配置文件本身已經(jīng)具有了兩個(gè)不同的X.509v3擴(kuò)展字段用于簽發(fā)用戶證書(usr_cert)和簽發(fā)CA證書(v3_ca),所以在這里不需要再做更多的配置。當(dāng)然,在實(shí)際的應(yīng)用中,可能還需要對(duì)其他一些擴(kuò)展項(xiàng)和匹配策略等配置信息進(jìn)行修改。到此為止,我們已經(jīng)成功建立了一個(gè)RootCA,是不是很簡(jiǎn)單?

建立SubCA

  • SubCA是RootCA的下級(jí)CA,它的證書的合法性需要由RootCA簽名來(lái)證明。建立一個(gè)SubCA的簡(jiǎn)要步驟如下

  • SubCA跟RootCA是兩個(gè)不同的CA,在實(shí)際情況下,它們一般不在同一個(gè)計(jì)算機(jī)內(nèi)運(yùn)行,但是,大家都應(yīng)該明白,這里只是一個(gè)演示操作,所以我們選定在C盤根目錄下建立一個(gè)名為“SubCA”的目錄作為SubCA的主目錄。然后,跟建立RootCA一樣,從編譯好的OpenSSL目錄中復(fù)制“opensl.exe”、“opensl.cnf”和ca.pl文件到C:\SubCA目錄下。
  • 打開Windows的指令行界面,進(jìn)入到C:\SubCA目錄,執(zhí)行下面的指令:?

  • 根據(jù)其提示步驟完成整個(gè)操作流程,就可以成功在“C:\SubCA”目錄下創(chuàng)建一個(gè)demoCA目錄。這樣,SubCA的目錄結(jié)構(gòu)就建好了,但是SubCA還沒有合法的經(jīng)過(guò)RootCA簽名的證書和相應(yīng)的密鑰,緊接下面的步驟就是完成這個(gè)任務(wù)。SubCA的證書跟普通證書是基本相同的,除了其X.509v3擴(kuò)展項(xiàng)的某些選項(xiàng)的限制有一些區(qū)別。首先,為了向RootCA申請(qǐng)一個(gè)CA證書,需要生成一個(gè)密鑰對(duì)和證書請(qǐng)求。因?yàn)橐暾?qǐng)的是一個(gè)CA證書,所以證書請(qǐng)求的X.509v3擴(kuò)展項(xiàng)跟普通證書請(qǐng)求有區(qū)別,我們通過(guò)修改OpenSSL的配置文件來(lái)達(dá)到這一目的。
  • 用文本編輯器打開C:\SubCA\openssl.cnf文件,修改其中v3_req字段的basicConstraints選項(xiàng)為下面的值:?

?

  • 這個(gè)指令生成了一個(gè)2048位的密鑰對(duì)作為SubCA的密鑰,并同時(shí)生成了一個(gè)相應(yīng)的證書請(qǐng)求。私鑰保存在文件subca_key.pem中,而證書請(qǐng)求保存在subca_req.pem中。為了獲得合法的CA證書,需要將證書請(qǐng)求提交給RootCA簽發(fā),提交的途徑是多樣的,可以通過(guò)網(wǎng)絡(luò)連接提交,也可以通過(guò)遠(yuǎn)程數(shù)據(jù)庫(kù)提交,而在這里,我們只需要將subca_req.pem文件復(fù)制到C:\RootCA目錄下就可以了。?

  • 上述的操作只是簡(jiǎn)單地使用新簽發(fā)的證書和其相應(yīng)私鑰替換原來(lái)demoCA目錄下的證書文件和私鑰文件,從而完成SubCA證書和私鑰的設(shè)置。SubCA并沒有下級(jí)的CA,所以在OpenSSL配置文件中只要設(shè)定一個(gè)簽發(fā)普通用戶證書的X.509v3擴(kuò)展字段即可。幸好,OpenSSL默認(rèn)的配置文件已經(jīng)設(shè)置好,我們不需要費(fèi)神再去配置它。RootCA和SubCA都已經(jīng)配置好了,現(xiàn)在可以簽發(fā)用戶證書了。?

簽發(fā)用戶證書A

  • 結(jié)構(gòu)顯示,用戶證書A是RootCA簽發(fā)的普通用戶證書,所以我們首先在指令行界面下到C:\RootCA目錄下,啟動(dòng)openssl.exe程序。生成一個(gè)用戶證書事實(shí)上包含三個(gè)部分:生成密鑰對(duì)、生成證書請(qǐng)求及簽發(fā)證書。在這里,我們使用req指令完成第一和第二個(gè)部分,使用ca指令完成第三部分。
  • 普通用戶證書的密鑰對(duì)一般使用1024位密鑰就可以了,可使用下面的指令生成密鑰對(duì)和證書請(qǐng)求:

  • ?根據(jù)配置文件“C:\RootCA\opensl.cnf”的配置,ca指令默認(rèn)X.509v3擴(kuò)展項(xiàng)使用的是用于簽發(fā)普通用戶證書的usr_cert字段,所以我們執(zhí)行下面的ca指令即可簽發(fā)用戶證書A:

  • 執(zhí)行完上述指令后,用戶A就擁有了一個(gè)合法的RootCA簽發(fā)的證書A和相應(yīng)的私鑰,分別保存在C:\RootCA\userA_cert.pem和C:\RootCA\userA_key.pem文件中。?

簽發(fā)用戶證書B

  • 用戶證書B的申請(qǐng)和簽發(fā)跟用戶證書A的申請(qǐng)和簽發(fā)基本相同,只是,因?yàn)橛脩糇C書B是SubCA簽發(fā)的證書,所以應(yīng)該在指令行界面下進(jìn)入“C:\SubCA”目錄并啟動(dòng)opensl.exe程序。然后,執(zhí)行下面的兩條指令完成用戶證書B的申請(qǐng)和簽發(fā):

  • 執(zhí)行完上述兩條指令,用戶B就擁有了一個(gè)合法的SubCA簽發(fā)的證書B和相應(yīng)的私鑰,分別保存在C:\SubCA\userB_cert.pem和C:\SubCA\userB_key.pem文件中。到此為止,就完成了上述CA目錄結(jié)構(gòu)的構(gòu)造任務(wù)。整個(gè)過(guò)程使用的指令非常簡(jiǎn)單,只有req和ca兩個(gè)。

證書使用

X.509證書

x509指令功能概述和格式

  • x509指令是一個(gè)功能強(qiáng)大的指令,甚至超出了其名稱所涉及的范圍,它既可以以各種方式顯示一個(gè)證書的內(nèi)容,也可以對(duì)一個(gè)證書的格式進(jìn)行各種有趣的轉(zhuǎn)換,甚至可以簽發(fā)證書等
  • 下面是x509指令的格式和選項(xiàng):

輸入和輸出格式選項(xiàng)inform,outform,keyform,CAform和CAkeyform

  • ?inform選項(xiàng)指定了in選項(xiàng)所指定的輸入文件的格式,輸入的文件可能是證書,也可能是證書請(qǐng)求文件(當(dāng)使用了req選項(xiàng)的時(shí)候)。無(wú)論哪種文件,該選項(xiàng)可以接受的格式包括PEM、DER編碼和老式的Netscape的編碼格式。
  • CAform跟inform參數(shù)的意義相類似,不過(guò)它指定的是CA選項(xiàng)所指定的輸入文件的格式。
  • outform則指定了out選項(xiàng)輸出的文件格式,但是,并非所有的內(nèi)容都會(huì)受到這個(gè)選項(xiàng)的影響,僅輸出文件是證書或者證書請(qǐng)求文件的時(shí)候會(huì)受到該選項(xiàng)的影響。目前,支持的格式同樣包括PEM、DER和NET格式。
  • keyform選項(xiàng)指定了signkey選項(xiàng)指定的輸入私鑰文件的格式,支持PEM、DER和ENGINE三種格式,其中ENGINE是指通過(guò)第三方驅(qū)動(dòng)設(shè)備提供的私鑰。
  • CAkeyform的參數(shù)意義跟keyform相同,不過(guò),它相關(guān)的文件是選項(xiàng)Cakey所指定的文件

輸入和輸出選項(xiàng)in,out,CA和CAkey

  • in選項(xiàng)指定了輸入的證書文件的路徑,如果使用了req選項(xiàng),則輸入文件將被視為是一個(gè)證書請(qǐng)求文件而不是證書文件。
  • 文件的編碼格式由inform參數(shù)決定。默認(rèn)情況下輸入是標(biāo)準(zhǔn)輸入設(shè)備。
  • out選項(xiàng)指定了接受輸出的文件的路徑,默認(rèn)情況下,輸出目標(biāo)是標(biāo)準(zhǔn)輸出設(shè)備。如果輸出的是證書或者證書請(qǐng)求,則其輸出格式由outform參數(shù)決定。
  • CA選項(xiàng)指定了在簽發(fā)證書或者轉(zhuǎn)換證書格式的時(shí)候需要的CA證書文件路徑。其格式由CAform參數(shù)指定。
  • CAkey選項(xiàng)則指定了簽發(fā)證書或者轉(zhuǎn)換證書格式的時(shí)候需要使用的CA證書相對(duì)應(yīng)的私鑰文件路徑,如果使用的私鑰是Engine提供的,則是一個(gè)Engine的索引文件,如公鑰文件等,根據(jù)具體的Engine私鑰索引方法具體決定。普通的私鑰文件格式由CAkeyform參數(shù)決定。

輸入口令選項(xiàng)passin

  • passin參數(shù)給出了當(dāng)使用signkey輸入私鑰文件時(shí)需要提供的口令字符串。在使用CA證書的私鑰簽發(fā)證書的時(shí)候,則給出的是使用CAkey選項(xiàng)輸入私鑰文件時(shí)需要提供的口令字符串。一般來(lái)說(shuō),signkey選項(xiàng)與CAkey選項(xiàng)是不會(huì)同時(shí)出現(xiàn)的。輸入口令的方式可以是多樣的。如果沒有使用該選項(xiàng),而指定的私鑰又要求提供解密口令,那么指令會(huì)在指令行提示用戶輸入口令。

輸出顯示內(nèi)容選項(xiàng)serial,hash,subject,isuer,email,purpose,modulus,fingerprint,ocspid,startdate,enddate,dates,pubkey,C和nout

輸出證書更加靈活的內(nèi)容的選項(xiàng)text和certopt

  • 使用text選項(xiàng),就可以看到證書的內(nèi)容
  • certopt選項(xiàng)可以幫助選擇所需要的東西。certopt選項(xiàng)一般只有出現(xiàn)text選項(xiàng)的時(shí)候才使用,它的參數(shù)值很多,可以同時(shí)提供一個(gè)或者多個(gè),如果是多個(gè),它們之間要使用分號(hào)分開。certopt選項(xiàng)還可以在指令中多次使用,這可以讓你更隨意地更改你的想法。certopt的參數(shù)具體意義詳見表10.3,但參數(shù)no_attributes在certopt選項(xiàng)中是無(wú)效的。?

證書信任設(shè)置選項(xiàng)trustout,addtrust,clrtrust,addreject,clreject,setalias和alias

  • 這些選項(xiàng)都是對(duì)可信證書擴(kuò)展字段進(jìn)行設(shè)置的選項(xiàng)。事實(shí)上,所謂的可信證書就是普通的證書加上一些擴(kuò)展字段,這些字段定義了該證書可以用來(lái)做什么和不能用來(lái)做什么,并定義了證書的別名。
  • 一般來(lái)說(shuō),在進(jìn)行證書驗(yàn)證的過(guò)程中,證書鏈中至少有一個(gè)證書應(yīng)該是“可信證書”,否則就不能完成驗(yàn)證過(guò)程。默認(rèn)情況下,必須在本地保存一個(gè)可信證書,并且該可信證書應(yīng)該是一個(gè)根CA證書,這種情況下,任何一個(gè)結(jié)束于該可信根CA的證書鏈上的證書可以用于指定用途。事實(shí)上,現(xiàn)在OpenSSL并沒有要求那么嚴(yán)格,如果一個(gè)根證書沒有可信選項(xiàng),那么它就默認(rèn)該證書是一個(gè)可以用于任何用途的可信證書。
  • 目前OpenSSL的版本僅在根CA上支持可信選項(xiàng)設(shè)置,從而實(shí)現(xiàn)在最終的CA上統(tǒng)一控制證書的用途,比如允許CA頒發(fā)的證書用于SSL客戶端驗(yàn)證或者SSL服務(wù)器驗(yàn)證等。當(dāng)然,OpenSSL的開發(fā)組承諾在以后的版本中將支持在所有證書中設(shè)置可信選項(xiàng),而不僅僅限于根證書。下面回到x509指令的顯示世界中來(lái),讓我們看看這些選項(xiàng)的具體含義和用法。
  • trustout選項(xiàng)是最容易明白的一個(gè)選項(xiàng)了,它會(huì)在輸出的證書中加上可信的標(biāo)記,從而使其成為一個(gè)可信證書。x509指令可以接受的輸入包括可信證書和普通的X.509證書,但是,如果沒有trustout選項(xiàng),默認(rèn)情況下輸出的證書都會(huì)把可信選項(xiàng)去掉,成為普通的X.509證書。當(dāng)然,如果你通過(guò)其他選項(xiàng)設(shè)置或者修改了證書的可信選項(xiàng)字段,那么會(huì)自動(dòng)輸出一個(gè)可信證書。
  • 設(shè)置證書的信任選項(xiàng)在OpenSSL的指令中顯得很簡(jiǎn)單,使用addtrust選項(xiàng)就可以設(shè)置可信證書的用途,你可以在這里使用任何有效的參數(shù),但是目前真正使用的參數(shù)僅僅包括clientAuth,serverAuth和emailProtection。其中,clientAuth參數(shù)表示用于SSL客戶端驗(yàn)證,serverAuth參數(shù)表示用于SSL服務(wù)器驗(yàn)證,而emailProtection參數(shù)則用于S/MIME郵件的保護(hù)。
  • 相反,clrtrust則將清除證書中所有可信選項(xiàng)的用途設(shè)置
  • 相反,如果你想禁止證書用于某種用途,那么可以使用addreject選項(xiàng),該選項(xiàng)的參數(shù)內(nèi)容和addtrust相同。
  • 使用clrreject則可以清除所有設(shè)置好的禁止用途選項(xiàng)。我們猜你不會(huì)喜歡用一個(gè)證書的序列號(hào)來(lái)記憶或者標(biāo)識(shí)一個(gè)證書,雖然實(shí)際的計(jì)算機(jī)系統(tǒng)是如此的,但畢竟人跟計(jì)算機(jī)還存在一些區(qū)別。
  • 那么我們的證書設(shè)計(jì)者充分利用了以人為本的設(shè)計(jì)理念,提供了一種定義證書的名稱的方法,即證書的別名,setalias選項(xiàng)就是為了讓你擁有這種自由。證書別名通常是一個(gè)好記的字符串,比如“OpenSSL‘sCertificate”,等等,看著比“0x00cd0e”愉快多了是不是?
  • alias則事實(shí)上只是一個(gè)輸出選項(xiàng),使用該選項(xiàng),輸出的內(nèi)容中就會(huì)包括證書的別名了。

證書簽發(fā)轉(zhuǎn)換選項(xiàng)signkey,clrext,req,x509toreq,days,set_serial,CAserial,CAcreateserial,extfile和extensions

  • 首先來(lái)看看signkey選項(xiàng),這個(gè)選項(xiàng)指定了輸入的保存私鑰的文件路徑。這個(gè)選項(xiàng)使用后,會(huì)將輸入的證書文件或者證書請(qǐng)求文件轉(zhuǎn)換成一個(gè)自簽名的證書。如果輸入的是證書文件,那么x509指令會(huì)執(zhí)行下面的操作:
    • 1 使用證書所有者名稱替代證書簽發(fā)者名稱;
    • 2 更改證書有效期,其中生效期從當(dāng)前時(shí)間開始,結(jié)束日期取決于days選項(xiàng),而其他擴(kuò)展項(xiàng)和內(nèi)容都會(huì)保留,如果你想清除這些過(guò)時(shí)的擴(kuò)展項(xiàng),那么就需要使用clrext選項(xiàng);
    • 3 使用signkey提供的私鑰重新簽發(fā)證書。
  • 但是如果在使用signkey的時(shí)候同時(shí)使用了x509toreq選項(xiàng),過(guò)程則與上面不一樣,signkey提供的私鑰將會(huì)被用來(lái)對(duì)生成的證書請(qǐng)求進(jìn)行簽名。如果輸入的是證書請(qǐng)求文件,事情就很簡(jiǎn)單,簽發(fā)一個(gè)自簽名證書即可,簽發(fā)者名稱當(dāng)然跟證書持有人名稱一致。
  • 通過(guò)上面signkey的介紹,clrext選項(xiàng)的功能大家已經(jīng)有所了解,事實(shí)上clrext選項(xiàng)僅當(dāng)x509指令通過(guò)一個(gè)證書創(chuàng)建另一個(gè)證書的時(shí)候有意義。也就是說(shuō),僅當(dāng)輸入是證書,并且使用signkey或者CA選項(xiàng)創(chuàng)建一個(gè)新的證書的時(shí)候,clrext選項(xiàng)會(huì)將原來(lái)證書中的擴(kuò)展項(xiàng)全部清除,否則,默認(rèn)情況下所有擴(kuò)展項(xiàng)都會(huì)被保留下來(lái)形成新證書的一部分
  • 一般情況下,x509指令會(huì)認(rèn)為輸入選項(xiàng)in輸入的是一個(gè)證書,如果你想輸入的是一個(gè)證書請(qǐng)求,那么使用req選項(xiàng)就是通知x509指令的唯一途徑。有些情況下,一些特殊需要總是會(huì)出現(xiàn)的,比如將一個(gè)證書轉(zhuǎn)換成證書請(qǐng)求,這時(shí)候x509toreq選項(xiàng)就能幫助你達(dá)到這個(gè)目的。這功能看起來(lái)或許有些奇怪,但是在證書到期續(xù)簽的時(shí)候可能就有些用處了。使用這個(gè)選項(xiàng)的時(shí)候,需要使用signkey選項(xiàng)提供相應(yīng)的私鑰在生產(chǎn)證書請(qǐng)求的時(shí)候進(jìn)行數(shù)字簽名。
  • 簽發(fā)證書的時(shí)候需要指定有效期,days選項(xiàng)就定義了有效期的長(zhǎng)短,默認(rèn)情況下,x509指令證書簽發(fā)的有效期是30天。我們知道證書都有一個(gè)序列號(hào),這個(gè)序列號(hào)就像你的身份證號(hào)碼一樣獨(dú)特而重要,ca指令是通過(guò)文本數(shù)據(jù)庫(kù)中的serial文件來(lái)保存確定的。而在x509指令中,則可以有多種方法確定一個(gè)將要生成的證書的序列號(hào)。首先最直接的是可以使用set_serial選項(xiàng)來(lái)直接指定序列號(hào),該方法優(yōu)先級(jí)是最高的,如果使用了該方法,后面的兩種方法即便在指令中使用了也會(huì)被忽略。
  • 其次是可以使用CAserial選項(xiàng)指定序列號(hào)文件來(lái)提供序列號(hào),事實(shí)上,所謂序列號(hào)文件事實(shí)上是一個(gè)僅包含一個(gè)十六進(jìn)制正整數(shù)的文件。使用CAserial選項(xiàng)后,指令會(huì)自動(dòng)將該序列號(hào)文件中的整數(shù)加1并保存回文件,默認(rèn)情況下,x509指令的序列號(hào)文件名稱為證書文件名稱加上.srl后綴,比如輸出的證書文件名為certpem,那么指令會(huì)試圖從文件cert.srl中獲取序列號(hào)。最后,如果你這個(gè)文件也沒有(其實(shí)你真的可以自己用文本編輯器編一個(gè)),就使用CAcreateserial選項(xiàng)生成一個(gè)證書序列號(hào)文件,該序列號(hào)文件保存的是2,而所簽發(fā)的證書序列號(hào)是1,這時(shí)候你可以打開這個(gè)序列號(hào)文件好好研究一下了。
  • 有時(shí)候在證書中需要加入擴(kuò)展項(xiàng),這時(shí)候可以使用extfile選項(xiàng)extfile選項(xiàng)指定的是一個(gè)擴(kuò)展項(xiàng)配置文件。指定擴(kuò)展項(xiàng)定義文件之后,
  • 可能還需要使用extensions指定使用的擴(kuò)展字段,因?yàn)橐粋€(gè)擴(kuò)展項(xiàng)配置文件中可能存在多個(gè)擴(kuò)展字段,如果不使用該選項(xiàng),那么需要加入的擴(kuò)展項(xiàng)應(yīng)該定義在文件的默認(rèn)字段(未命名字段)或者默認(rèn)字段中應(yīng)該包含一個(gè)名為extensions的變量來(lái)指明擴(kuò)展項(xiàng)所在的字段。

證書顯示名稱格式選項(xiàng)nameopt

  • 利用nameopt的參數(shù),完全可以顯示所有人和簽發(fā)者的中文信息,包括名稱、單位和城市,等等。首先,我們需要一個(gè)能夠輸入中文的控制臺(tái)終端,比如普通的中文Windows指令行界面。在該控制臺(tái)可以按照正常的req指令生成一個(gè)證書,其用戶信息用中文填寫完成,從而得到一個(gè)中文的證書。如果你直接使用下面的指令,

驗(yàn)證證書是否過(guò)期

  • 選項(xiàng)checkend這個(gè)選項(xiàng)非常簡(jiǎn)單實(shí)用,目的就是驗(yàn)證輸入的證書是否在有效期內(nèi)。如果本選項(xiàng)返回0,說(shuō)明輸入的證書沒有過(guò)期,如果返回是1,則說(shuō)明證書過(guò)期了

信息摘要算法選擇選項(xiàng)md5,md2,sha1和mdc2

  • 對(duì)于這些名詞,大家應(yīng)該已經(jīng)非常熟悉了,它們是進(jìn)行信息摘要時(shí)可能用到的四種算法,在前面章節(jié)有對(duì)于這幾種算法的詳細(xì)介紹。信息摘要算法在證書中主要是用于CA頒發(fā)證書簽名的時(shí)候,具體到x509指令來(lái)說(shuō),如果信息摘要算法變化了,對(duì)于前面介紹的-fingerprint,-signkey和-CA等證書信息的輸入輸出選項(xiàng)的結(jié)果都會(huì)有影響。在x509指令里,如果沒有特別指定,默認(rèn)使用的是MD5算法。由于DSA算法固定使用SHA1算法作為數(shù)字簽名的信息摘要算法,所以如果你使用DSA密鑰進(jìn)行數(shù)字簽名,則SHA1的使用將是固定不變的,這些選項(xiàng)也就沒有任何使用的必要。

engine選項(xiàng)

  • engine選項(xiàng)告訴x509指令盡可能使用Engine設(shè)備提供的加密函數(shù)和算法替代OpenSSL本身的函數(shù)。對(duì)于x509指令來(lái)說(shuō),可能替代的算法包括:簽名時(shí)使用的信息摘要算法、簽名時(shí)使用的私鑰加密算法、驗(yàn)證證書請(qǐng)求中的數(shù)字簽名時(shí)使用的公鑰解密算法、隨機(jī)數(shù)函數(shù)及私鑰數(shù)據(jù)等。?

例子

  • 查看一個(gè)證書的內(nèi)容

CRL

  • 當(dāng)證書被CA吊銷時(shí),它將被添加到該CA的證書吊銷名單中,CA中心必須定期發(fā)布更新吊銷列表(CRL),以保證所有CA相關(guān)的應(yīng)用都能及時(shí)得知證書的有效性信息。所謂CRL,事實(shí)上就是一系列已經(jīng)被吊銷的證書序列號(hào)組成的文件,并且為了確保該文件的真實(shí)性,該文件經(jīng)過(guò)了CA的合法簽名。一般來(lái)說(shuō),CRL都具備有效期限制,其有效期由CA決定,可能是一天、一周或者一個(gè)月等,當(dāng)然,有效期越長(zhǎng),其跟實(shí)際情況相差的可能性越大。
  • CRL的頒發(fā)和公布都是由CA定期進(jìn)行的,發(fā)布的方式是多種多樣的,可以是在網(wǎng)上發(fā)布或者通過(guò)E-mail發(fā)布,無(wú)關(guān)緊要。CRL的使用者是所有使用該CA簽發(fā)證書的系統(tǒng)和用戶,他們需要隨時(shí)獲取最新的CRL,并在進(jìn)行證書驗(yàn)證的時(shí)候查看該CRL,確定接收到的證書不在該CRL列表內(nèi)(如果在該列表內(nèi),則證書就是無(wú)效的了)。

crl指令功能概述和格式

  • OpenSSL提供了crl指令用于顯示、處理和驗(yàn)證CRL文件信息,而發(fā)布CRL文件則在前面介紹的CA指令中可以實(shí)現(xiàn)。
  • 下面是crl指令的格式和選項(xiàng):?

輸入和輸出格式選項(xiàng)inform和outform

  • inform和outform選項(xiàng)指定了輸入和輸出文件格式,相對(duì)應(yīng)于in和out選項(xiàng),可以接受的格式包括PEM和DER編碼格式,默認(rèn)接受的格式是PEM。

輸入和輸出選項(xiàng)in和out

  • in選項(xiàng)指定了輸入的CRL文件的路徑,文件的編碼格式由inform參數(shù)決定。默認(rèn)情況下輸入的是標(biāo)準(zhǔn)輸入設(shè)備。
  • out選項(xiàng)指定了接受輸出的文件的路徑,默認(rèn)情況下,輸出目標(biāo)是標(biāo)準(zhǔn)輸出設(shè)備。其輸出格式由outform參數(shù)決定。

輸出顯示內(nèi)容選項(xiàng)hash,issuer,noout,text,lastupdate,nextupdate和date?

  • hash選項(xiàng)顯示CRL文件中CA簽名的HASH值。
  • isuer選項(xiàng)顯示CRL文件簽發(fā)者信息,一般來(lái)說(shuō),就是CA的信息。
  • noout選項(xiàng)要求指令不輸出編碼CRL的內(nèi)容。
  • text選項(xiàng)要求指令輸出CRL文件的可理解的形式,也就是說(shuō),能夠讓你一看就懂的形式。
  • lastupdate和nextupdate選項(xiàng)分別顯示CRL文件的最近更新時(shí)間和下次更新時(shí)間,
  • 而使用date選項(xiàng)則同時(shí)顯示上述兩種時(shí)間。事實(shí)上,所謂下次更新時(shí)間,也就是本CRL文件失效的時(shí)間。

輸出字符編碼選項(xiàng)nameopt

  • nameopt選項(xiàng)指定了如何顯示主體名稱和簽發(fā)者名稱,主要用于顯示名稱中不同編碼的內(nèi)容。沒有使用該選項(xiàng)時(shí),默認(rèn)使用的是“oneline”參數(shù)。該選項(xiàng)可以同時(shí)使用多個(gè)參數(shù),每個(gè)參數(shù)間使用“,”分開即可。具體的參數(shù)可以參照表10.4。

CA文件和目錄選項(xiàng)CAfile和CApath

  • CAfile指定一個(gè)CA證書文件,該CA證書用于核實(shí)CRL中的簽名是否正確和有效。
  • CApath則告訴指令從一個(gè)目錄中查找有效的CA證書,此目錄必須是標(biāo)準(zhǔn)證書目錄,所謂標(biāo)準(zhǔn)目錄,即OpenSSL要求的基于文件HASH值為文件名排序的一個(gè)目錄,詳見x509指令的介紹。

簡(jiǎn)單的例子

  • 把CRL文件的格式從PEM轉(zhuǎn)化成DER:

?PKCS#12證書

  • 事實(shí)上,除了Microsoft的產(chǎn)品,Netscape的瀏覽器也需要PKCS#12格式證書的支持。基于此,OpenSSL除了在一般的指令中對(duì)PKCS#12證書提供支持,還開發(fā)了專門用于處理PKCS#12證書的指令pkcs12,用于PCKS#12證書的生成、解釋和驗(yàn)證等。

pkcs12指令功能概述和格式

  • pkcs12指令功能總體來(lái)說(shuō)可以分成創(chuàng)建PKCS#12證書和解釋PKCS#12證書。
  • 創(chuàng)建PKCS#12證書即將普通的X.509證書和私鑰封裝成PKCS#12證書;
  • 解釋證書可以將PKCS#12證書轉(zhuǎn)換成X.509證書,并提取出相應(yīng)的私鑰,并可以輸出其他必要的信息。
  • 一般來(lái)說(shuō),PKCS#12證書的私鑰是經(jīng)過(guò)加密的,密鑰由用戶提供的口令產(chǎn)生。所以,在使用pkcs12指令編碼或者解碼PKCS#12證書的時(shí)候,一般都會(huì)要求用戶輸入密鑰口令。
  • 下面是pkcs12指令的格式和選項(xiàng):

  • 需要把PKCS#12證書轉(zhuǎn)化成X.509證書時(shí),僅僅用-in和-out選項(xiàng)就可以完成了。如果你想把X.509證書和其私鑰封裝成PKCS#12證書,再增加-export一個(gè)選項(xiàng)即可輕松完成。
  • 當(dāng)然,如果你需要更加具體復(fù)雜的要求,你需要了解的指令選項(xiàng)也會(huì)多一些。?

輸入和輸出文件選項(xiàng)in和out

  • 默認(rèn)情況下,輸入和輸出指定的都是標(biāo)準(zhǔn)輸入輸出設(shè)備。
  • 在解釋PKCS#12證書的時(shí)候,即沒有使用-export選項(xiàng)的時(shí)候,
  • in選項(xiàng)的參數(shù)默認(rèn)情況下是一個(gè)PKCS#12格式的文件,它將被解釋為單獨(dú)的證書和私鑰,并總是以PEM格式寫入到out選項(xiàng)指定的輸出文件中。
  • 在創(chuàng)建PKCS#12證書的時(shí)候,out選項(xiàng)參數(shù)輸出的是一個(gè)PKCS#12格式的證書文件。in選項(xiàng)輸入的文件是包含一系列證書和私鑰的文件。這些證書和私鑰必須是PEM編碼的,它們?cè)谠撐募械捻樞虿皇芟拗?#xff0c;但要求至少有一個(gè)私鑰和其相對(duì)應(yīng)的證書存在。如果存在其他附加的證書,則這些證書都會(huì)被封裝到輸出的PKCS#12證書文件中。

輸入和輸出口令選項(xiàng)passin,passout,password

  • pasin選項(xiàng)指定了使用輸入文件的時(shí)候需要的口令源。如果是解釋PKCS#12證書,則是該證書文件解密口令源;如果是創(chuàng)建PKCS#12證書,則是讀取私鑰文件時(shí)候可能需要的口令源。
  • pasout選項(xiàng)則指定了輸出文件時(shí)進(jìn)行加密的口令源。如果是解釋PKCS#12證書,則是輸出私鑰加密口令源;如果是創(chuàng)建PKCS#12證書,則是加密PKCS#12證書文件時(shí)可能需要的口令源。
  • password選項(xiàng)提供的總是PKCS#12證書的加密口令源,即在解釋PKCS#12證書時(shí),其參數(shù)為讀取PKCS#12證書需要的口令源;在創(chuàng)建PKCS#12證書的時(shí)候,其參數(shù)為加密PKCS#12證書需要的口令源。
  • 口令源的形式多種多樣,可以是直接輸入,也可以是從文件、環(huán)境變量、標(biāo)準(zhǔn)輸入輸出等獲取

輸出內(nèi)容選項(xiàng)noout,clcerts,cacerts,nocerts,nokeys和info

  • 這些選項(xiàng)都是在解釋PKCS#12證書時(shí)使用的
  • noout選項(xiàng)告訴指令不要輸出任何私鑰和證書信息到輸出文件中。
  • clcerts選項(xiàng)告訴指令只輸出客戶證書(不是CA證書)到輸出文件中。
  • cacerts選項(xiàng)告訴指令只輸出CA證書到輸出文件中。
  • nocerts選項(xiàng)告訴指令不要輸出任何證書到輸出文件中。
  • nokeys選項(xiàng)告訴指令不要輸出私鑰到輸出文件中。
  • info選項(xiàng)告訴指令輸出一些其他PKCS#12證書文件相關(guān)的信息,如構(gòu)成、算法及其迭代次數(shù)等。

加密算法選項(xiàng)des,des3,idea,aes128,aes192,aes256和nodes

  • 這些選項(xiàng)僅在解釋PKCS#12證書的時(shí)候使用。
  • des,des3,idea,aes128,aes192和aes256選項(xiàng)用于指定在輸出私鑰時(shí),對(duì)私鑰進(jìn)行加密使用的算法。默認(rèn)情況下,pkcs12指令會(huì)使用des3作為加密算法。
  • nodes選項(xiàng)則告訴指令對(duì)私鑰不進(jìn)行加密處理。

nomacver和twopass

  • 這兩個(gè)選項(xiàng)使用較少,也僅在解釋PKCS#12證書的時(shí)候使用。
  • nomacver選項(xiàng)告訴指令在讀取PKCS#12證書之前,不需要對(duì)文件進(jìn)行MAC的完整性驗(yàn)證。
  • twopass選項(xiàng)告訴指令提示輸入完整性驗(yàn)證和加密需要的密碼源。
  • 大多數(shù)PKCS#12軟件實(shí)現(xiàn)都假設(shè)這兩個(gè)密碼是一樣的,不需要使用這個(gè)選項(xiàng)。

創(chuàng)建PKCS#12證書選項(xiàng)export

  • 該選項(xiàng)在創(chuàng)建PKCS#12證書的時(shí)候必須使用,告訴指令這時(shí)候需要?jiǎng)?chuàng)建一個(gè)PKCS#12證書,而不再是解釋一個(gè)已有的PKCS#12證書。

證書內(nèi)容輸入選項(xiàng)inkey和certfile

  • 這兩個(gè)選項(xiàng)在創(chuàng)建PKCS#12證書的時(shí)候使用。
  • inkey選項(xiàng)指定一個(gè)包含了私鑰的文件,指令將從這個(gè)文件中讀取創(chuàng)建PKCS#12證書需要的私鑰。如果該選項(xiàng)沒有使用,則在in參數(shù)指定的輸入文件中必須包含一個(gè)私鑰。
  • certfile選項(xiàng)指定向創(chuàng)建的pkcs#12證書中封裝額外的證書,這些證書存儲(chǔ)在該選項(xiàng)的參數(shù)文件中,可以是一個(gè)或者多個(gè)。

證書別名選項(xiàng)name和caname

  • 這兩個(gè)選項(xiàng)在創(chuàng)建PKCS#12證書的時(shí)候使用。
  • name選項(xiàng)指定了證書和私鑰的一個(gè)好記的別名,該名稱通常顯示在需要導(dǎo)入該P(yáng)KCS#12證書文件的軟件中的證書列表中。
  • caname選項(xiàng)用于為其他證書指定一個(gè)好記的別名,該選項(xiàng)可以使用多次以為多個(gè)證書指定名稱,名稱的順序跟證書出現(xiàn)的順序保持一致即可。該選項(xiàng)一般僅在IE里面有效,在Netscape軟件中則通常被忽視。

證書加密算法選項(xiàng)descert,keypbe和certpbe

  • 這三個(gè)選項(xiàng)在創(chuàng)建PKCS#12證書的時(shí)候使用。descert選項(xiàng)告訴指令使用3DES算法加密證書,在默認(rèn)情況下,指令使用3DES算法加密私鑰,但是使用40位的RC2算法加密證書。
  • keypbe和certpbe選項(xiàng)分別指定對(duì)密鑰和證書進(jìn)行加密的算法。雖然,所有的PKCS#5v1。5或者PKCS#12算法都是支持的,但是OpenSSL還是建議你只用PKCS#12標(biāo)準(zhǔn)中的加密算法。這些算法包括DES,3DES,RC2和RC4等。這些參數(shù)的形式諸如:

?

  • 支持的具體算法和其參數(shù)形式見表11.1。

密鑰用途選項(xiàng)keyex和keysig

  • 這兩個(gè)選項(xiàng)在創(chuàng)建PKCS#12證書的時(shí)候使用,而且僅在Microsoft的IE和其他Microsoft軟件中才有效。
  • keyex選項(xiàng)指定密鑰和證書用于密鑰交換,
  • keysig則指定密鑰和證書用于數(shù)字簽名。
  • 如果僅使用keysig選項(xiàng),則密鑰僅能用于進(jìn)行簽字。僅用于簽名的密鑰可以用來(lái)進(jìn)行S/MIME簽名、驗(yàn)證碼(ActiveX控制簽名)和SSL客戶端驗(yàn)證。需要注意的是,由于OpenSSL本身存在的BUG,只有IE5.0和其后的版本才能夠支持僅用于簽名用途的密鑰進(jìn)行SSL客戶端驗(yàn)證。

迭代次數(shù)選項(xiàng)nomaciter,noiter和maciter

  • 這幾個(gè)選項(xiàng)在創(chuàng)建PKCS#12證書的時(shí)候使用,而且僅在你需要兼容Microsoft的IE4.0的時(shí)候需要。因?yàn)樗惴ㄍǔJ褂闷胀诹町a(chǎn)生密鑰,為了降低受到字典攻擊的可能性,可以將口令進(jìn)行多次迭代從而產(chǎn)生復(fù)雜的口令。這通常以重復(fù)密碼算法中的一部分步驟和降低速度為代價(jià)。MAC雖然一般用于驗(yàn)證文件的完整性,但因?yàn)樗借€和證書也是使用與其相同的口令,所以MAC同樣存在被攻擊的可能性。通常情況下,MAC和算法的迭代次數(shù)都設(shè)置為2048次如果使用了nomaciter和noiter選項(xiàng),迭代次數(shù)將分別降為1
  • 顯然,這兩個(gè)選項(xiàng)大大降低了文件的安全性,所以,除非不得已,建議不要使用這兩個(gè)選項(xiàng)。除了IE4.0不支持MAC迭代外,大部分軟件都支持多次MAC和算法迭代。
  • maciter目前來(lái)說(shuō)意義不大,指明需要使用MAC迭代,目前版本這已經(jīng)是默認(rèn)的,只是為了兼容以前的版本該選項(xiàng)才沒有取消。

其他選項(xiàng)chain和rand

  • 這兩個(gè)選項(xiàng)同樣在創(chuàng)建PKCS#12證書的時(shí)候使用。chain選項(xiàng)告訴指令要建立一個(gè)完整的用戶證書相關(guān)的證書鏈保存在PKCS#12文件中。指令會(huì)從一個(gè)標(biāo)準(zhǔn)的CA證書容器中尋找建立證書鏈需要的證書,如果失敗,則視為發(fā)生致命性錯(cuò)誤。這個(gè)功能當(dāng)然比較特殊,不過(guò),很多時(shí)候,驗(yàn)證方確實(shí)需要被驗(yàn)證方提供完整的證書鏈來(lái)進(jìn)行驗(yàn)證操作,尤其當(dāng)多級(jí)CA存在的情況下,這種要求就是常見的了。
  • 隨機(jī)數(shù)文件選項(xiàng)rand提供了產(chǎn)生隨機(jī)數(shù)的參考種子文件。如果沒有提供該選項(xiàng),那么程序會(huì)從標(biāo)準(zhǔn)輸出設(shè)備的狀態(tài)讀取信息作為隨機(jī)數(shù)種子。隨機(jī)數(shù)文件可以為任意類型的文件。rand選項(xiàng)可以支持多個(gè)文件,用分隔符隔開即可,Windows平臺(tái)使用“;”分隔,OpenVMS系統(tǒng)使用“,”分隔,其他系統(tǒng)都使用“;”分隔。

例子

PKCS#7證書

  • ?PKCS#7格式的證書可以封裝X.509標(biāo)準(zhǔn)證書、相關(guān)證書鏈上的CA證書和CRL,這樣就可以直接把PKCS#7證書發(fā)給驗(yàn)證方驗(yàn)證,免去了把以上的驗(yàn)證內(nèi)容一個(gè)一個(gè)發(fā)給接收方的煩瑣了。微軟對(duì)PKCS#7證書的支持依賴文件后綴名p7,當(dāng)然,OpenSSL則是從來(lái)不關(guān)心后綴名的。OpenSSL對(duì)PKCS#7協(xié)議提供了將普通用戶證書、CA證書和CRL封裝成PKCS#7格式證書的指令crl2pkcs7,此外還提供了pkcs7指令來(lái)解釋PKCS#7格式證書,下面就具體介紹一下crl2pkcs7和pkcs7指令

crl2pkcs7指令功能概述和指令格式

  • crl2pkcs7指令名不符實(shí),并不僅僅是把CRL轉(zhuǎn)換成PKCS#7證書。其實(shí),在OpenSSL中,該指令是唯一可以生產(chǎn)PKCS#7證書的指令,主要用于把CRL和一個(gè)或多個(gè)證書封裝成一個(gè)PKCS#7格式的證書
  • 并且,CRL是一個(gè)可供選擇項(xiàng),即PKCS#7證書里面不一定需要一個(gè)CRL。
  • crl2pkcs7指令的格式如下:

輸入和輸出格式選項(xiàng)inform和outform

  • inform選項(xiàng)指出了輸入的CRL文件的編碼格式。目前只支持兩種格式:PEM和DER。
  • outform選項(xiàng)指出了輸出的PKCS#7文件的編碼格式。目前支持PEM和DER兩種格式。

輸入和輸出選項(xiàng)in,out和certfile

  • in選項(xiàng)指定了存儲(chǔ)輸入CRL的文件名。此選項(xiàng)如果不指定,默認(rèn)采用標(biāo)準(zhǔn)輸入。
  • out選項(xiàng)指定了存儲(chǔ)輸出PKCS#7證書的文件名,默認(rèn)采用標(biāo)準(zhǔn)輸出。
  • certfile選項(xiàng)指定的文件可以包含一個(gè)或多個(gè)證書,文件中的證書將會(huì)全部被封裝到PKCS#7證書中,這個(gè)選項(xiàng)也可以多次使用以加入多個(gè)證書。需要注意的是,所有的證書都應(yīng)該是PEM格式編碼的。

不包含CRL的PKCS#7證書選項(xiàng)nocrl

  • nocrl選項(xiàng)指定在輸出文件中不包含CRL文件。一般情況下,在輸出的PKCS#7文件中包含CRL。指定此選項(xiàng)后,操作過(guò)程中將不會(huì)去讀輸入文件中的CRL。

簡(jiǎn)單的例子

  • crl2pkcs7指令最常用的用法是用來(lái)生成PKCS#7證書。
  • 下面就是生成PKCS#7簡(jiǎn)單例子。

pkcs7指令功能概述和指令格式

  • 查看這個(gè)包含多個(gè)X.509證書和CRL信息的文件里面的內(nèi)容,OpenSSL提供pkcs7指令滿足你的這種愿望。
  • pkcs7指令的格式如下:?

(1)輸入和輸出格式選項(xiàng)inform和outform

  • inform和outform選項(xiàng)指定了in和out選項(xiàng)相關(guān)文件的格式,可以是PEM或者DER格式。

(2)輸入和輸出選項(xiàng)in和out

  • in選項(xiàng)指定了輸入的證書文件的路徑,文件的編碼格式由inform參數(shù)決定。默認(rèn)情況下輸入的是標(biāo)準(zhǔn)輸入設(shè)備。
  • out選項(xiàng)指定了接受輸出的文件的路徑,文件的編碼格式由outform參數(shù)決定。默認(rèn)情況下,輸出目標(biāo)是標(biāo)準(zhǔn)輸出設(shè)備。

(3)輸出顯示內(nèi)容選項(xiàng)ptint_certs,text和noout

  • print_certs選項(xiàng)要求輸出該P(yáng)KCS#7證書文件內(nèi)的所有證書和CRL,該選項(xiàng)逐行輸出所有證書的主題名和簽名者。
  • text選項(xiàng)要求輸出證書的所有內(nèi)容。
  • noout選項(xiàng)要求不要輸出編碼結(jié)構(gòu)的PKCS#7證書。

(4)engine選項(xiàng)

  • engine選項(xiàng)指定后,所指定的Engine(通過(guò)唯一的id指定)會(huì)使用Engine設(shè)備指定的庫(kù)或者硬件設(shè)備相關(guān)接口來(lái)處理本指令的一些操作。

(5)簡(jiǎn)單的例子

?驗(yàn)證證書

  • 證書的結(jié)構(gòu)中的關(guān)鍵內(nèi)容包括:序列號(hào)、公鑰、用戶名稱、簽發(fā)者、CA 簽名和其他 一些附屬信息等。證書驗(yàn)證過(guò)程就是依賴于這些信息和公鑰對(duì)應(yīng)的私鑰進(jìn)行。

通常的證書 驗(yàn)證過(guò)程包括以下要點(diǎn):

  • 1確認(rèn)證書內(nèi)容是正確的和完整的,沒有被篡改,CA簽名是正確的;
  • 2確認(rèn)證書是有效的,在有效期內(nèi)并且沒有被吊銷(CRL中沒有該證書序列號(hào));
  • 3確認(rèn)CA證書是可以被信任的證書,如果CA證書不是根證書,還要繼續(xù)對(duì)CA證書進(jìn)行驗(yàn)證;
  • 4通過(guò)與用戶的交互,基于證書中的公鑰和公開密鑰算法確認(rèn)用戶的身份。其中,確認(rèn)用戶身份的過(guò)程是基于公開密鑰算法的,基本過(guò)程如下:
    • 1被驗(yàn)證方發(fā)送自己的用戶證書給驗(yàn)證方;
    • 2驗(yàn)證方提取證書中的公鑰,并產(chǎn)生一個(gè)隨機(jī)數(shù)Rp,使用該公鑰加密該隨機(jī)數(shù)得到加密的隨機(jī)數(shù)Re并發(fā)給被驗(yàn)證方;
    • 3被驗(yàn)證方使用自己的私鑰解密Re得到Rep并發(fā)回給驗(yàn)證方;
    • 4驗(yàn)證方對(duì)比Rp和Rep,如果一致,則驗(yàn)證通過(guò),否則,驗(yàn)證不通過(guò)。
  • 從上述的過(guò)程可以知道,因?yàn)樽C書中公鑰對(duì)應(yīng)的私鑰僅真正的證書所有者才可能持有(理論上是這樣的,當(dāng)然現(xiàn)實(shí)的系統(tǒng)和社會(huì)中不盡如此),所以如果被驗(yàn)證方能夠正確解密使用該證書上的公鑰加密的信息,即可認(rèn)為被驗(yàn)證方確實(shí)是證書的持有人,也就可以確定其身份。
  • 無(wú)論何種類型的證書,其驗(yàn)證過(guò)程都是基本一致的,當(dāng)然,根據(jù)具體的情況,其驗(yàn)證協(xié)議和要求提供的材料可能有一些區(qū)別。關(guān)于證書驗(yàn)證的更多情況,也可以參考前面。不過(guò),在這一節(jié),我們關(guān)心的是驗(yàn)證證書的有效性,而不對(duì)證書持有人的身份真實(shí)性進(jìn)行驗(yàn)證
  • OpenSSL提供了證書驗(yàn)證的一些指令,包括普通驗(yàn)證指令和一種標(biāo)準(zhǔn)的OCSP協(xié)議處理指令

verify指令介紹

功能概述和指令格式

  • verify指令提供了證書或者說(shuō)證書鏈的驗(yàn)證功能,下面是verify指令的選項(xiàng)和格式:

  • 在驗(yàn)證過(guò)程中遇到什么錯(cuò)誤,雖然通常情況下這時(shí)候應(yīng)該算作驗(yàn)證失敗,應(yīng)該停止驗(yàn)證過(guò)程了,但是我們OpenSSL中的verify指令還是不辭勞苦地將整個(gè)驗(yàn)證過(guò)程執(zhí)行完。這樣的好處是可以告訴用戶在整個(gè)證書鏈的驗(yàn)證過(guò)程中存在的所有問(wèn)題,而不需要用戶一個(gè)一個(gè)問(wèn)題進(jìn)行逐步排除。
  • 為了執(zhí)行驗(yàn)證過(guò)程,verify指令首先做的事情是試圖從提供的所有證書里建立一個(gè)證書鏈證書鏈從提供的用戶證書開始,而結(jié)尾應(yīng)該是一個(gè)根CA證書
  • 證書鏈建立的規(guī)則是尋找當(dāng)前證書的簽發(fā)者證書,如果一個(gè)證書的簽發(fā)者就是其自己,那么該證書就是根證書
  • 如果verify指令不能成功建立一個(gè)證書鏈,那么就認(rèn)為驗(yàn)證失敗。?
  • 尋找當(dāng)前證書的簽發(fā)者證書這個(gè)過(guò)程本身也是一個(gè)復(fù)雜的過(guò)程。在OpenSSL早期版本中(0.9.5a),第一個(gè)找到的持有者名稱跟當(dāng)前證書簽發(fā)者名稱一致的證書,即被認(rèn)為是當(dāng)前證書的簽發(fā)者證書。
  • 而在0.9.6和后面的版本中,所有找到的持有者名稱與當(dāng)前證書簽發(fā)者名稱一致的證書,都被認(rèn)為是可能的簽發(fā)者證書,需要進(jìn)行進(jìn)一步的驗(yàn)證來(lái)確定。也就是說(shuō),除了前面的條件,當(dāng)前證書的密鑰標(biāo)識(shí)字段內(nèi)容必須跟候選簽發(fā)者證書的密鑰標(biāo)識(shí)、簽發(fā)者和序列號(hào)等相匹配,此外,候選簽發(fā)者證書的密鑰用途擴(kuò)展字段也應(yīng)該包含允許簽發(fā)證書的功能
  • 建立證書鏈的時(shí)候,程序首先查找不信任列表,如果找不到當(dāng)前證書的簽發(fā)者證書,則開始在信任列表中查找證書。而根CA證書總是在信任列表中被找到的。如果需要驗(yàn)證的證書本身就是一個(gè)根證書,那么必須在信任證書列表中找到一個(gè)完全一致的證書才能認(rèn)為是驗(yàn)證通過(guò)。
  • 建立一個(gè)完整證書鏈后,verify程序開始檢查每一個(gè)非信任證書的擴(kuò)展項(xiàng)是否跟purpose選項(xiàng)提供的參數(shù)內(nèi)容相一致。當(dāng)然,如果purpose選項(xiàng)沒有出現(xiàn),則在本步驟verify指令將不進(jìn)行任何操作。需要驗(yàn)證的證書或者“葉子”證書其擴(kuò)展項(xiàng)必須跟要求驗(yàn)證的purpose參數(shù)一致,其他CA證書也必須是有效的證書。完成上述步驟后,verify開始檢查根CA證書的信任設(shè)置,以確定其是否支持purpose的要求。OpenSSL為了兼容以前的版本,假定如果CA證書沒有任何信任設(shè)置,則默認(rèn)為支持任何用途。
  • 如果你使用的是0.9.7以后的版本,很幸運(yùn),OpenSSL將支持CRL驗(yàn)證的操作,這時(shí)候verify將根據(jù)CRL檢查整個(gè)證書鏈的每個(gè)證書是否有效,即沒有被管理員吊銷。最后,verify程序?qū)z查整個(gè)證書鏈上所有證書的有效期,根據(jù)當(dāng)前的系統(tǒng)時(shí)間進(jìn)行檢測(cè)。需要注意的是,各個(gè)證書的數(shù)字簽名也是在這個(gè)最后的時(shí)刻進(jìn)行檢驗(yàn)的。通過(guò)上面所有的驗(yàn)證步驟,證書驗(yàn)證才算成功,否則,任何一步的失敗,都意味著證書驗(yàn)證不通過(guò)。

CA證書選項(xiàng)CApath和CAfile

  • CApath選項(xiàng)用來(lái)指定我們信任的CA的證書存放目錄。
  • 但是這些證書的名稱應(yīng)該是下面這樣的格式:xxxxxxxx.0(xxxxxxxx代表證書的哈希值,可以參看x509指令的-hash選項(xiàng))。
  • CAfile選項(xiàng)用來(lái)指定我們信任的CA證書文件,其中可以包含多個(gè)CA證書。目前只支持PEM格式的文件

非信任證書選項(xiàng)untrusted

  • untrusted選項(xiàng)用來(lái)指定非信任證書文件,同樣,該文件可以包含多個(gè)PEM格式的證書。
  • 所謂非信任的證書文件,一般是指在構(gòu)造證書鏈的時(shí)候需要使用的CA證書,但一般都不是根證書。你千萬(wàn)不要以為這是不被信任的證書。通常,CRL也可以通過(guò)這個(gè)選項(xiàng)指定的文件輸入到verify驗(yàn)證過(guò)程中。

證書用途選項(xiàng)purpose

  • 此選項(xiàng)主要驗(yàn)證證書的擴(kuò)展字段,顯示證書的用途。如果沒有設(shè)置此選項(xiàng),那么verify將不會(huì)對(duì)證書鏈進(jìn)行驗(yàn)證操作。
  • 目前,purpose支持的參數(shù)包括:sslclient,sslserver,nssslserver,smimesign和smimeencrypt。

驗(yàn)證選項(xiàng)isuer_checks,crl_check,crl_check_al和ignore_critical

  • issuer_checks選項(xiàng)告訴指令輸出在查找簽發(fā)者證書過(guò)程中的詳細(xì)信息,從而可以知道每個(gè)候選簽發(fā)者證書被拒絕的原因。
  • crl_check選項(xiàng)告訴指令檢查被驗(yàn)證證書的CRL,如果不幸CRL中存在被驗(yàn)證證書的序列號(hào),則證書將不能通過(guò)驗(yàn)證。CRL通過(guò)untrusted選項(xiàng)的參數(shù)輸入
  • crl_check_all選項(xiàng)告訴指令檢查證書鏈中所有證書的CRL,即不僅僅要對(duì)被驗(yàn)證證書是否被吊銷進(jìn)行驗(yàn)證,還要對(duì)整個(gè)證書鏈中其他證書是否被吊銷進(jìn)行驗(yàn)證
  • ignore_critical選項(xiàng)告訴指令可以忽略一些比較少用的擴(kuò)展項(xiàng),即如果該擴(kuò)展項(xiàng)指令沒有處理的話,則忽略。

如何輸入被驗(yàn)證的證書?

  • 在verify指令中,在指令所有參數(shù)最后面輸入要驗(yàn)證的證書文件名即可指定需要驗(yàn)證的證書。如果有多個(gè)證書文件需要驗(yàn)證,可以以空格為間隔一起列在后面,但是這些證書都應(yīng)該是PEM格式的數(shù)字證書。如果不提供證書文件,則指令將試圖從標(biāo)準(zhǔn)輸入中讀取被驗(yàn)證的證書。
  • 使用verbose選項(xiàng),指令將把驗(yàn)證過(guò)程中的所有詳細(xì)過(guò)程輸出。
  • engine選項(xiàng)用來(lái)指定可以用于替代OpenSSL的函數(shù)庫(kù)的其他算法庫(kù)或者硬件,詳見前面章節(jié)。

診斷證書驗(yàn)證結(jié)果

  • 如果驗(yàn)證操作有問(wèn)題,OpenSSL提供了一些輸出來(lái)讓我們弄明白到底出現(xiàn)了什么問(wèn)題,雖然這些信息看起來(lái)有些難懂,不過(guò)還是有用的。診斷信息輸出格式如下:?

  • 第一行說(shuō)明哪個(gè)證書文件出問(wèn)題,后面是其證書的主題。
  • 第二行說(shuō)明錯(cuò)誤號(hào),驗(yàn)證的深度,并給出錯(cuò)誤的解釋,雖然這些解釋不甚明了。其中,驗(yàn)證深度是從0開始計(jì)算的。
  • 表10-6給出了錯(cuò)誤號(hào)及其描述的詳細(xì)說(shuō)明。需要注意的是,有的錯(cuò)誤雖然有定義,但沒用使用,這里用unused標(biāo)識(shí)。?

?例子:

  • verify指定的選項(xiàng)應(yīng)該是較少的,用起來(lái)也非常簡(jiǎn)單。只需要按上述的各個(gè)選項(xiàng)的操作進(jìn)行。下面是證書certpem驗(yàn)證的例子,此證書用根證書cacert.pem生成:

在線證書狀態(tài)服務(wù)協(xié)議指令 OCSP

  • 在許多情況下,需要驗(yàn)證證書真實(shí)性的人(當(dāng)然也可能計(jì)算機(jī)或者程序)并不能完成證書驗(yàn)證的過(guò)程,也就是說(shuō),必須提供一種手段或者服務(wù),能夠幫助完成證書驗(yàn)證的需要。這就是為什么OCSP協(xié)議(OnlineCertificateStatusProtocol),即在線證書狀態(tài)協(xié)議會(huì)出現(xiàn)在我們面前的原因。
  • OCSP協(xié)議使得普通證書應(yīng)用程序可以通過(guò)服務(wù)方式知道一個(gè)特定證書的(吊銷)狀態(tài),從而使得普通程序不需要了解證書驗(yàn)證的細(xì)節(jié)和實(shí)現(xiàn)方式。OCSP接受一個(gè)客戶端發(fā)來(lái)的證書驗(yàn)證請(qǐng)求信息(通常是以HTTP協(xié)議發(fā)出),然后OCSP查詢證書庫(kù)的狀態(tài)。
  • 當(dāng)然,用戶請(qǐng)求里面只是包含了證書的一些關(guān)鍵信息,而并不需要一個(gè)完整的證書。根據(jù)結(jié)果,OCSP響應(yīng)器一般返回給客戶端的狀態(tài)信息包括三種:1良好,說(shuō)明請(qǐng)求證書是正確的,而且沒有被吊銷;2吊銷,說(shuō)明證書已經(jīng)被吊銷;3未知,證書不在該OCSP響應(yīng)器的范圍內(nèi)。
  • 為了防止可能發(fā)生的欺騙,每一個(gè)OCSP返回的回應(yīng)信息都有簽名,而簽名者必須是用戶所信任的,也就是說(shuō),用戶還必須對(duì)每一個(gè)回應(yīng)信息進(jìn)行驗(yàn)證
  • 在OpenSSL實(shí)現(xiàn)上,這個(gè)簽名者可能是以下三種之一。
  • 1 被驗(yàn)證證書的CA。即回應(yīng)信息簽名是用驗(yàn)證證書的CA證書簽發(fā)的。
  • 2 被驗(yàn)證證書CA特殊授權(quán)的OCSP響應(yīng)器。即使用OCSP本身的證書簽發(fā)回應(yīng)信息,OCSP的證書跟被驗(yàn)證證書是同一個(gè)CA頒發(fā)的,并且OCSP證書的用途被指明具有OCSP簽名的權(quán)限。
  • 3?被信任的OCSP響應(yīng)器。即使用OCSP本身的證書簽發(fā)回應(yīng)信息,OCSP證書本身的CA的根CA在信任設(shè)置里面必須是明確指明是可以用于OCSP簽名的,或者是用戶明確定義可以信任的OCSP響應(yīng)器。
  • 可見,OpenSSL的實(shí)現(xiàn)跟OCSP協(xié)議規(guī)定的是基本相符合的,雖然在第三種方式上不完全一致。OpenSSL對(duì)OCSP回應(yīng)信息的驗(yàn)證也是通過(guò)基于OCSP證書建立一個(gè)證書鏈來(lái)進(jìn)行的,關(guān)于OCSP更多的詳細(xì)內(nèi)容在RFC2560中有明確定義。?

?功能概述和指令格式

  • OpenSSL提供的指令總是超出人們的預(yù)期,這次看到的ocsp指令也不例外。它幾乎可以完成大部分OCSP協(xié)議通常的功能。該指令既可以用來(lái)輸出OCSP請(qǐng)求和應(yīng)答內(nèi)容,也可以創(chuàng)建OCSP請(qǐng)求并發(fā)送給一個(gè)OCSP服務(wù)器,甚至,它還可以作為一個(gè)OCSP服務(wù)器運(yùn)行。
  • 下面是ocsp指令格式和其參數(shù):

  • ocsp指令里大部分選項(xiàng)都是用于測(cè)試和調(diào)試目的的,一般情況下,CAfile,Capath和VAfile才是要經(jīng)常使用的選項(xiàng)。?
  • ocsp使用的時(shí)候可以作為客戶端或者服務(wù)器兩種模式,下面我們對(duì)其參數(shù)的具體介紹也分為這兩部分來(lái)進(jìn)行。區(qū)分ocsp指令在服務(wù)器模式還是在客戶端模式工作的標(biāo)志就是是否使用index選項(xiàng):如果使用index選項(xiàng),就是在服務(wù)器模式下工作,否則就是在客戶端模式下工作。

輸入和輸出選項(xiàng)out,reqout,respout,reqin和respin

  • out選項(xiàng)指定通用的輸出文件,可以在服務(wù)器模式或者客戶端模式使用,默認(rèn)情況下使用標(biāo)準(zhǔn)輸出設(shè)備。一般來(lái)說(shuō),只有可讀寫的信息會(huì)在out參數(shù)指定的文件中輸出,如提示信息、文本的請(qǐng)求或者響應(yīng)解釋信息等。
  • reqout選項(xiàng)告訴ocsp指令輸出OCSP請(qǐng)求信息并且存儲(chǔ)在參數(shù)指定的文件中。
  • respout則告訴指令輸出OCSP響應(yīng)并存儲(chǔ)到該參數(shù)指定的文件中。上述選項(xiàng)輸出的請(qǐng)求和響應(yīng)都是以DER格式存儲(chǔ)的。這兩個(gè)選項(xiàng)同樣都可以用于客戶端和服務(wù)器模式。
  • reqin和respin選項(xiàng)分別告訴指令從這兩個(gè)選項(xiàng)指定的文件中讀取OCSP請(qǐng)求或者OCSP響應(yīng)。
  • 如果創(chuàng)建請(qǐng)求或者響應(yīng)的選項(xiàng)出現(xiàn),如cert,serial或者h(yuǎn)ost選項(xiàng)生效,那么這兩個(gè)選項(xiàng)將會(huì)被自動(dòng)忽略。reqin選項(xiàng)在服務(wù)器模式和客戶端模式都可能使用,而respin選項(xiàng)則僅在客戶端模式有效。

輸出內(nèi)容選項(xiàng)req_text,resp_text和text

  • req_text選項(xiàng)和resp_text選項(xiàng)分別告訴指令輸出證書請(qǐng)求或者證書響應(yīng)的文本信息,如果使用text選項(xiàng),則指令將同時(shí)輸出請(qǐng)求和響應(yīng)文本信息。這些輸出會(huì)保存在out指定的文件中或者標(biāo)準(zhǔn)輸出設(shè)備中。這些選項(xiàng)在服務(wù)器和客戶端模式都可以使用。

證書相關(guān)選項(xiàng)issuer,cert和serial

  • isuer選項(xiàng)指定存儲(chǔ)要驗(yàn)證證書的簽發(fā)者證書的文件,該證書必須是PEM格式的。該選項(xiàng)可以重復(fù)使用多次以選擇多個(gè)簽發(fā)者證書。該選項(xiàng)在創(chuàng)建OCSP請(qǐng)求的時(shí)候是必須的。
  • cert選項(xiàng)指定要驗(yàn)證的證書,即加到OCSP請(qǐng)求中的證書。簽發(fā)該證書的CA證書必須在issuer選項(xiàng)中指定,否則指令就不能正常執(zhí)行。
  • serial跟cert選項(xiàng)的功能一樣,用于向OCSP請(qǐng)求中增加證書,不同的是,該選項(xiàng)使用證書序列號(hào)來(lái)標(biāo)識(shí)要加入的證書。該序列號(hào)默認(rèn)是以十進(jìn)制表示,如果在參數(shù)前增加了0x,則認(rèn)為是十六進(jìn)制。
  • 如果你要輸入負(fù)數(shù)序列號(hào)(似乎是很奇怪的需求),只要在輸入?yún)?shù)前面增加“-”號(hào)作為標(biāo)識(shí)即可。

請(qǐng)求相關(guān)選項(xiàng)signer,signkey,nonce和no_nonce

  • 如果需要對(duì)OCSP請(qǐng)求進(jìn)行簽名,則可以利用signer選項(xiàng)來(lái)指定簽名的證書,其相應(yīng)的私鑰則可以在signkey選項(xiàng)指定的文件中輸入。如果沒有使用signkey選項(xiàng),則ocsp指令將從signer選項(xiàng)指定的文件中讀取私鑰。
  • 如果signer和signkey都沒有使用,那么OCSP請(qǐng)求就不會(huì)被加密。
  • 為了區(qū)分每個(gè)請(qǐng)求,OCSP定義了所謂的nonce,事實(shí)上,它是一個(gè)使用摘要算法生成的跟時(shí)間相關(guān)的隨機(jī)數(shù),為了防止重放攻擊等行為的發(fā)生。使用reqin輸入已有OCSP請(qǐng)求的時(shí)候,默認(rèn)情況下是不會(huì)向請(qǐng)求中增加nonce的,如果選擇了nonce選項(xiàng),則將強(qiáng)制向OCSP請(qǐng)求中增加nonce擴(kuò)展項(xiàng)。
  • 相反,當(dāng)使用ocsp指令創(chuàng)建新的請(qǐng)求的時(shí)候(使用cert,serail或者h(yuǎn)ost選項(xiàng)等),默認(rèn)情況下會(huì)在請(qǐng)求中增加nonce擴(kuò)展項(xiàng),如果不想使用nonce擴(kuò)展項(xiàng),則可以使用no_nonce選項(xiàng)去除請(qǐng)求中可能增加的nonce擴(kuò)展項(xiàng)。

OCSP響應(yīng)器地址選項(xiàng)host,path和url

  • OpenSSL提供給我們的ocsp指令不僅僅可以處理一些OCSP請(qǐng)求或者響應(yīng)信息,還可以實(shí)時(shí)模擬一個(gè)OCSP客戶端,即時(shí)產(chǎn)生OCSP請(qǐng)求,發(fā)送給指定的OCSP響應(yīng)器并得到返回的響應(yīng)信息。OCSP響應(yīng)器一般提供基于HTTP或者HTTPS的服務(wù),其定位一般都是通過(guò)IP地址、端口和HTTP文件路徑來(lái)進(jìn)行。
  • host選項(xiàng)參數(shù)指定了OCSP響應(yīng)器的地址和服務(wù)端口,一般是host:port的方式。
  • 而path選項(xiàng)則指定了HTTP文件的路徑名,默認(rèn)情況下使用“/”。
  • url選項(xiàng)是另外一種指定OCSP響應(yīng)器地址的方式,使用HTTP或者HTTPS請(qǐng)求的格式。
  • 事實(shí)上,在OpenSSL的ocsp指令中,url參數(shù)也是被解釋成host和path參數(shù)進(jìn)行實(shí)際連接的建立的。

響應(yīng)驗(yàn)證證書選項(xiàng)CAfile,CApath,verify_certs,trust_other和VAfile

  • CAfile和CApath選項(xiàng)大家已經(jīng)非常熟悉,它們用來(lái)指定CA證書文件或者一個(gè)標(biāo)準(zhǔn)的存放CA證書文件的目錄,這里輸入的CA文件用于驗(yàn)證響應(yīng)信息的簽名。
  • 很多OCSP響應(yīng)器在返回的響應(yīng)信息中不會(huì)加入完整的OCSP證書,那么這使得客戶端在驗(yàn)證響應(yīng)信息的時(shí)候就會(huì)有一定麻煩。為了兼容這種情況,verify_certs選項(xiàng)可以指定增加一個(gè)或者多個(gè)證書,在驗(yàn)證OCSP響應(yīng)時(shí)候可以查找使用這些附加的證書。
  • trust_other選項(xiàng)告訴指令,verify_certs指定的證書都是可信任的,不需要對(duì)這些證書進(jìn)行進(jìn)一步的驗(yàn)證工作,這時(shí)候,指令不會(huì)執(zhí)行完整的證書驗(yàn)證過(guò)程,這對(duì)于不能夠建立完整證書鏈的情況就非常有幫助。
  • VAfile選項(xiàng)的功能是verify_certs和trust_other選項(xiàng)的綜合,該選項(xiàng)指定的證書都是默認(rèn)為可信任的附加證書,不需要進(jìn)行進(jìn)一步驗(yàn)證。

響應(yīng)驗(yàn)證策略選項(xiàng)noverify,no_signature_verify,no_cert_verify,no_cert_checks,no_intern,no_chain,validity_period和status_age

  • noverify選項(xiàng)告訴指令對(duì)OCSP響應(yīng)簽名和nonce字段不進(jìn)行任何驗(yàn)證,該選項(xiàng)事實(shí)上放棄了所有對(duì)OCSP響應(yīng)的驗(yàn)證。
  • no_signature_verify選項(xiàng)告訴指令不用驗(yàn)證OCSP響應(yīng)中的簽名信息,即便簽名無(wú)效。
  • no_cert_verify選項(xiàng)告訴指令不用驗(yàn)證響應(yīng)簽名者的證書,也就是說(shuō),任何人簽名的響應(yīng)都是有效的。
  • no_cert_checks選項(xiàng)則告訴指令對(duì)響應(yīng)簽名證書的狀態(tài)不用做任何附加的檢查,即如果證書已經(jīng)被吊銷或者過(guò)期,也是不會(huì)被發(fā)現(xiàn)的。上述的選項(xiàng)因?yàn)槎荚诓煌潭冉档土隧憫?yīng)驗(yàn)證的強(qiáng)度和響應(yīng)的安全性控制,所以理論上一般僅在測(cè)試的時(shí)候使用上述選項(xiàng)。
  • no_intern選項(xiàng)告訴指令忽略O(shè)CSP響應(yīng)中包含的證書信息,在這種情況下,必須使用verify_certs或者VAfile選項(xiàng)來(lái)增加額外的OCSP響應(yīng)者證書以保證驗(yàn)證響應(yīng)簽名過(guò)程的順利完成。no_chain告訴指令不要使用響應(yīng)中的證書作為附加的非信任CA證書,也就是說(shuō),不要讓響應(yīng)中的證書增加到驗(yàn)證過(guò)程中建立的證書鏈中去,這確保了驗(yàn)證過(guò)程中使用的證書完全是由用戶來(lái)控制
  • 每個(gè)證書響應(yīng)都會(huì)包括一個(gè)有效期,這個(gè)有效期由一個(gè)notBefore字段和一個(gè)可選的notAfter字段組成,當(dāng)前的時(shí)間必須在這兩個(gè)字段規(guī)定的時(shí)間之間,響應(yīng)才有效。但是,這個(gè)時(shí)間間隔有時(shí)候是非常短的,可能只有幾秒,而實(shí)際系統(tǒng)的客戶端和服務(wù)器的時(shí)間可能不同步,存在誤差。為了避免這種情況導(dǎo)致響應(yīng)失效,OpenSSL提供了validity_period和status_age選項(xiàng)來(lái)設(shè)定可以允許的時(shí)間誤差值,其參數(shù)單位是秒。其中,validity_period選項(xiàng)適用于notAfter擴(kuò)展項(xiàng)存在的情況下,其設(shè)定的是一個(gè)誤差秒數(shù)值,默認(rèn)值是5分鐘。如果notAfter擴(kuò)展項(xiàng)不存在,這一般意味著該響應(yīng)只是即時(shí)有效,這時(shí)候可以使用status_age選項(xiàng)來(lái)設(shè)定有效期,即notBefore時(shí)間比當(dāng)前早的時(shí)間不應(yīng)該超過(guò)status_age選項(xiàng)設(shè)定的值。
  • 默認(rèn)情況下,這項(xiàng)檢查是不會(huì)執(zhí)行的,即響應(yīng)在notBefore時(shí)間后總是有效。

OCSP服務(wù)器選項(xiàng)index和CA

  • 上面介紹的選項(xiàng)大部分是用于處理OCSP請(qǐng)求、OCSP響應(yīng)或者模擬客戶端,事實(shí)上,ocsp還可以用于模擬一個(gè)OCSP響應(yīng)器(服務(wù)器)。
  • index選項(xiàng)是否在指令中出現(xiàn)是區(qū)分ocsp指令運(yùn)行在服務(wù)器還是客戶端的標(biāo)記,如果使用了index選項(xiàng),則表明指令已經(jīng)運(yùn)行在OCSP服務(wù)器(或者說(shuō)響應(yīng)器)的模式下。
  • 顯然,OCSP響應(yīng)器就是為了處理OCSP請(qǐng)求的,在OpenSSL的ocsp指令中,OCSP請(qǐng)求的輸入方式是靈活多樣的:第一種是指令行方式,即直接在ocsp指令行中輸入,使用issuer和serial參數(shù)產(chǎn)生請(qǐng)求信息;第二種是采用文件輸入方式,即使用reqin選項(xiàng)指定一個(gè)要處理的OCSP請(qǐng)求;第三種方式是采用其他OCSP客戶端輸入,即定義好OCSP運(yùn)行的服務(wù)端口port或者服務(wù)URL即可。
  • index選項(xiàng)跟我們?cè)赾a指令中看到的index選項(xiàng)相同,指定的是OpenSSL提供的模擬CA中的證書庫(kù)文件,該文件包含了該CA所有頒發(fā)的證書信息和其(吊銷)狀態(tài)。在服務(wù)器運(yùn)行模式下,CA選項(xiàng)是必須使用的,它指定了index證書庫(kù)相應(yīng)的CA證書文件。

OCSP響應(yīng)簽發(fā)者選項(xiàng)rsigner,rkey和resp_key_id

  • OCSP響應(yīng)必須是經(jīng)過(guò)簽名的,所以在服務(wù)器模式下,rsigner選項(xiàng)是務(wù)必要使用的,它指定了用于對(duì)OCSP響應(yīng)簽名的證書。
  • rkey則指定了rsigner證書選項(xiàng)相對(duì)應(yīng)的私鑰,如果rkey選項(xiàng)在指令中沒有出現(xiàn),那么在服務(wù)器模式下,指令會(huì)從rsigner指定的文件中讀取用于響應(yīng)簽名的私鑰。OCSP響應(yīng)被簽名后,還需要在響應(yīng)中標(biāo)識(shí)用于簽名的私鑰,默認(rèn)情況下使用的是證書主題名。
  • 如果使用resp_key_id選項(xiàng),則將使用私鑰ID標(biāo)識(shí)OCSP響應(yīng)信息簽名私鑰。

OCSP響應(yīng)內(nèi)容選項(xiàng)rother,resp_no_certs,nmin和ndays

  • 如果想在返回給客戶端的響應(yīng)信息中包含其他附加證書信息(可能用于客戶端驗(yàn)證響應(yīng)簽名時(shí)使用),那么可以使用rother選項(xiàng)指定存儲(chǔ)這些附加證書的文件。
  • 相反,如果不想在響應(yīng)信息中放入任何證書(包括簽發(fā)響應(yīng)的證書),那么可以使用resp_no_certs選項(xiàng)。
  • nmin和ndays選項(xiàng)用來(lái)填充響應(yīng)信息中的nextUpdate字段,該字段告訴客戶端下一次吊銷列表更新的時(shí)間將會(huì)在多長(zhǎng)時(shí)間之后,nmin和ndays分別以分鐘和日為單位進(jìn)行定義。
  • 如果在ocsp指令中這兩個(gè)選項(xiàng)都沒有使用,那么nextUpdate字段就會(huì)從響應(yīng)信息中刪除,這意味著吊銷列表隨時(shí)都會(huì)進(jìn)行更新。

OCSP服務(wù)器運(yùn)行方式選項(xiàng)port和nrequest

  • 這兩個(gè)參數(shù)僅在ocsp指令以服務(wù)器方式運(yùn)行且請(qǐng)求是從OCSP客戶端輸入的情況下使用。
  • 其中,port選項(xiàng)定義了OCSP服務(wù)器的服務(wù)端口,而nrequest選項(xiàng)則告訴指令在接受和處理該參數(shù)指定數(shù)量的OCSP請(qǐng)求后退出運(yùn)行狀態(tài)。
  • 事實(shí)上,還有其他一些參數(shù)沒有一一介紹,比如engine選項(xiàng),其意義跟其他指令中的同名選項(xiàng)是一樣的,即使用第三方密碼設(shè)備或者密碼庫(kù)來(lái)執(zhí)行一些運(yùn)算操作。讀者可以根據(jù)指令的使用和源代碼的閱讀來(lái)進(jìn)一步了解這些指令的更多參數(shù)。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的密码学专题 证书和CA指令 申请证书|建立CA|CA操作|使用证书|验证证书的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产高清在线 | 黄色www | 成人h动漫精品一区二 | 中文字幕成人 | 大胆欧美gogo免费视频一二区 | 日韩免费看片 | 欧美激情精品久久久久久免费 | 中文国产在线观看 | 夜夜骑日日操 | 欧美日韩国产综合网 | 亚洲女人天堂成人av在线 | 丁香久久婷婷 | 丁香综合激情 | 日韩电影久久 | 在线观看不卡的av | 综合激情 | 国产精品一区二区av日韩在线 | 美女视频黄,久久 | av成人资源 | 国产最新在线 | 97超碰人人澡人人爱学生 | 毛片网站在线看 | 国产精品免费看 | 成人免费在线电影 | 久久高清av | 夜色成人网 | 日韩av一区在线观看 | 欧美精品午夜 | 97精品国产一二三产区 | 999国内精品永久免费视频 | 最新中文字幕视频 | 日本中文字幕在线播放 | 天天操天天添 | 永久免费观看视频 | 中文字幕在线看 | 色噜噜日韩精品欧美一区二区 | 在线最新av| 69久久久久久久 | 欧美日韩在线免费观看 | 国产精品久久久久久久久久妇女 | 天堂av官网| 日本一区二区免费在线观看 | 国产免费大片 | 中文字幕亚洲精品日韩 | 亚洲精品88欧美一区二区 | 国产亚洲精品v | 四虎小视频 | 亚洲成人动漫在线观看 | www日韩视频 | 91九色porny蝌蚪视频 | 91av免费看 | 久久精品视频中文字幕 | av永久网址 | 国产成人精品三级 | 91tv国产成人福利 | 国产精品视频999 | 久久久久久久久久伊人 | 中文字幕一区二区三区四区在线视频 | 婷婷久久网站 | 成年人天堂com | 81国产精品久久久久久久久久 | 丁香高清视频在线看看 | 婷婷六月综合网 | 99在线播放 | av日韩在线网站 | 91理论电影| www.99热精品| 玖玖在线播放 | 99精品视频在线观看免费 | 一区二区三区四区久久 | 9ⅰ精品久久久久久久久中文字幕 | 久久艹人人| 国产伦精品一区二区三区… | 中文字幕乱码电影 | 亚一亚二国产专区 | 国产一级片不卡 | 永久免费的av电影 | 麻豆视频在线 | 日韩欧美视频 | 欧美日韩国产精品一区二区 | 国产精品青草综合久久久久99 | 在线观看 国产 | 91视频啪 | 久久色网站 | 国产日韩欧美综合在线 | 九草视频在线 | 亚洲免费专区 | 91粉色视频 | 国产精品午夜久久久久久99热 | 欧美性一级观看 | 久久免费公开视频 | 久久99久国产精品黄毛片入口 | 亚洲综合激情小说 | 国产成人精品亚洲精品 | 911香蕉| 国内精品久久久久影院日本资源 | 中文字幕有码在线观看 | 亚洲国产成人精品在线观看 | 成人91免费视频 | 99婷婷狠狠成为人免费视频 | 丁香久久| 91成人久久 | 亚洲精品国产综合99久久夜夜嗨 | 天天综合精品 | 成人精品在线 | 日本免费久久高清视频 | 亚洲一级在线观看 | 欧美激情精品久久久久 | 中文字幕观看在线 | 成年人国产在线观看 | 日韩毛片一区 | 探花国产在线 | 亚洲精品久久激情国产片 | 国产韩国精品一区二区三区 | 成人免费观看视频大全 | 成年人免费电影在线观看 | av在线电影播放 | 九九99视频| 五月婷婷开心中文字幕 | 啪啪免费观看网站 | www狠狠操| 亚洲精品18日本一区app | 999国产在线 | 国产99久久久精品 | 国产高清第一页 | 久久久久网站 | 99视频在线精品国自产拍免费观看 | 亚洲日本精品视频 | 日韩电影在线观看中文字幕 | av高清免费| va视频在线观看 | 久久久久久中文字幕 | 国产91精品看黄网站 | 国产一级二级在线 | 国产特黄色片 | 在线一区观看 | 欧美福利网站 | 精品国产区 | 久久综合免费视频 | 日韩在线视频看看 | 精品日韩在线 | 五月婷婷影院 | 黄色不卡av | 成人亚洲欧美 | 亚洲一级黄色av | 97在线观看视频国产 | 亚洲天堂首页 | 夜夜操天天干, | 亚洲成人高清在线 | 色香天天 | 亚洲视频免费在线看 | 亚洲国产精品激情在线观看 | 狠狠干狠狠操 | 国产又粗又猛又爽又黄的视频免费 | 午夜av电影院 | 欧美极品久久 | 2020天天干夜夜爽 | 在线观看韩国av | 亚洲欧美日韩国产精品一区午夜 | 免费国产视频 | 精品国产99| 国产大片黄色 | 欧美精品乱码久久久久久按摩 | 丝袜av一区 | 黄色精品一区二区 | av中文字幕网站 | 激情欧美xxxx | www.天天射 | 免费av视屏 | 国产小视频福利在线 | 玖玖精品视频 | 精品一区二区在线免费观看 | 综合婷婷丁香 | 日韩欧美一区二区三区视频 | 日韩中文字幕在线不卡 | 婷婷久久网站 | 四虎国产 | 91九色综合| 国产高清一 | 一区二区三区免费在线播放 | 亚洲精品久久久久中文字幕m男 | 久久人人爽人人人人片 | 午夜精品久久久久久久99无限制 | 国产精品不卡在线 | 成人蜜桃网 | 亚洲国产999 | 日韩欧美一区二区三区在线 | 午夜精品久久久久99热app | 91麻豆高清视频 | 99热在线精品观看 | 美女黄视频免费看 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 在线视频1卡二卡三卡 | 在线观看国产 | 波多野结衣在线播放一区 | 九九九九精品 | 久久精品福利 | 亚洲综合在线五月天 | 美女免费黄视频网站 | 黄色av网站在线免费观看 | 最近高清中文在线字幕在线观看 | 美女久久网站 | 午夜av免费看 | 国产中文字幕视频在线 | 日韩一区二区三区视频在线 | 久久久久国产成人免费精品免费 | 精品国产资源 | 亚洲黄在线观看 | 日本精品一二区 | 成人毛片在线观看视频 | 欧美日韩调教 | 24小时日本在线www免费的 | 婷婷在线综合 | 综合国产视频 | 韩日精品中文字幕 | 亚洲精品88欧美一区二区 | 国产精品中文字幕在线 | 麻豆传媒一区二区 | 99视频网站 | av网站免费线看精品 | 96久久精品| 国产91精品看黄网站在线观看动漫 | 久久精品国产久精国产 | 天天色天天干天天色 | 激情在线免费视频 | 青青草在久久免费久久免费 | 欧美激情va永久在线播放 | av大片免费看 | 久久在现| 能在线观看的日韩av | 国产精品久久久久久电影 | 久久99精品久久久久久清纯直播 | 午夜精品一区二区三区免费视频 | 中文字幕精品在线 | 永久中文字幕 | 久久男人免费视频 | 综合色亚洲 | 三级在线视频观看 | 天天操夜夜曰 | 中文字幕久久久精品 | 国产在线免费 | 成人小视频在线观看免费 | 欧美极品xxx | 精品专区一区二区 | 国产手机视频精品 | 国产大片黄色 | 国产精品成人免费一区久久羞羞 | 午夜精品久久久久99热app | 狠狠久久| 亚洲va欧美va | 日日夜夜亚洲 | 日日夜夜操操操操 | 黄色网在线播放 | 免费观看第二部31集 | 国产黄免费看 | 摸阴视频 | 奇米网8888| 日韩在线观看一区二区 | 欧美日韩一级视频 | 99 视频 高清| 一区二区电影在线观看 | 久久人91精品久久久久久不卡 | 香蕉视频91 | 日韩不卡高清 | 香蕉国产91 | 国产人成在线观看 | 亚洲人人射 | 97电院网手机版 | 97精品国产97久久久久久 | а天堂中文最新一区二区三区 | av观看在线观看 | 亚洲高清国产视频 | 日韩欧美在线高清 | 国产精品高潮在线观看 | 亚洲第一香蕉视频 | 日韩高清在线一区二区三区 | 欧美日韩精品影院 | 婷婷久操| 国产精品久久久久久久久毛片 | 日本性xxxxx 亚洲精品午夜久久久 | 99福利片 | 婷婷精品国产欧美精品亚洲人人爽 | 久久国产精品久久精品国产演员表 | 91麻豆精品国产91久久久使用方法 | 精品国产一区二区三区久久久蜜臀 | 中文字幕观看av | 亚洲视频,欧洲视频 | 日韩久久久久久久久久久久 | 国产九九精品视频 | 国产高清福利在线 | 99久久精品免费看 | av无限看 | 色婷婷一| 黄色av网站在线观看免费 | 成人中文字幕av | 在线观看久久久久久 | 五月婷影院 | 久久精品99国产精品酒店日本 | 国产高清在线观看av | 在线免费黄色片 | 国产小视频福利在线 | 日韩av网站在线播放 | 91久久久久久久一区二区 | 日韩视频a| 久久久国产一区二区三区四区小说 | 美女福利视频一区二区 | 天天躁日日 | 国产精品成人国产乱一区 | 人人澡人人爽 | 精品91| 五月婷婷视频 | 日韩av偷拍 | 伊人久久精品久久亚洲一区 | 精品国产成人av在线免 | 国产四虎影院 | 精品亚洲网 | 综合网在线视频 | 亚洲一区精品二人人爽久久 | 日韩一级黄色大片 | 久久国产欧美日韩 | 日韩av在线不卡 | av免费电影网站 | 9草在线 | 亚洲欧美日韩不卡 | 亚洲欧美日韩不卡 | 亚洲精品乱码久久久一二三 | 免费视频一区 | 福利视频第一页 | 成人性生交视频 | 国产 视频 高清 免费 | 国产在线污 | 男女拍拍免费视频 | 亚洲每日更新 | 国产一区二区观看 | 久久福利在线 | 精品播放| 精品在线观看免费 | 麻豆成人网 | 日韩av免费观看网站 | 在线观看网站你懂的 | 在线观看日本高清mv视频 | 成人黄色电影免费观看 | 久久在线免费观看视频 | 黄色亚洲在线 | 国产一级视频免费看 | 91人人爱| 超碰在线人人爱 | 亚洲精品久久久久999中文字幕 | 国产精品一区二区在线 | 91精品国自产在线 | 九九视频在线观看视频6 | 国产精品影音先锋 | 久久最新视频 | 久久大片网站 | 综合五月 | 国产98色在线 | 日韩 | 国产精品久久中文字幕 | 国产亚洲婷婷免费 | 婷婷精品国产一区二区三区日韩 | 久久久久麻豆v国产 | 黄色一级大片在线免费看产 | 青青河边草观看完整版高清 | 精品久久免费看 | 欧美午夜剧场 | 狠狠躁18三区二区一区ai明星 | 91精品国产99久久久久久久 | 国产护士av | 国产精品国产三级国产aⅴ入口 | 亚洲国产欧美在线看片xxoo | 69夜色精品国产69乱 | 一级黄色大片 | 亚洲成人家庭影院 | 国产高清视频 | 麻豆免费精品视频 | www.99在线观看 | 四虎成人免费观看 | 亚洲h在线播放在线观看h | 国产色综合天天综合网 | 久艹视频在线免费观看 | 精品久久一区二区三区 | 久久免费福利 | 97人人模人人爽人人喊中文字 | 久久99国产精品久久 | 91大神免费视频 | 色婷婷激情 | 国产亚洲精品久久久久秋 | 国产69精品久久久久9999apgf | 91超国产 | a级黄色片视频 | 久久婷婷网 | 欧美日韩免费网站 | 99视频在线观看视频 | 久久综合精品国产一区二区三区 | 国产精品久久久久永久免费看 | 久久人人爽人人爽人人片av免费 | 久久精品国产一区 | 国产免费久久久久 | 国产成人一区二区三区在线观看 | 日韩欧美中文 | 999成人| 蜜臀av麻豆 | 午夜99| 激情五月婷婷综合 | 2019精品手机国产品在线 | 免费观看完整版无人区 | 国产精品亚州 | 黄色成人在线 | 一级片免费观看视频 | 久久精品亚洲国产 | 黄色免费网站 | 亚洲成人软件 | 欧美超碰在线 | 亚洲午夜在线视频 | 中文字幕资源网 | 国产亚洲视频在线观看 | 久久精品—区二区三区 | 91麻豆精品国产91久久久更新时间 | 国产高清日韩欧美 | 97精品国产97久久久久久 | 高清国产午夜精品久久久久久 | 狠狠色丁香婷婷综合久久片 | 在线av资源 | 这里只有精品视频在线观看 | 热re99久久精品国产99热 | 在线观看日韩中文字幕 | 久久精品99国产精品日本 | 精品视频成人 | 日韩成人黄色av | 成人av在线网 | 欧美日韩亚洲第一页 | 久草精品视频在线看网站免费 | 久久久网站 | 91日韩免费 | 久久99久久99精品免费看小说 | 久久久久久久久久久高潮一区二区 | 国内成人综合 | 伊人黄色网 | 欧美少妇xxx | 91福利视频免费观看 | 人人干人人上 | 98超碰在线 | 一二三区高清 | 六月色丁 | 日本护士撒尿xxxx18 | 色香网 | 欧美高清视频不卡网 | 婷婷五月在线视频 | 国产亚洲一区二区在线观看 | 欧美一级在线看 | 免费精品国产va自在自线 | 美女视频网站久久 | 奇米网网址 | 欧美成年网站 | 久久精品波多野结衣 | 在线观看中文字幕网站 | 成年一级片 | 国产亚洲精品综合一区91 | 国产精品美女久久久久久久网站 | 亚洲专区免费观看 | 香蕉视频在线免费 | 免费看黄色毛片 | 国产精品剧情在线亚洲 | 国产精品一区二区久久精品爱涩 | av在线a| 99精品国产一区二区 | 超碰人人av | 日韩中文字幕电影 | 91麻豆精品国产 | 欧美日韩国产精品一区二区亚洲 | 日本女人逼 | 久草在线视频首页 | 日日夜夜天天久久 | 极品美女被弄高潮视频网站 | 亚洲三级在线免费观看 | 日韩一二区在线 | 色综合久久综合网 | 欧美一级艳片视频免费观看 | 亚洲成人免费观看 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | a√资源在线 | 久久艹艹 | 一级黄色片网站 | 亚洲美女视频在线 | 久草精品视频在线观看 | 国产999精品久久久影片官网 | 丝袜美腿一区 | 国产精品嫩草55av | 中文字幕亚洲国产 | 五月婷婷电影网 | 狠狠干五月天 | 丁香免费视频 | 日日射天天射 | 日本韩国欧美在线观看 | 国产精品电影在线 | 97色免费视频 | 欧美成年人在线观看 | 日韩色在线观看 | 成人国产网站 | 国产成人精品一区二 | 日本aaa在线观看 | av免费片| 国产成人av综合色 | 国产精品二区在线 | 超碰免费在线公开 | 国产又粗又猛又色又黄视频 | 久久久久久久久久亚洲精品 | 98久9在线 | 免费 | 视频二区在线视频 | 日日夜夜操操操操 | 免费三级网 | 欧美一区日韩一区 | 日韩精品免费一区二区在线观看 | 91视频久久久 | 国产精品久久久久久久久久免费看 | 精品国产乱码一区二区三区在线 | 国产精品一区二区三区99 | 精品国产一区二区三区久久久蜜臀 | 日韩一区二区三区不卡 | 日韩精品一二三 | 丁香六月综合网 | 正在播放国产精品 | 伊人狠狠色丁香婷婷综合 | 欧美精品色 | 一区二区毛片 | 日韩av一卡二卡三卡 | 国产一区欧美二区 | 日韩av电影网站在线观看 | 亚洲男女精品 | 久久人人97超碰国产公开结果 | 日韩欧美在线影院 | 五月婷婷激情网 | 国产97在线看 | 中文字幕在线观看免费观看 | 成人网页在线免费观看 | 九九精品视频在线观看 | 九九免费在线观看视频 | 98涩涩国产露脸精品国产网 | 国产v亚洲v | 欧美成人基地 | 欧美精品生活片 | 天天爱天天 | 欧洲av在线| 欧美日韩一二三四区 | 欧美日韩国产精品一区二区亚洲 | 97视频在线观看视频免费视频 | 色综合五月 | 婷婷色中文字幕 | 婷婷福利影院 | 精品影院一区二区久久久 | 色婷婷在线视频 | 999国内精品永久免费视频 | 在线观看中文字幕亚洲 | 精品国产诱惑 | 国产免费看| 久久久免费精品国产一区二区 | av成人免费在线观看 | 国产精品一区在线 | 操一草 | 国内外激情视频 | 欧美精品v国产精品 | 综合精品久久 | 色丁香久久 | 国产日本在线播放 | 欧美色图88 | 亚洲理论在线 | 久久久久成人精品 | 亚洲专区视频在线观看 | 国产精品久久久久久久久久久不卡 | 人人爽人人片 | 免费看在线看www777 | 国产高清免费av | 中文字幕中文字幕在线中文字幕三区 | 国产激情久久久 | 国产999精品久久久久久麻豆 | 久福利| 超碰在线人 | 国产精品久久一区二区三区不卡 | 国产日韩精品在线观看 | 久久高清免费观看 | 西西44人体做爰大胆视频 | 91丨九色丨高潮丰满 | 国产欧美精品一区二区三区四区 | 久久亚洲免费视频 | 综合在线亚洲 | 免费av网址大全 | 公与妇乱理三级xxx 在线观看视频在线观看 | 久99久精品 | 国产精品久久久久av免费 | 五月综合色婷婷 | 国内精品在线观看视频 | 国产成人免费在线观看 | 亚洲免费资源 | 伊人超碰在线 | 天堂av影院 | 6080yy精品一区二区三区 | 国产高清免费在线观看 | 色综合久久88色综合天天6 | 2019中文最近的2019中文在线 | 国产一级一级国产 | 奇米网444| 欧美va天堂在线电影 | 国产亚洲精品久 | 久久五月激情 | 日韩欧美视频一区 | 五月天激情视频在线观看 | 91日本在线播放 | 97超级碰碰碰视频在线观看 | 国产一区二区中文字幕 | 国产精品中文字幕在线 | 午夜视频在线观看一区二区三区 | 成人黄色在线观看视频 | 亚洲aⅴ一区二区三区 | 日韩免费播放 | 国产精品久久 | 亚洲一二区精品 | 亚洲精品久久久久久久不卡四虎 | 亚洲a资源 | 亚洲在线观看av | 久久av福利 | 精品国产伦一区二区三区观看说明 | 欧美a性 | 成人国产电影在线观看 | 色在线亚洲 | 成人黄色影片在线 | 日韩欧美高清不卡 | 韩日精品在线 | 操高跟美女 | 奇米四色影狠狠爱7777 | 黄色福利网站 | 国产色就色 | 欧美视频www | 欧美性爽爽 | 天天干天天做天天操 | 男女激情麻豆 | 国产日韩精品一区二区三区在线 | 黄色成人免费电影 | 国产专区在线 | 精品国产乱码久久久久久1区二区 | 五月激情在线 | 久久精品看片 | 天天操夜夜曰 | 五月在线 | 亚洲国产资源 | 国产精品毛片一区视频播不卡 | 国产精品永久在线观看 | 日韩网站在线观看 | 亚洲精品66 | 日韩和的一区二在线 | 91免费网站在线观看 | 日韩伦理一区二区三区av在线 | 国产黄大片在线观看 | 色av网站 | 91av成人 | 最近的中文字幕大全免费版 | av成人免费网站 | 国产综合精品一区二区三区 | 日韩精品在线免费播放 | 日韩va在线观看 | 人人澡人人干 | 久久精品官网 | 三级黄色a| 国产成人精品av | 久久高清国产视频 | 久久精品久久国产 | 国产精品高清免费在线观看 | 欧美日韩免费一区 | 国产高清在线a视频大全 | 欧美嫩草影院 | 免费观看版 | 久久与婷婷 | 手机色在线| 国产在线一区观看 | 国产精品a久久 | 国产精品久久久久久久久久三级 | 亚洲日本va中文字幕 | 国产高清绿奴videos | 一本一本久久a久久精品综合 | 99精品欧美一区二区蜜桃免费 | 久久手机视频 | 日本高清中文字幕有码在线 | 欧美日韩亚洲在线观看 | 欧美日韩国产一区二区三区在线观看 | 亚洲日本va午夜在线电影 | 精品国产免费一区二区三区五区 | 精品国产中文字幕 | 亚洲狠狠干 | 天天干天天干天天射 | 在线视频你懂得 | 麻豆传媒视频在线免费观看 | 久久99免费观看 | 久久久激情网 | 人人天天夜夜 | 亚洲精品女人久久久 | 黄色com | av丝袜天堂| 韩国av一区| 免费精品视频在线 | 国产在线高清 | 欧美一区二区三区四区夜夜大片 | 欧美日韩久久不卡 | 人人看人人 | 午夜国产一区二区三区四区 | 91黄色小网站 | 91中文字幕网 | 9久久精品 | 最近中文字幕高清字幕免费mv | 一级黄视频 | 欧美日本啪啪无遮挡网站 | 免费av高清 | 中文字幕网址 | 日韩在线字幕 | 国产精品毛片一区二区在线看 | 国产特黄色片 | 性色视频在线 | 久久国产一区二区 | 日韩欧美在线影院 | av成人在线网站 | 国产成人精品久久久 | 操久| 亚洲国产剧情av | 亚洲最大激情中文字幕 | 91av在线看| 激情综合啪啪 | 国产经典 欧美精品 | 又黄又爽又色无遮挡免费 | 中文视频在线播放 | 一区二区精品视频 | 日韩手机在线观看 | 国产剧情av在线播放 | 极品中文字幕 | 国产高清在线不卡 | 久久国产视频网 | 九九热精品国产 | 日韩电影一区二区三区在线观看 | 91免费视频黄 | 国产精品福利在线 | 久久久午夜视频 | 91av资源在线 | 精品综合久久 | 天天干天天干天天 | 美女视频黄免费网站 | 久久a视频 | 极品国产91在线网站 | 精品96久久久久久中文字幕无 | 午夜精品视频一区二区三区在线看 | 亚洲精品视频在线免费 | 久久99精品久久久久久 | 国产亚洲精品v | 国产精品18毛片一区二区 | 在线超碰av | 人人揉人人揉人人揉人人揉97 | 九九热在线免费观看 | 狠狠综合久久av | 久久a热6 | 美女很黄免费网站 | 国产精品夜夜夜一区二区三区尤 | 香蕉在线播放 | 久草在线最新 | 中文字幕av在线播放 | 久久精品国产亚洲精品 | 亚洲综合色丁香婷婷六月图片 | av 一区 二区 久久 | 不卡日韩av| 在线中文字幕播放 | 91视频免费网址 | 99热精品国产一区二区在线观看 | 久久久久久久久久久精 | 国产精品青草综合久久久久99 | 91成人在线网站 | 69av在线视频| 久久免费视频这里只有精品 | 久久久免费在线观看 | 婷婷精品在线视频 | 久久精品999 | 国产黄色特级片 | 黄色一级免费 | 免费又黄又爽视频 | 美女视频黄的免费的 | 日韩99热 | 玖玖爱免费视频 | a v在线观看| 黄色片毛片 | 国产一级视频在线免费观看 | 在线视频 影院 | 国产精品久久嫩一区二区免费 | 中文在线免费一区三区 | 九九九九免费视频 | 久久艹艹 | 国产精品私人影院 | 91免费版在线 | 国产综合视频在线观看 | 天天综合导航 | 欧美成人亚洲 | 国产成人精品亚洲 | 亚洲码国产日韩欧美高潮在线播放 | 成人在线你懂得 | 精品国产乱码久久久久久1区二区 | 国产亚州精品视频 | 国产精品久久久久久久久久新婚 | 久久综合九色综合欧美狠狠 | 国产视频18 | .国产精品成人自产拍在线观看6 | 精品久久亚洲 | 9999精品免费视频 | 青草视频在线看 | 91一区在线观看 | 国产五码一区 | 久久99亚洲精品 | 亚洲美女精品视频 | 天天综合导航 | 激情动态 | 手机av资源 | 日韩二区在线观看 | 国产一区二区在线免费 | 99久久精品免费看 | 久久久国产精品电影 | 午夜视频黄 | 在线色网站 | 中文不卡视频 | 中文av在线天堂 | 在线97| 久久婷婷综合激情 | 国产精品久久久久久久久久久久久 | 亚洲一区黄色 | 日韩有码欧美 | 中文字幕在线影视资源 | 亚洲色图22p | 99人成在线观看视频 | 免费在线观看黄网站 | 91视频久久 | 免费试看一区 | 国产91在线观看 | 欧美在线视频第一页 | 日韩综合一区二区 | 成人手机在线视频 | 国产亚洲精品中文字幕 | 精品一区精品二区高清 | 97色综合 | 麻豆视频国产精品 | av免费在线播放 | 国产女人18毛片水真多18精品 | 国产一区二区三区高清播放 | a级一a一级在线观看 | 久久69精品久久久久久久电影好 | 婷婷成人综合 | 色网免费观看 | 国产精品入口传媒 | 中文字幕在线看视频国产 | 日本视频网 | 成年人黄色av | 视频在线观看入口黄最新永久免费国产 | 亚洲专区视频在线观看 | 91最新网址在线观看 | 亚洲国产网站 | 激情婷婷综合 | 91精品国产成人 | 日日夜av| 最新色站 | 国产视频1| 免费av免费观看 | 一区二区欧美在线观看 | 国产精品一二 | 三级在线视频观看 | 亚洲精品美女在线观看播放 | 亚洲在线网址 | 亚洲乱码国产乱码精品天美传媒 | 中文字幕乱视频 | 亚洲精品乱码 | 在线之家官网 | 国产一区二区久久精品 | 91超在线| 精品亚洲成a人在线观看 | 久久另类视频 | 天天干天天射天天插 | 久久久综合精品 | 香蕉视频久久久 | 天天操天天射天天添 | 国产在线高清精品 | 日日夜夜天天射 | 国产精品久久久久久a | 黄色软件网站在线观看 | 天天拍天天爽 | 黄色一级性片 | 亚洲专区路线二 | 久久这里有 | 色婷婷激情电影 | 婷婷伊人五月天 | 久久久久久久亚洲精品 | 白丝av在线| 国产在线播放一区 | 日本精品一区二区三区在线播放视频 | 超碰在线个人 | 欧美一级性生活片 | 欧美久久影院 | 丁香五婷 | 高清一区二区 | 黄色片软件网站 | 最新av在线免费观看 | 五月婷婷导航 | 国产精品一区二区麻豆 | 免费观看成年人视频 | 日日干,天天干 | 久久99精品一区二区三区三区 | 在线观看一区视频 | 精品国产乱码久久久久久三级人 | 欧美一级片免费在线观看 | 久久久久欧美精品999 | 国产91影院| a级国产乱理伦片在线观看 亚洲3级 | 亚洲资源在线观看 | 69国产盗摄一区二区三区五区 | 综合网天天射 | 日韩午夜在线 | 国产精品久久久毛片 | 国产成人精品一区在线 | 日本中文字幕在线观看 | 在线观看黄色 | 国产精品18久久久久久久久 | 亚洲无线视频 | 亚洲伊人天堂 | 亚洲国产精品一区二区久久hs | 97精品国产一二三产区 | 日韩三区在线 | 最近更新的中文字幕 | 国产成人av片 | 最近中文字幕在线播放 | 婷婷日 | 最新国产在线 | 日韩电影在线一区二区 | 久久精品看片 | 91九色蝌蚪国产 | 黄色免费网战 | 免费亚洲黄色 | 一级一片免费视频 | av大全在线免费观看 | 五月天久久久久久 | 狠狠色狠狠色合久久伊人 | 一区二区久久久久 | 国产精品亚州 | 国产一区欧美日韩 | 色婷婷久久 | 日日操日日操 | 国内精品久久久久影院一蜜桃 | 免费看的黄色网 | 婷婷爱五月天 | 国产五月色婷婷六月丁香视频 | 91免费视频网站在线观看 | 夜夜躁狠狠躁日日躁 | 美女在线免费视频 | 亚洲综合色播 | 日韩r级电影在线观看 | 日本精品久久久久中文字幕5 | 在线影院中文字幕 | 国产精品一区二区三区99 | 久久精国产 | 欧美午夜精品久久久久 | 最近日本mv字幕免费观看 | 中文av资源站| 国产男女无遮挡猛进猛出在线观看 | 国产美女免费 | 亚洲一区二区三区毛片 | 成人电影毛片 | 免费高清在线观看成人 | 国产精品久久久久久久久久久杏吧 | 黄在线免费观看 | 五月婷婷丁香六月 | 欧美亚洲另类在线视频 | 国产精品久久久久久久久久久久冷 | www色网站| 国产爽视频| 亚洲在线网址 | 激情文学综合丁香 | 成人在线观看资源 | 黄色一级在线视频 | 天天草天天干天天 | 天天操天天操天天操天天操天天操天天操 | 激情五月色播五月 | 美女免费视频网站 | 久久久精品免费观看 | 久久国产一二区 | 亚洲国产精品va在线看黑人动漫 | 久久av在线播放 | 97免费视频在线 | 日韩有色 | 九九九九九国产 | 精品国产电影 | 日韩大片在线免费观看 | 久久这里只有精品1 | 国产视频网站在线观看 | 精品国产一区二区三区久久久蜜月 | 日韩在线观看网站 | 国产精品18久久久久久久 | av中文天堂 | 欧美男男激情videos | 国产小视频在线免费观看视频 | 亚洲一区二区视频 | 91人人视频在线观看 | 久久久久久久久电影 |