溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

X.509證書的介紹和使用

發(fā)布時(shí)間:2020-06-06 11:07:58 來源:億速云 閱讀:6115 作者:Leah 欄目:安全技術(shù)

本文以X.509證書為例,為大家詳細(xì)介紹了X.509證書的概念和證書結(jié)構(gòu),以及X.509證書的使用方法,閱讀完整文相信大家對X.509證書有了一定的認(rèn)識。

1)證書

X.509標(biāo)準(zhǔn)是密碼學(xué)里公鑰證書的格式標(biāo)準(zhǔn)。X.509 證書己應(yīng)用在包括TLS/SSL(WWW萬維網(wǎng)安全瀏覽的基石)在內(nèi)的眾多 Internet協(xié)議里,同時(shí)它也有很多非在線的應(yīng)用場景,比如電子簽名服務(wù)。X.509證書含有公鑰和標(biāo)識(主機(jī)名、組織或個(gè)人),并由證書頒發(fā)機(jī)構(gòu)(CA)簽名(或自簽名)。對于一份經(jīng)由可信的證書簽發(fā)機(jī)構(gòu)簽名(或者可以通過其它方式驗(yàn)證)的證書,證書的擁有者就可以用證書及相應(yīng)的私鑰來創(chuàng)建安全的通信,以及對文檔進(jìn)行數(shù)字簽名。

  • 歷史和用

X.509最早與X.500一起發(fā)布于1988年7月3日,它假定頒發(fā)證書的證書頒發(fā)機(jī)構(gòu)(CA)具有嚴(yán)格的層次結(jié)構(gòu)。這與Web信任模型(如PGP)形成了鮮明對比,因?yàn)镻GP方案是任何人都以簽名(而不僅僅是地位特殊的CA),從而證明其他人的密鑰證書的有效性。X.509 V3證書的設(shè)計(jì)非常靈活,除了對網(wǎng)橋拓?fù)浼軜?gòu)網(wǎng)絡(luò)的支持,還可以支持用于點(diǎn)對點(diǎn)方式的Mesh網(wǎng),類似于OpenPGP那樣的web信任機(jī)制,不過這樣方式在2004年之前很少使用。

X.500系統(tǒng)僅由主權(quán)國家實(shí)施,以實(shí)現(xiàn)國家身份信息共享?xiàng)l約的實(shí)施目的,而IETF的公鑰基礎(chǔ)設(shè)施(X.509)或PKIX工作組已對該標(biāo)準(zhǔn)進(jìn)行了調(diào)整,以適應(yīng)更靈活的互聯(lián)網(wǎng)組織結(jié)構(gòu)。事實(shí)上X.509認(rèn)證指的是RFC5280里定義的X.509 v3,包括對IETF的PKIX證書和證書吊銷列表(CRL Profile),通常也稱為公鑰基礎(chǔ)設(shè)施。

在X.509系統(tǒng)中,證書申請者通過發(fā)起“證書簽名請求(CSR)”來得到一份被簽名的證書。為此,它需要生成一個(gè)密鑰對,然后用其中的私鑰對CSR簽名(私鑰本身要妥善保存,對外保密),CSR包含申請人的身份信息、用于驗(yàn)真CSR的申請人的公鑰,以及所請求證書的專有名稱(DN),CSR還可能帶有CA要求的其它有關(guān)身份證明的信息,然后CA對這個(gè)專有名稱發(fā)布一份證書,并綁定一個(gè)公鑰。

組織機(jī)構(gòu)可以把受信的根證書分發(fā)給所有的成員,這樣就可以使用公司的PKI系統(tǒng)了。像Firefox, IE, Opera, Safari 以及Google Chrome這些瀏覽器都預(yù)裝了一組CA根證書,所以可以直接使用這些主流CA發(fā)布的SSL證書。瀏覽器的開發(fā)者直接影響它的用戶對第三方的信任。FireFox就提供了一份csv/html格式的列表。

X.509還包括證書吊銷列表(CRL)實(shí)現(xiàn)標(biāo)準(zhǔn),這是PKI系統(tǒng)經(jīng)常被忽略的方面。IETF批準(zhǔn)的檢查證書有效性的方法是在線證書狀態(tài)協(xié)議(OCSP),F(xiàn)irefox 3默認(rèn)情況下啟用OCSP檢查,從Vista開始的高版本W(wǎng)indows也是如此。

  • 1-1)證書的結(jié)構(gòu)

X.509證書的結(jié)構(gòu)是用ASN.1(Abstract Syntax Notation One:抽象語法標(biāo)記)來描述其數(shù)據(jù)結(jié)構(gòu),并使用ASN1語法進(jìn)行編碼。

X.509 v3數(shù)字證書的結(jié)構(gòu)如下:

         Certificate 證書

 Version Number版本號

 Serial Number序列號

 ID Signature Algorithm ID簽名算法

 Issuer Name頒發(fā)者名稱

 Validity period 有效期 

 Not before起始日期

 Not after截至日期

 Subject Name主題名稱

 Subject pbulic Key Info 主題公鑰信息 

 Public Key Algorithm公鑰算法

 Subject Public Key主題公鑰

 Issuer Unique Identifier (optional)頒發(fā)者唯一標(biāo)識符(可選)

 Subject Unique Identifier (optional)主題唯一標(biāo)識符(可選)

 Extensions (optional) 證書的擴(kuò)展項(xiàng)(可選)

 Certificate Sigature Algorithm證書簽名算法

 Certificate Signature證書的簽名

  • 1-2)指示證書特定用法的擴(kuò)展項(xiàng)

所有擴(kuò)展都有一個(gè)ID,由object identifier來表達(dá),它是一個(gè)集合,并且有一個(gè)標(biāo)記指示這個(gè)擴(kuò)展是不是決定性的。證書使用時(shí),如果發(fā)現(xiàn)一份證書帶有決定性標(biāo)記的擴(kuò)展,而這個(gè)系統(tǒng)并不清楚該擴(kuò)展的用途,就要拒絕使用它。但對于非決定性的擴(kuò)展,不認(rèn)識可以予以忽略。RFC 1422給出了v1的證書結(jié)構(gòu),ITU-T在v2里增加了頒發(fā)者和主題唯一標(biāo)識符,從而可以在一段時(shí)間后重用。重用的一個(gè)例子是當(dāng)一個(gè)CA破產(chǎn)了,它的名稱也在公共列表里清除掉了,一段時(shí)間之后另一個(gè)CA可以用相同的名稱來注冊,即使它與之前的并沒有任何瓜葛。不過IETF并不建議重用同名注冊。另外v2也沒有在Internet里大范圍的使用。v3引入了擴(kuò)展,CA使用擴(kuò)展來發(fā)布一份特定使用目的的證書(比如說僅用于代碼簽名)。

對于所有的版本,同一個(gè)CA頒發(fā)的證書序列號都必須是唯一的。

RFC 5280(及后續(xù)版本)定義了數(shù)字證書擴(kuò)展項(xiàng),用于指示如何使用證書。它們大多來自joint-iso-ccitt(2)ds(5)id-ce(29)OID。第4.2.1節(jié)中定義的一些最常見的是:

       ● Basic Constraints,{id ce 19},用于指示一份證書是不是CA證書。

       ● Key Usage, {id ce 15},指定了這份證書包含的公鑰可以執(zhí)行的密碼操作,例如只能用于簽名,但不能用來加密。

       ●Extended Key Usage{id ce 37},典型用法是指定葉子證書中的公鑰的使用目的。它包括一系列的OID,每一個(gè)都指定一種用途。例如{id pkix 31}表示用于服務(wù)器端的TLS/SSL連接;{id pkix 34}表示密鑰可以用于保護(hù)電子郵件。

通常情況下,當(dāng)一份證書有多個(gè)限制用途的擴(kuò)展時(shí),所有限制條件都應(yīng)該滿足才可以使用。RFC 5280有一個(gè)例子,該證書同時(shí)含有keyUsage和extendedKeyUsage,這樣的證書只能用在被這兩個(gè)擴(kuò)展指定的用途,例如網(wǎng)絡(luò)安全服務(wù)決定證書用途時(shí),會同時(shí)對這個(gè)擴(kuò)展進(jìn)行判斷。

  • 1-3)證書文件擴(kuò)展名

X.509證書有幾種常用的文件擴(kuò)展名,但要注意:其中一些擴(kuò)展名也有其它用途,就是說具有這個(gè)擴(kuò)展名的文件可能并不是證書,比如說可能只是保存了私鑰。

● .pem:(隱私增強(qiáng)型電子郵件),DER編碼的證書再進(jìn)行Base64編碼,數(shù)據(jù)存放于“--- BEGIN CERTIFICATE ---”和“ --- END CERTIFICATE ---”之間

● .cer,.crt,.der:通常采用二進(jìn)制DER形式,但Base64編碼也很常見

● .p7b,.p7c-PKC#7:SignedData結(jié)構(gòu),沒有數(shù)據(jù),僅有證書或CRL

● .p12-PKCS#12:可以包含證書(公鑰),也可同時(shí)包含受密碼保護(hù)的私鑰

● .pfx :PKCS#12的前身(通常用PKCS#12格式,例如IIS產(chǎn)生的PFX文件)

PKCS#7是簽名或加密數(shù)據(jù)的格式標(biāo)準(zhǔn),官方稱之為容器。由于證書是可驗(yàn)真的簽名數(shù)據(jù),所以可以用SignedData結(jié)構(gòu)表述。.P7C文件是退化的SignedData結(jié)構(gòu),沒有包括簽名的數(shù)據(jù)。

PKCS#12從個(gè)人信息交換(PFX)標(biāo)準(zhǔn)發(fā)展而來,用于在單個(gè)文件中交換公共和私有對象。

2)證書鏈和交叉認(rèn)證

證書鏈(也就是RFC 5280里的證書路徑)指的是以最終實(shí)體證書開頭,后跟一個(gè)或多個(gè)CA證書,且通常最后一個(gè)是自簽名證書,具有如下關(guān)系:

1.除了鏈上的最后一個(gè)證書外,每個(gè)證書的頒發(fā)者等于其后一個(gè)證書的主題(主題就是使用者)。

2.除了鏈上的最后一個(gè)證書外,每個(gè)證書都是由其后的一個(gè)證書簽名。

3.最后一個(gè)證書是信任錨:由于是通過某種可信的過程得到的,所以你可以信任它。

證書鏈用來檢查目標(biāo)證書(鏈中的第一個(gè)證書)中包含的公鑰和其他數(shù)據(jù)是否屬于其主題。檢查是這么做的,用證書鏈中的下一個(gè)證書的公鑰來驗(yàn)證它的簽名,一直檢查到證書鏈的尾端,由于最后一個(gè)證書是信任錨,成功達(dá)到該證書將證明目標(biāo)證書可以信任。

上段中的描述是根據(jù)RFC5280定義的認(rèn)證路徑驗(yàn)證過程的簡化過程,實(shí)際上涉及額外的檢查,例如驗(yàn)證證書的有效日期、查找CRL等。

在研究證書鏈的構(gòu)建和驗(yàn)證方式時(shí),需要特別注意的是,具體的證書可以是不同的證書鏈的一部分(鏈上的所有證書都有效)。 這是因?yàn)榭梢詾橄嗤闹黝}和公鑰生成多個(gè)CA證書,但使用不同的私鑰(來自不同的CA或來自同一CA的不同的私鑰)進(jìn)行簽名。 因此,盡管單個(gè)X.509證書只能具有一個(gè)頒發(fā)者和一個(gè)CA簽名,但是它可以有效地鏈接到多個(gè)證書,從而建立完全不同的證書鏈。 這對于PKI與其他應(yīng)用程序之間的交叉認(rèn)證至關(guān)重要,詳見以下示例。

下圖每個(gè)框代表一個(gè)證書,主題以粗體顯示,A→B表示“ A由B簽名”(或更準(zhǔn)確地說,A由B包含公鑰相對應(yīng)的私鑰簽名),具有相同顏色(非白色/透明)的證書包含相同的公鑰。

  • 例1:兩個(gè)PKI之間,在根證書頒發(fā)機(jī)構(gòu)(CA)級別上進(jìn)行交叉認(rèn)證

為了讓PKI 2的用戶證書也得到PKI 1的信任,CA1簽署包含CA2公鑰的證書cert2.1,此時(shí)cert2和cert2.1具體相同的主題及公鑰,cert2.2 (User 2)就有了兩條合法的證書鏈:"cert2.2 → cert2" and "cert2.2 → cert2.1 → cert1"。

CA2也可以生成類似的包含有CA1公鑰的證書cert1.1,以便PKI 1的用戶(比如User 1)的證書能在PKI 2得到認(rèn)證。

X.509證書的介紹和使用


  • 例2:CA證書更新

   閱讀這篇文章:了解認(rèn)證路徑構(gòu)建(PDF,PKI論壇,2002)

        證書頒發(fā)者為了從舊的私鑰平滑地轉(zhuǎn)移到新的私鑰,他可以頒發(fā)兩個(gè)證書,其中一個(gè)是新的私鑰對舊的公鑰進(jìn)行簽名,另一個(gè)是舊的私鑰對新的公鑰的簽名,這兩個(gè)證書都是自頒發(fā)的,但都不是自簽名。注:另外還存在新舊兩個(gè)自簽名證書。

假設(shè)cert1和cert3包含相同的公鑰(舊的公鑰),對于cert5來說有兩條合法的證書鏈,cert5 → cert1 和 cert5 → cert3 → cert2, cert6的情況也類似。這樣就允許老的用戶證書可以在新舊兩個(gè)根證書之間平滑轉(zhuǎn)移。 

X.509證書的介紹和使用

3)X.509證書的例子

        以下是維基百科網(wǎng)站W(wǎng)ikipedia.org和其他幾家Wikipedia網(wǎng)站的X.509證書解碼實(shí)例,由GlobalSign發(fā)布,它的頒發(fā)者字段(Subject)將Wikipedia描述為一個(gè)組織,Subject Alternative Name字段描述可以使用的主機(jī)名。Subject Public Key Info字段包含一個(gè)ECDSA公鑰,而底部的簽名由GlobalSign的RSA私鑰生成。

  •   3-1)最終實(shí)體證書

        網(wǎng)摘:最終實(shí)體證書就是大家通常說的用戶證書,有別于CA證書,最終實(shí)體證書中的證書主體是不能使用證書所對應(yīng)的私鑰簽發(fā)證書的。最終實(shí)體與CA是兩個(gè)相對的概念:CA可以利用其私鑰簽發(fā)證書,而最終實(shí)體不能。雖然在X.509標(biāo)準(zhǔn)中并未明確定義最終實(shí)體證書,但是定義了“最終實(shí)體公鑰證書吊銷列表 (End-entity public-key certificate revocation list)”的概念,由此可見最終實(shí)體證書就是指用戶證書。最終實(shí)體可以是各種類型的實(shí)體,如自然人、組織機(jī)構(gòu)、設(shè)備、Web服務(wù)器等。

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            10:e6:fc:62:b7:41:8a:d5:00:5e:45:b6
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - SHA256 - G2
        Validity
            Not Before: Nov 21 08:00:00 2016 GMT
            Not After : Nov 22 07:59:59 2017 GMT
        Subject: C=US, ST=California, L=San Francisco, O=Wikimedia Foundation, Inc., CN=*.wikipedia.org
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub: 
                    04:c9:22:69:31:8a:d6:6c:ea:da:c3:7f:2c:ac:a5:
                    af:c0:02:ea:81:cb:65:b9:fd:0c:6d:46:5b:c9:1e:
                    ed:b2:ac:2a:1b:4a:ec:80:7b:e7:1a:51:e0:df:f7:
                    c7:4a:20:7b:91:4b:20:07:21:ce:cf:68:65:8c:c6:
                    9d:3b:ef:d5:c1
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Agreement
            Authority Information Access: 
                CA Issuers - URI:http://secure.globalsign.com/cacert/gsorganizationvalsha2g2r1.crt
                OCSP - URI:http://ocsp2.globalsign.com/gsorganizationvalsha2g2
 
            X509v3 Certificate Policies: 
                Policy: 1.3.6.1.4.1.4146.1.20
                  CPS: https://www.globalsign.com/repository/
                Policy: 2.23.140.1.2.2
 
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 CRL Distribution Points: 
 
                Full Name:
                  URI:http://crl.globalsign.com/gs/gsorganizationvalsha2g2.crl
 
            X509v3 Subject Alternative Name: 
                DNS:*.wikipedia.org, DNS:*.m.mediawiki.org, DNS:*.m.wikibooks.org, DNS:*.m.wikidata.org, DNS:*.m.wikimedia.org, DNS:*.m.wikimediafoundation.org, DNS:*.m.wikinews.org, DNS:*.m.wikipedia.org, DNS:*.m.wikiquote.org, DNS:*.m.wikisource.org, DNS:*.m.wikiversity.org, DNS:*.m.wikivoyage.org, DNS:*.m.wiktionary.org, DNS:*.mediawiki.org, DNS:*.planet.wikimedia.org, DNS:*.wikibooks.org, DNS:*.wikidata.org, DNS:*.wikimedia.org, DNS:*.wikimediafoundation.org, DNS:*.wikinews.org, DNS:*.wikiquote.org, DNS:*.wikisource.org, DNS:*.wikiversity.org, DNS:*.wikivoyage.org, DNS:*.wiktionary.org, DNS:*.wmfusercontent.org, DNS:*.zero.wikipedia.org, DNS:mediawiki.org, DNS:w.wiki, DNS:wikibooks.org, DNS:wikidata.org, DNS:wikimedia.org, DNS:wikimediafoundation.org, DNS:wikinews.org, DNS:wikiquote.org, DNS:wikisource.org, DNS:wikiversity.org, DNS:wikivoyage.org, DNS:wiktionary.org, DNS:wmfusercontent.org, DNS:wikipedia.org
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Subject Key Identifier: 
                28:2A:26:2A:57:8B:3B:CE:B4:D6:AB:54:EF:D7:38:21:2C:49:5C:36
            X509v3 Authority Key Identifier: 
                keyid:96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7C
 
    Signature Algorithm: sha256WithRSAEncryption
         8b:c3:ed:d1:9d:39:6f:af:40:72:bd:1e:18:5e:30:54:23:35:
         ...


        要驗(yàn)證此最終實(shí)體證書,需要一個(gè)與其頒發(fā)者和頒發(fā)機(jī)構(gòu)密鑰標(biāo)識符(Authority Key Identifier)匹配的中間證書:

 Issuer: C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - SHA256 - G2
 X509v3 Authority Key Identifier: 
                keyid:96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7C

        在TLS連接中,作為握手過程的一部分,正確配置的服務(wù)器將提供該中間層,但也可以通過從最終實(shí)體證書中提取“ CA Issuers” URL來檢索中間證書。

  • 3-2)中間證書

網(wǎng)摘:什么是中間證書?

      中間證書用作根證書的替代。我們使用中間證書作為代理,因?yàn)槲覀儽仨殞⒏C書保存在眾多安全層之后,以確保其密鑰絕對不可訪問。由于根證書簽署了中間證書,因此中間證書可用于簽署客戶安裝和維護(hù)的SSL“信任鏈”。

       注意:如果不使用已頒發(fā)的SSL證書安裝中間證書,則可能無法建立可信鏈證書。這意味著,當(dāng)訪問者試圖訪問您的網(wǎng)站時(shí),他們可能會收到一個(gè)“安全警報(bào)”錯(cuò)誤,指示“安全證書是由您未選擇信任的公司頒發(fā)的…”面對這樣的警告,潛在客戶很可能會將其業(yè)務(wù)轉(zhuǎn)移到其他地方。


       以下是中間證書的實(shí)例,此證書被CA根證書簽署,并簽署了上面的最終實(shí)體證書。

       注意:此中間證書的subject字段與它所簽署的最終實(shí)體證書的issuer字段相同、中間證書的subject key identifier(主題密鑰標(biāo)識符)字段與最終實(shí)體證書的的authority key identifier(頒發(fā)者的密鑰標(biāo)識符)字段相同。

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            04:00:00:00:00:01:44:4e:f0:42:47
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
        Validity
            Not Before: Feb 20 10:00:00 2014 GMT
            Not After : Feb 20 10:00:00 2024 GMT
        Subject: C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - SHA256 - G2
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c7:0e:6c:3f:23:93:7f:cc:70:a5:9d:20:c3:0e:
                    ...
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
            X509v3 Subject Key Identifier:
                96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7C
            X509v3 Certificate Policies:
                Policy: X509v3 Any Policy
                  CPS: https://www.globalsign.com/repository/
 
            X509v3 CRL Distribution Points:
 
                Full Name:
                  URI:http://crl.globalsign.net/root.crl
 
            Authority Information Access:
                OCSP - URI:http://ocsp.globalsign.com/rootr1
 
            X509v3 Authority Key Identifier:
                keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
 
    Signature Algorithm: sha256WithRSAEncryption
         46:2a:ee:5e:bd:ae:01:60:37:31:11:86:71:74:b6:46:49:c8:
         ...
  • 3-3)根證書

以下是證書頒發(fā)機(jī)構(gòu)的自簽名根證書示例,Issuer(頒發(fā)者字段)和Subject(主題,使用者字段)是相同的,能夠使用自己的公鑰對簽名進(jìn)行驗(yàn)證,信任鏈的驗(yàn)證必須在此結(jié)束。如果驗(yàn)證程序在其信任存儲中有此根證書,就可以認(rèn)為在TLS連接中使用的最終實(shí)體證書是可信的。否則,最終實(shí)體證書被視為不可信。

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            04:00:00:00:00:01:15:4b:5a:c3:94
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
        Validity
            Not Before: Sep  1 12:00:00 1998 GMT
            Not After : Jan 28 12:00:00 2028 GMT
        Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b:
                    ...
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier: 
                60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
    Signature Algorithm: sha1WithRSAEncryption
         d6:73:e7:7c:4f:76:d0:8d:bf:ec:ba:a2:be:34:c5:28:32:b5:

4)安全

        Bruce Schneier,Peter Gutmann和其他安全專家發(fā)表了許多有關(guān)PKI問題的出版物。

  •   4-1)架構(gòu)缺陷

        將無效的證書列入黑名單(使用CRL和OCSP)。

        PKI的魅力之一是脫機(jī)功能,但如果客戶端僅使用CRL來判斷證書的有效性,在脫機(jī)的情況下就會出現(xiàn)誤判,因?yàn)楫?dāng)CRL不可用時(shí),大多數(shù)客戶端都會信任證書,于是攻.擊者可以通過切斷信道來禁用CRL。谷歌(Google)的亞當(dāng)?蘭利(Adam Langley)曾表示,CRL軟故障檢查就像一條安全帶,只有在發(fā)生事故時(shí)才起作用。

        ● CRL的尺寸較大且分布模式復(fù)雜,因此它不是一個(gè)很好的選擇,

        ● OCSP語義模糊,缺乏歷史撤銷狀態(tài);

        ● 未解決根證書吊銷的問題

        ● 聚合問題:身份聲明(通過標(biāo)識符進(jìn)行身份驗(yàn)證)、屬性聲明(提交一包經(jīng)過審核的屬性)和策略聲明組合在一個(gè)容器中,這會引發(fā)隱私、策略映射和維護(hù)問題。

        ● 委派問題:從技術(shù)上講,CA無法限制下級CA在有限的名稱空間或?qū)傩约忸C發(fā)證書;X.509的此功能未被使用。因此,互聯(lián)網(wǎng)上存在大量的CA,對它們進(jìn)行分類和策略是一項(xiàng)不可完成的任務(wù),一個(gè)組織內(nèi)部的授權(quán)不能像一般的商業(yè)慣例那樣處理。

        ● 聯(lián)合身份驗(yàn)證問題:證書鏈?zhǔn)菑膶貱A、橋接CA和交叉簽名的結(jié)果,這使得驗(yàn)證復(fù)雜且處理時(shí)間上昂貴、路徑驗(yàn)證語義可能不明確。具有第三方受信任方的層次結(jié)構(gòu)是唯一的模型。如果已經(jīng)建立了雙邊信任關(guān)系,這將很不方便。

        為主機(jī)名頒發(fā)擴(kuò)展驗(yàn)證(EV)證書不會阻止頒發(fā)對同一主機(jī)名較低驗(yàn)證證書的頒發(fā),這意味著較高的EV驗(yàn)證級別無法抵御中間人攻.擊。

  •   4-2)證書頒發(fā)機(jī)構(gòu)的問題

        如果是主體而不是依賴方購買證書,通常會使用最便宜的頒發(fā)者,頒發(fā)者出于成本考慮,往往采用擴(kuò)展驗(yàn)證證書來解決問題,但是在安全專家看來,信任價(jià)值正在下降。

        ● 證書頒發(fā)機(jī)構(gòu)否認(rèn)對用戶(包括主題或依賴方)的幾乎所有保證。

        ● 有效期應(yīng)用于限制密鑰強(qiáng)度被視為時(shí)間足夠,此參數(shù)被證書頒發(fā)機(jī)構(gòu)濫用以向客戶端收取擴(kuò)展費(fèi)。這給使用密鑰滾動的用戶帶來了不必要的負(fù)擔(dān)。(沒看懂啥意思)

        ●“用戶使用未定義的認(rèn)證請求協(xié)議來獲取證書,該證書發(fā)布于不存在的目錄中的不明確位置,從而無有效手段來撤銷它?!?

與所有企業(yè)一樣,CA受其經(jīng)營站點(diǎn)的法律管轄,并可能被迫損害其客戶和用戶的利益。情報(bào)機(jī)構(gòu)還利用了通過CA的法外妥協(xié)發(fā)出的虛假證書(例如DigiNotar)來進(jìn)行中間人攻.擊。另一個(gè)例子是荷蘭政府CA的撤銷請求,由于新的荷蘭法律自2018年1月1日起生效,為荷蘭情報(bào)和安全部門賦予了新的權(quán)力。

  •   4-3)實(shí)施問題

        X.509實(shí)現(xiàn)存在設(shè)計(jì)缺陷、錯(cuò)誤、對標(biāo)準(zhǔn)的不同解釋以及不同標(biāo)準(zhǔn)的互操作性問題,一些問題是:

        ● 許多實(shí)現(xiàn)關(guān)閉吊銷檢查:

        ● 策略被視為障礙,沒有得到執(zhí)行

        ● 如果默認(rèn)情況下在所有瀏覽器(包括代碼簽名)中都打開了它,可能會破壞基礎(chǔ)結(jié)構(gòu)

        ● DN很復(fù)雜且不容易理解(缺乏規(guī)范化、國際化問題……)

        ● RFC822名稱有2種表示法

        ● 幾乎不支持名稱和策略約束

        ● keyUsage被忽略,使用列表中的第一個(gè)證書

        ● 自定義oid的實(shí)施很困難

        ● 不應(yīng)將屬性設(shè)為強(qiáng)制屬性,因?yàn)樗鼤箍蛻舳吮罎?/span>

        ● 未指定的屬性長度會導(dǎo)致特定于產(chǎn)品的限制

        ● X.509存在實(shí)現(xiàn)錯(cuò)誤,例如允許在證書中使用以空值結(jié)尾的字符串,或通過代碼注入攻.擊來偽造使用者名稱。

        ● 通過使用對象標(biāo)識符的0x80填充子標(biāo)識符,錯(cuò)誤的實(shí)現(xiàn)或通過使用客戶端瀏覽器的整數(shù)溢出,攻.擊者可以在CSR中包含一個(gè)未知屬性,CA會將其簽名,客戶端錯(cuò)誤地將其解釋為“CN”(OID = 2.5.4.3)

  •   4-4)加密的漏洞

        數(shù)字簽名系統(tǒng)依賴于密碼散列函數(shù)(哈希函數(shù))的安全性。如果公鑰基礎(chǔ)結(jié)構(gòu)(PKI)使用了不再安全的哈希函數(shù),攻.擊者可以利用哈希函數(shù)中的弱點(diǎn)來偽造證書。具體來說,如果攻.擊者能夠?qū)崿F(xiàn)“哈希碰撞”,他們可以先說服CA用看似無害的內(nèi)容簽名證書,但這些內(nèi)容的哈希與攻.擊者創(chuàng)建的另一組惡意的證書內(nèi)容的哈希相同,然后,攻.擊者可以將CA提供的簽名附加到其惡意證書之中,從而生成“似乎由CA簽名”的惡意證書。由于惡意證書內(nèi)容由攻.擊者定制,因此它們的有效日期或主機(jī)名可能與無害證書不同;惡意證書甚至可以包含“CA:true”字段,從而使其能夠頒發(fā)其他受信任證書。

        ● 基于MD2的證書使用了很長時(shí)間,容易受到預(yù)映像攻.擊。由于根證書已經(jīng)有一個(gè)自簽名,攻.擊者可以使用此簽名并將其用于中間證書。

        ● 2005年,Arjen Lenstra和Benne de Weger演示了“如何使用哈希碰撞“構(gòu)造兩個(gè)X.509證書,這兩個(gè)證書包含相同的簽名,并且只在公鑰上不同,這是通過對MD5散列函數(shù)的碰撞攻.擊實(shí)現(xiàn)的。

        ● 2008年,Alexander Sotirov和Marc Stevens在Chaos Communication Congress上提出了一個(gè)實(shí)用的攻.擊,基于RapidSSL仍在發(fā)布基于MD5的X.509證書這一事實(shí),他們創(chuàng)建了一個(gè)被所有普通瀏覽器接受的流氓證書頒發(fā)機(jī)構(gòu)。

        ● 2009年4月,在歐洲密碼學(xué)會議上,麥格理大學(xué)(Macquarie University)的澳大利亞研究人員提出了“自動差分路徑搜索SHA-1”,研究人員能夠推導(dǎo)出一種將碰撞的可能性增加了幾個(gè)數(shù)量級的方法。

        ● 2017年2月,由Marc Stevens領(lǐng)導(dǎo)的一組研究人員制造了一次SHA-1碰撞,證明了SHA-1的弱點(diǎn)。

  •   4-4-1)針對加密漏洞的緩解措施

        利用哈希碰撞來偽造X.509簽名的前提是,攻.擊者能夠預(yù)測證書頒發(fā)機(jī)構(gòu)將要簽名的數(shù)據(jù)。通過在CA簽署的證書中生成一個(gè)隨機(jī)因素(通常是序列號)可以在某種程度上緩解這種情況。自2011年以來,CA /瀏覽器論壇已在其基準(zhǔn)要求第7.1節(jié)中要求序列號熵。

        所以,序列號是作為一個(gè)隨機(jī)干擾源而存在,它是保密的,在簽署證書之前不能對外泄露。

        自2016年1月1日起,基線要求禁止使用SHA-1頒發(fā)證書。截至2017年初,Chrome 和Firefox拒絕使用SHA-1的證書。截至2017年5月,Edge和Safari都在拒絕SHA-1證書,非瀏覽器的X.509驗(yàn)證程序尚未拒絕SHA-1證書。

       5)PKCS標(biāo)準(zhǔn)概述

         在密碼學(xué)里,PKCS代表“公鑰密碼學(xué)標(biāo)準(zhǔn)”。這是一組由RSA Security Inc.設(shè)計(jì)和發(fā)布的公鑰密碼標(biāo)準(zhǔn),始于20世紀(jì)90年代初,該公司發(fā)布這些標(biāo)準(zhǔn)是為了推廣使用他們擁有專利的密碼技術(shù),如RSA算法、Schnorr簽名算法和其他一些算法。盡管不是行業(yè)標(biāo)準(zhǔn)(因?yàn)樵摴颈A袅藢λ鼈兊目刂茩?quán)),但近年來某些標(biāo)準(zhǔn)已經(jīng)開始進(jìn)入IETF和PKIX工作組等相關(guān)標(biāo)準(zhǔn)化組織的“標(biāo)準(zhǔn)跟蹤”過程。

        ● PKCS#1 2.2 RSA加密標(biāo)準(zhǔn)參見RFC8017。定義了RSA公鑰和私鑰(以明文編碼的ASN.1)的數(shù)學(xué)屬性和格式,以及執(zhí)行RSA加密、解密和生成及驗(yàn)證簽名的基本算法和編碼/填充方案。

        ● PKCS#2-已撤回,從2010年起不再有效,涵蓋了RSA對消息摘要的加密,隨后合并到PKCS#1中。

        ● PKCS#3 1.4 Diffie-Hellman密鑰協(xié)商標(biāo)準(zhǔn),一種加密協(xié)議,它允許彼此不具有先驗(yàn)知識的雙方在不安全的通信信道上共同建立共享的秘密密鑰。

        ● PKCS#4-已撤回自2010年起不再有效,涵蓋了RSA密鑰語法,隨后合并到PKCS#1中。

        ● PKCS#5 2.1基于Password的加密標(biāo)準(zhǔn),參見RFC 8018和PBKDF2。

        ● PKCS#6 1.5擴(kuò)展證書語法標(biāo)準(zhǔn),定義對舊的v1 X.509證書規(guī)范的擴(kuò)展,被v3淘汰。

        ● PKCS#7 1.5加密消息語法標(biāo)準(zhǔn),請參閱RFC2315。用于在PKI下對消息進(jìn)行簽名和/或加密。也用于證書分發(fā)(例如作為對PKCS10消息的響應(yīng)),形成了S /MIME的基礎(chǔ),S /MIME2010年基于RFC 5652(一種更新的加密消息語法標(biāo)準(zhǔn)(CMS))建立,通常用于單點(diǎn)登錄。

        ● PKCS#8 1.2私鑰信息語法標(biāo)準(zhǔn),請參見RFC5958。用于攜帶私鑰證書密鑰對(加密或未加密)。

        ● PKCS#9 2.0選定的屬性類型[,請參見RFC2985。定義選定的屬性類型,以便在PKCS#6擴(kuò)展證書、PKCS#7數(shù)字簽名消息、PKCS8私鑰信息和PKCS10證書簽名請求中使用。

        ● PKCS#10 1.7認(rèn)證請求標(biāo)準(zhǔn),請參閱RFC2986。發(fā)送給認(rèn)證機(jī)構(gòu)以請求公鑰證書的消息格式,請參閱證書簽名請求。

        ● PKCS#11 2.40密碼令牌接口,也稱為“ Cryptoki”。定義密碼令牌通用接口的API(另請參閱硬件安全模塊)。常用于單點(diǎn)登錄,公共密鑰加密和磁盤加密[10]系統(tǒng)。 RSA Security已將PKCS11標(biāo)準(zhǔn)的進(jìn)一步開發(fā)移交給了OASIS PKCS 11技術(shù)委員會。

        ● PKCS#12 1.1個(gè)人信息交換語法標(biāo)準(zhǔn),請參閱RFC7292。定義一種文件格式,個(gè)人信息交換語法標(biāo)準(zhǔn)[11]見RFC 7292。定義一種文件格式,通常用于存儲私鑰和附帶的公鑰證書,并使用基于Password的對稱密鑰進(jìn)行保護(hù)。PFX是PKCS#12的前身。

        此容器格式可以包含多個(gè)嵌入式對象,例如多個(gè)證書。通常使用密碼進(jìn)行保護(hù)/加密??捎米鱆ava密鑰存儲的格式,并在Mozilla Firefox中建立客戶端身份驗(yàn)證證書,可供Apache Tomcat使用。

        簡單的說,PKCS#12可以包含證書(公鑰),也可以包含受密碼保護(hù)的私鑰

        ● PKCS#13 橢圓曲線密碼技術(shù)標(biāo)準(zhǔn)(已廢棄,唯一的參考是1998年的提案)

        ● PKCS#14 偽隨機(jī)數(shù)生成(已廢棄,沒有文檔)

        ● PKCS#15 1.1加密令牌信息格式標(biāo)準(zhǔn),定義了一個(gè)標(biāo)準(zhǔn),允許加密令牌的用戶向應(yīng)用程序標(biāo)識自己,而與應(yīng)用程序的Cryptoki實(shí)現(xiàn)(PKCS#11)或其他API無關(guān)。RSA放棄了該標(biāo)準(zhǔn)中與IC卡相關(guān)的部分,并改為ISO / IEC 7816-15。

       6)OpenSSL證書頒發(fā)機(jī)構(gòu)

        本指南演示如何使用OpenSSL命令行工具充當(dāng)您自己的證書頒發(fā)機(jī)構(gòu)(CA)。這在許多情況下都很有用,例如頒發(fā)服務(wù)器證書以保護(hù)intranet網(wǎng)站,或向客戶端頒發(fā)證書以允許客戶端向服務(wù)器進(jìn)行身份驗(yàn)證。

  •  6-1)簡介

      OpenSSL是一個(gè)免費(fèi)的開源加密庫,它提供了一些用于處理數(shù)字證書的命令行工具,其中一些工具(也就是命令)可以充當(dāng)證書頒發(fā)機(jī)構(gòu)。

        證書頒發(fā)機(jī)構(gòu)是為數(shù)字證書簽名的實(shí)體。許多網(wǎng)站需要讓其客戶知道連接是安全的,因此他們向國際證書頒發(fā)機(jī)構(gòu)(CA)支付費(fèi)用,以為其域簽署證書。

       在某些情況下,自己做自己CA(而不是向DigiCert這樣的CA付錢)更有意義,比如保護(hù)intranet網(wǎng)站的安全,或向客戶端頒發(fā)證書以允許客戶端向服務(wù)器進(jìn)行身份驗(yàn)證。

  •   6-2) 創(chuàng)建根對

        充當(dāng)證書頒發(fā)機(jī)構(gòu)意味著要處理密鑰對之中的私鑰和公鑰證書。

        我們要?jiǎng)?chuàng)建的第一個(gè)密鑰對就是根對。這包括根密鑰(ca.key.pem)和根證書(ca.cert.pem)。這個(gè)“根對”構(gòu)成了你的CA的身份。

        通常,根CA不會直接為服務(wù)器或客戶端證書簽名,根CA僅用于創(chuàng)建一個(gè)或多個(gè)中間CA,這些中間CA被根CA信任,并代表根CA簽署證書,這是最佳實(shí)踐,它允許根密鑰保持脫機(jī)狀態(tài)并盡可能減少使用的次數(shù),因?yàn)閷Ω娜魏瓮{都是災(zāi)難性的。

        注意:

        最佳實(shí)踐是在安全的環(huán)境中創(chuàng)建根對。理想情況下,該計(jì)算機(jī)應(yīng)該是完全加密并且空氣隔離(含義是沒有任何網(wǎng)絡(luò)接口的機(jī)器,即不能通過外部網(wǎng)絡(luò)連接),可以考慮卸載無線網(wǎng)卡,并用膠水塞滿以太網(wǎng)口。

  • 6-2-1)準(zhǔn)備目錄

mkdir /root/ca
創(chuàng)建目錄結(jié)構(gòu)。index.txt和serial文件充當(dāng)平面文件數(shù)據(jù)庫,以跟蹤已簽名的證書。
cd /root/ca
mkdir certs crl newcerts private
chmod 700 private
touch index.txt
echo 1000 > serial
  •   6-2-2)準(zhǔn)備配置文件

        您必須創(chuàng)建一個(gè)配置文件以供OpenSSL使用。

        將根CA配置文件從Appendix復(fù)制到/root/CA/openssl.cnf,其中的[ca]部分為必填項(xiàng),這里告訴OpenSSL使用[CA_default]部分中的選項(xiàng)。

[ca]
default_ca = CA_default
he [CA_default] section contains a range of defaults. Make sure you declare the directory you chose earlier(/root/ca).
[CA_default]部分包含一系列默認(rèn)值,其中的dir字段取值一定要是剛才選擇/root/ca:
 
[CA_defalut]
#目錄和文件位置
dir    = /root/ca
certs    = $dir/certs
crl_dir   = $dir/crl
new_certs_dir = $dir/newcerts
database   = $dir/index.txt
serial    = $dir/serial
RANDFILE   = $dir/private/.rand
 
# 根密鑰和根證書
private_key  = $dir/private/ca.key.pem
certificate  = $dir/certs/ca.cert.pem
 
# 證書吊銷列表
crlnumber  = $dir/crlnumber
crl    = $dir/crl/ca.crl.pem
crl_extension  = crl_ext
default_crl_days = 30
 
# HA-1已棄用,因此請改用SHA-2
defualt_md      = sha256
 
name_opt  = ca_default
cert_opt   = ca_default
default_days  = 375
preserve   = no
policy    = plicy_strict
 
我們將對所有根CA簽名應(yīng)用policy_strict,因?yàn)楦鵆A僅用于創(chuàng)建中間CA。
[ policy_strict]
# 根CA只對匹配的中間證書進(jìn)行簽名
# 請參閱“man ca”的策略格式部分。
countryName    = match
stateOrProvinceName  = match
organizationName   = match
organizationalUnitName  = optional
commonName    = supplied
emailAddress     = optional
如果值是“ match”,意為請求文件的該字段取值,必須與簽署時(shí)輸入的CA證書的對應(yīng)字段取值一模一樣;如果值是“supplied”,那么它必須存在。如果該值為“optional”,則可選(可留空);所以我們將對所有中間CA簽名應(yīng)用policy_loose而不是policy_strict,因?yàn)橹虚gCA正在對可能來自各種第三方的服務(wù)器和客戶端證書進(jìn)行簽名。
[ policy_loose ]
# 允許中間CA簽署更多種證書
# 請參見`ca`手冊頁的“策略格式”部分
countryName    = optional
stateOrProvinceName  = optional
localityName     = optional
organizationName   = optional
organizationalUnitName  = optional
commonName    = supplied
emailAddress     = optional
 
在創(chuàng)建證書或證書簽名請求時(shí),將應(yīng)用[req]部分中的選項(xiàng)。
[ req ]
#req”工具的選項(xiàng)(“man req”)
default_bits     = 2048
distinguished_name   = req_distinguished_name
string_mask     = utf8only
 
# HA-1已棄用,因此請改用SHA-2
default_md     = sha256
 
# 使用-x509選項(xiàng)時(shí)要添加的擴(kuò)展項(xiàng)。
x509_extensions    = v3_ca
 
[req_distinguished_name]聲明證書簽名請求中通常所需的信息,您可以選擇指定一些默認(rèn)值。
[ req_distinguished_name ]
# 參看<https://en.wikipedia.org/wiki/Certificate_signing_request>.
countryName    = Country Name (2 letter code)
stateOrProvinceName  = State or Province Name
localityName     = Locality Name
0.organizationName   = Organization Name
organizationalUnitName  = Organizational Unit Name
commonName    = Common Name
emailAddress     = Email Address
 
# Optionally, specify some defaults.
countryName_default  = GB
stateOrProvinceName_default = England
localityName_default   =
0.organizationName_default = Alice Ltd
#organizationalUnitName_default =
#emailAddress_default    =
接下來的幾個(gè)部分是在簽署證書時(shí)可以應(yīng)用的擴(kuò)展項(xiàng),例如 -extensions v3_ca命令行參數(shù)將應(yīng)用[v3_ca]中設(shè)置的選項(xiàng)。
我們將在創(chuàng)建根證書時(shí)應(yīng)用[v3_ca]擴(kuò)展:
[ v3_ca ]
#典型的CA擴(kuò)展 (`查看x509v3_config手冊`).
subjectKeyIdentifier  = hash
autorityKeyIdentifier  = keyid:always,issuer
basicConstraints   = critical, CA:true
keyUsage     = critical, digitalSignature, cRLsign, keyCertSign
 
我們將在創(chuàng)建中間證書時(shí)應(yīng)用v3_ca_intermediate extension(中間擴(kuò)展項(xiàng)),pathlen:0保證在中間CA下面不能有其他證書頒發(fā)機(jī)構(gòu):
[ v3_intermediate_ca ]
# 典型的中間CA的擴(kuò)展 (`查看x509v3_config手冊`).
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
 
我們將在簽署server_cert(服務(wù)器證書,例如用于web服務(wù)器的證書)時(shí)應(yīng)用服務(wù)器證書擴(kuò)展:
[ server_cert ]
# Extensions for server certificates (`查看x509v3_config手冊`).
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
 
創(chuàng)建證書吊銷列表時(shí),將自動應(yīng)用crl_ext擴(kuò)展項(xiàng):
[ crl_ext ]
# CRL的擴(kuò)展(`查看x509v3_config手冊`).
authorityKeyIdentifier=keyid:always
 
在簽署在線證書狀態(tài)協(xié)議(OCSP)證書時(shí),我們將使用ocsp擴(kuò)展項(xiàng):
[ ocsp ]
# OCSP簽名證書的擴(kuò)展項(xiàng)(`man ocsp`).
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning
  •  6-2-3)創(chuàng)建根私鑰

        創(chuàng)建根私鑰(ca.key.pem)并確保其絕對安全,因?yàn)槿魏螕碛懈借€的人都可以頒發(fā)“可信證書”,建議使用AES 256算法和復(fù)雜的強(qiáng)密碼加密根私鑰。

        注意:出于安全考慮,對所有根CA和中間CA使用4096位私鑰。

cd /root/ca
openssl genrsa -aes256 -out private/ca.key.pem 4096
 
Enter pass phrase for ca.key.pem: secretpassword
Verifying - Enter pass phrase for ca.key.pem: secretpassword
 
chmod 400 private/ca.key.pem

  •  6-2-4)創(chuàng)建根證書

        使用根密鑰(ca.key.pem)創(chuàng)建根證書(ca.cert.pem),給根證書一個(gè)長的有效期,比如20年。根證書過期后,由根CA簽名的所有證書都將無效。

        警告:無論何時(shí)使用req工具,都必須指定要與-config選項(xiàng)一起使用的配置文件,否則OpenSSL將默認(rèn)為/etc/pki/tls/OpenSSL.cnf

cd /root/ca
openssl req -config openssl.cnf -key private/ca.key.pem -new -x509 -days 7300 -sha256 -extensions v3_ca -out certs/ca.cert.pem
 
Enter pass phrase for ca.key.pem: secretpassword
You are about to be asked to enter information that will be incorporated
into your certificate request.
-----
Country Name (2 letter code) [XX]:GB
State or Province Name []:England
Locality Name []:
Organization Name []:Alice Ltd
Organizational Unit Name []:Alice Ltd Certificate Authority
Common Name []:Alice Ltd Root CA
Email Address []:

  •  6-2-5)驗(yàn)證根證書

        openssl x509 -noout -text -in certs/ca.cert.pem

        這行命令的輸出包括:

        ● 使用的簽名算法

        ● 證書生效期

        ● 公鑰位長度

        ● 頒發(fā)者,即簽署證書的實(shí)體

        ● 主體,指的是證書本身

        由于證書是自簽名的,因此頒發(fā)者和主題相同。

        請注意,所有根證書都是自簽名的。

注:以下的黃色漢字是注釋,并非證書的組成部分
Signature Algorithm: sha256WithRSAEncryption  # 使用的簽名算法
    Issuer: C=GB, ST=England, O=Alice Ltd, OU=Alice Ltd Certificate Authority, CN=Alice Ltd Root CA  # 頒發(fā)者
    Validity   # 證書有效期
        Not Before: Apr 11 12:22:58 2015 GMT
        Not After : Apr  6 12:22:58 2035 GMT
    Subject: C=GB, ST=England, O=Alice Ltd, OU=Alice Ltd Certificate Authority, CN=Alice Ltd Root CA  # 主體
    Subject Public Key Info:
        Public Key Algorithm: rsaEncryption
            Public-Key: (4096 bit)   # 公鑰位長度

  •  6-3)創(chuàng)建中間證書密鑰對

        中間證書授權(quán)(CA)是可以代表根CA簽署證書的實(shí)體,根CA簽署中間證書,這就形成了信任鏈。

使用中間證書的目的主要是:根密鑰可以保持脫機(jī)狀態(tài),并盡可能不頻繁地使用。如果中間密鑰被泄露,根CA可以撤銷中間證書并創(chuàng)建新的中間密鑰對。

  •  6-3-1)準(zhǔn)備目錄

        根CA文件保存在/ root / ca中,選擇其他目錄(/root/ca/intermediate)來存儲中間CA文件。

cd /root/ca/intermediate
mkdir certs crl csr newcerts private
chmod 700 private
touch index.txt
echo 1000 > serial
將crlnumber文件添加到中間CA目錄樹,crlnumber用于跟蹤證書吊銷列表:
echo 1000 > /root/ca/intermediate/crlnumber
將中間CA配置文件從Appendix復(fù)制到/root/CA/intermediate/openssl.cnf。注意與根CA配置文件相比,以下五個(gè)選項(xiàng)變化了:
[ CA_default ]
dir    = /root/ca/intermediate
private_key  = $dir/private/intermediate.key.pem
certificate  = $dir/certs/intermediate.cert.pem
crl    = $dir/crl/intermediate.crl.pem
policy    = policy_loose
  •  6-3-2) 創(chuàng)建中間密鑰

        創(chuàng)建中間密鑰(intermediate.key.pem),并使用AES 256算法和復(fù)雜的強(qiáng)密碼將其加密保護(hù)。

# cd /root/ca
# openssl genrsa -aes256 -out intermediate/private/intermediate.key.pem 4096
 
Enter pass phrase for intermediate.key.pem: secretpassword
Verifying - Enter pass phrase for intermediate.key.pem: secretpassword
 
# chmod 400 intermediate/private/intermediate.key.pem
  •  6-3-3) 創(chuàng)建中間證書

        使用中間證書創(chuàng)建證書簽名請求(CSR),詳細(xì)信息通常應(yīng)與根CA相同。但 Common Name(證書持有者通用名/FQDN)必須不同:

        警告:請確保命令行指定的中間 CA 配置文件存在(intermediate/openssl.cnf)。

# cd /root/ca
# openssl req -config intermediate/openssl.cnf -new -sha256 -key intermediate/private/intermediate.key.pem -out intermediate/csr/intermediate.csr.pem
 
Enter pass phrase for intermediate.key.pem: secretpassword
You are about to be asked to enter information that will be incorporated
into your certificate request.
-----
Country Name (2 letter code) [XX]:GB
State or Province Name []:England
Locality Name []:
Organization Name []:Alice Ltd
Organizational Unit Name []:Alice Ltd Certificate Authority
Common Name []:Alice Ltd Intermediate CA
Email Address []:

        要?jiǎng)?chuàng)建中間證書,請使用帶有v3_intermediate_CA擴(kuò)展項(xiàng)的根CA對中間CSR進(jìn)行簽名。中間證書的有效期應(yīng)短于根證書。十年是合理的。

        警告:指定根CA配置文件 /root/ca/openssl.cnf。

# cd /root/ca
# openssl ca -config openssl.cnf -extensions v3_intermediate_ca -days 3650 -notext -md sha256 -in intermediate/csr/intermediate.csr.pem -out intermediate/certs/intermediate.cert.pem
Enter pass phrase for ca.key.pem: secretpassword
Sign the certificate? [y/n]: y
# chmod 444 intermediate/certs/intermediate.cert.pem
index.txt文件是OpenSSL CA工具存儲證書數(shù)據(jù)庫的位置,請勿手動刪除或編輯此文件。現(xiàn)在它應(yīng)該包含剛才創(chuàng)建的中間證書:
V 250408122707Z 1000 unknown ... /CN=Alice Ltd Intermediate CA
  •     6-3-4) 驗(yàn)證中間證書

        正如我們對根證書所做的那樣,請檢查中間證書的詳細(xì)信息是否正確:

        # openssl x509 -noout -text -in intermediate/certs/intermediate.cert.pem

        intermediate.cert.pem: OK

  •   6-3-5) 創(chuàng)建證書鏈文件

        當(dāng)應(yīng)用程序(如web瀏覽器)嘗試驗(yàn)證由中間CA簽名的證書時(shí),它必須對照根證書驗(yàn)證中間證書。要完成信任鏈,請創(chuàng)建CA證書鏈以呈現(xiàn)給應(yīng)用程序。

        要?jiǎng)?chuàng)建CA證書鏈,請將中間證書和根證書連接在一起,我們稍后將使用此文件來驗(yàn)證由中間CA簽名的證書。

# cat intermediate/certs/intermediate.cert.pem certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem
# chmod 444 intermediate/certs/ca-chain.cert.pem

        注意:證書鏈文件必須包含根證書,因?yàn)樾枰?/span>客戶端應(yīng)用程序找到它。更好的選擇(尤其是在管理Intranet的情況下)是在需要連接的每個(gè)客戶端上安裝根證書在這種情況下,證書鏈文件僅需要包含您的中間證書。

  • 6-4) 簽署服務(wù)器和客戶端證書

      我們將使用中間 CA 簽署證書。您可以在各種情況下使用這些證書,例如保護(hù)與 Web 服務(wù)器的連接或?qū)B接到服務(wù)器的客戶端進(jìn)行身份驗(yàn)證。

        注意:以下步驟是CA替申請者創(chuàng)建私鑰和簽名請求(CSR),但申請者從安全角度考慮也可以自己創(chuàng)建私鑰和請求,其中的私鑰妥善保存于本地,把CSR交給CA,CA則還給它一個(gè)簽名的證書。在這種情況下,跳過 genrsa 和 req 命令。

  • 6-4-1) 創(chuàng)建私鑰

      我們的根密鑰對和中間密鑰對是4096位,服務(wù)器證書和客戶端證書通常在一年后過期,因此我們可以安全地使用2048位。

      注意:盡管4096位比2048位更安全,但它會減慢TLS握手速度并顯著增加握手期間的處理器負(fù)載。因此,大多數(shù)網(wǎng)站使用2048位的密鑰對。

      譯者注:2048位已經(jīng)不再安全,建議使用4096或8192位。

      如果要?jiǎng)?chuàng)建用于網(wǎng)絡(luò)服務(wù)器的密鑰對,每次重啟該服務(wù)器時(shí)都需要輸保護(hù)密碼,如果嫌麻煩可以不使用-aes256選項(xiàng)以創(chuàng)建沒有密碼的私鑰。

# cd /root/ca
# openssl genrsa -aes256 -out intermediate/private/www.example.com.key.pem 2048
# chmod 400 intermediate/private/www.example.com.key.pem
  • 6-4-2) 創(chuàng)建證書

      使用私鑰創(chuàng)建證書簽名請求(CSR),并且CSR的詳細(xì)信息無需與中間CA相匹配。對于服務(wù)器證書,Common Name(公用名)必須是FQDN(完全限定的域名,例如,www.example.com),而對于客戶端證書,Common Name可以是任何唯一標(biāo)識符(例如電子郵件地址),請注意,客戶端證書的Common Name與根證書或中間證書的Common Name不同。

# cd /root/ca
#openssl req -config intermediate/openssl.cnf -key intermediate/private/www.example.com.key.pem -new -sha256 -out intermediate/csr/www.example.com.csr.pem
 
Enter pass phrase for www.example.com.key.pem: secretpassword
You are about to be asked to enter information that will be incorporated
into your certificate request.
-----
Country Name (2 letter code) [XX]:US
State or Province Name []:California
Locality Name []:Mountain View
Organization Name []:Alice Ltd
Organizational Unit Name []:Alice Ltd Web Services
Common Name []:www.example.com
Email Address []:

        要?jiǎng)?chuàng)建證書,請使用中間CA對CSR進(jìn)行簽名。如果要在服務(wù)器上使用證書,請使用 server_cert擴(kuò)展項(xiàng);如果證書將用于用戶身份驗(yàn)證,請使用usr_cert擴(kuò)展項(xiàng)。證書的有效期通常為一年,不過為了方便起見,CA通常會多給幾天時(shí)間。

# cd /root/ca
#openssl ca -config intermediate/openssl.cnf -extensions server_cert -days 375 -notext -md sha256 -in intermediate/csr/www.example.com.csr.pem -out intermediate/certs/www.example.com.cert.pem
# chmod 444 intermediate/certs/www.example.com.cert.pem
 intermediate/index.txt應(yīng)該出現(xiàn)包含該證書的行:
V 160420124233Z 1000 unknown ... /CN=www.example.com
  • 6-4-3) 驗(yàn)證證書

    # openssl x509 -noout -text -in intermediate/certs/www.example.com.cert.pem

Issuer(頒發(fā)者)是中間CA,Subject(主題)是指證書本身:
Signature Algorithm: sha256WithRSAEncryption
    Issuer: C=GB, ST=England,O=Alice Ltd, OU=Alice Ltd Certificate Authority,CN=Alice Ltd Intermediate CA
    Validity
        Not Before: Apr 11 12:42:33 2015 GMT
        Not After : Apr 20 12:42:33 2016 GMT
    Subject: C=US, ST=California, L=Mountain View,O=Alice Ltd, OU=Alice Ltd Web Services,CN=www.example.com
    Subject Public Key Info:
        Public Key Algorithm: rsaEncryption
            Public-Key: (2048 bit)
輸出還將顯示X509v3擴(kuò)展。創(chuàng)建證書時(shí),您使用了server_cert或usr_cert擴(kuò)展項(xiàng),相應(yīng)配置部分中的選項(xiàng)將反映在輸出中:
X509v3 extensions:
    X509v3 Basic Constraints:
        CA:FALSE
    Netscape Cert Type:
        SSL Server
    Netscape Comment:
        OpenSSL Generated Server Certificate
    X509v3 Subject Key Identifier:
        B1:B8:88:48:64:B7:45:52:21:CC:35:37:9E:24:50:EE:AD:58:02:B5
    X509v3 Authority Key Identifier:
        keyid:69:E8:EC:54:7F:25:23:60:E5:B6:E7:72:61:F1:D4:B9:21:D4:45:E9
        DirName:/C=GB/ST=England/O=Alice Ltd/OU=Alice Ltd Certificate Authority/CN=Alice Ltd Root CA
        serial:10:00
 
    X509v3 Key Usage: critical
        Digital Signature, Key Encipherment
    X509v3 Extended Key Usage:
        TLS Web Server Authentication
使用我們先前創(chuàng)建的CA證書鏈文件(ca-chain.cert.pem)來驗(yàn)證新證書是否具有有效的信任鏈。
# openssl verify -CAfile intermediate/certs/ca-chain.cert.pem intermediate/certs/www.example.com.cert.pem
 
www.example.com.cert.pem: OK
  •  6-4-4) 部署證書

        現(xiàn)在,您可以將新證書部署到服務(wù)器,也可以將證書分發(fā)給客戶端。部署到服務(wù)器應(yīng)用程序(例如Apache)時(shí),確保以下文件可用:

ca-chain.cert.com

www.example.com.key.pem

www.example.com.cert.pem

        如果您是從第三方獲得CSR,那就無需使用它的私鑰,因此只需將證書鏈文件(ca-chain.cert.pem)和證書(www.example.com.cert.pem)發(fā)回給它們。

  • 6-5) 證書吊銷列表

       證書吊銷列表 (CRL,見RFC5280) 提供已吊銷的證書的列表。客戶端應(yīng)用程序(如 Web 瀏覽器)可以使用 CRL 檢查服務(wù)器的真實(shí)性。服務(wù)器應(yīng)用程序(如Apache或OpenV.P.N)可以使用 CRL 拒絕訪問不再受信任的客戶端。

       在公共可訪問的位置(例如http://example.com/intermediate.crl.pem)發(fā)布 CRL,第三方可以從此位置獲取 CRL,以檢查他們依賴的證書是否已被吊銷。

        注意:一些應(yīng)用程序供應(yīng)商已棄用CRL,而是使用聯(lián)機(jī)證書狀態(tài)協(xié)議(OCSP,百度RFC2560,有中文版)。

X.509證書的介紹和使用

  • 6-5-1) 準(zhǔn)備配置文件

      證書頒發(fā)機(jī)構(gòu)在簽署證書時(shí),通常會將CRL位置編碼到證書中,將crlDistributionPoints添加到適當(dāng)?shù)牟糠郑瑢τ诒纠?,將其添加?/span>[server_cert]部分。

[ server_cert ]

# ... snipped ...

crlDistributionPoints = URI:http://example.com/intermediate.crl.pem

  • 6-5-2) 創(chuàng)建CRL

    # cd /root/ca

    # openssl ca -config intermediate/openssl.cnf -gencrl -out intermediate/crl/intermediate.crl.pem

    注意:ca手冊頁的CRL OPTIONS部分包含有關(guān)如何創(chuàng)建CRL的更多信息。

    您可以使用 crl 工具檢查 CRL 的內(nèi)容:

    openssl crl -in intermediate/crl/intermediate.crl.pem -noout -text

    尚未吊銷任何證書,因此輸出將顯示“無吊銷證書”

    您應(yīng)該定期重新創(chuàng)建CRL。默認(rèn)情況下,CRL在30天后過期。這由[CA_default]部分的default_crl_days選項(xiàng)控制。

  •  6-5-3) 吊銷證書

        讓我們看一個(gè)例子。愛麗絲(Alice)正在運(yùn)行Apache服務(wù)器,并有一個(gè)私人文件夾,上面放著可愛的小貓圖片。 愛麗絲想授予她的朋友鮑勃(Bob)訪問此收藏的權(quán)限。

        ①Bob創(chuàng)建一個(gè)私鑰和證書簽名請求(CSR):

cd /home/bob
openssl genrsa -out bob@example.com.key.pem 2048
openssl req -new -key bob@example.com.key.pem -out bob@example.com.csr.pem
 
You are about to be asked to enter information that will be incorporated
into your certificate request.
-----
Country Name [XX]:US
State or Province Name []:California
Locality Name []:San Francisco
Organization Name []:Bob Ltd
Organizational Unit Name []:
Common Name []:bob@example.com
Email Address []:

        ②Bob將自己的CSR發(fā)送給愛麗絲,愛麗絲隨后對其進(jìn)行簽名:

cd /root/ca
openssl ca -config intermediate/openssl.cnf -extension usr_cert -notext -md sha256 -in intermediate/csr/bob@example.com.csr.pem     -out intermediate/certs/bob@example.com.cert.pem

        ③Alice 驗(yàn)證證書是否有效:

openssl verify -CAfile intermediate/certs/ca-chain.cert.pem intermediate/certs/bob@example.com.cert.pem
 
bob@example.com.cert.pem: OK

        現(xiàn)在index.txt文件應(yīng)包含一個(gè)新條目:

        V 160420124740Z 1001 unknown ... /CN=bob@example.com

        Alice向Bob發(fā)送簽名證書,Bob將證書安裝在自己的網(wǎng)絡(luò)瀏覽器中,現(xiàn)在可以訪問愛麗絲的小貓圖片,歡呼吧!

        ④但可悲的是,事實(shí)證明Bob行為不端,Bob將Alice的小貓圖片發(fā)布到了《***新聞》上,聲稱是他自己的照片并廣受歡迎,愛麗絲發(fā)現(xiàn)了,需要立即撤銷了他的訪問權(quán)限:

cd /root/ca
openssl ca -config intermediate/openssl.cnf -revoke intermediate/certs/bob@example.com.cert.pem
 
Enter pass phrase for intermediate.key.pem: secretpassword
Revoking Certificate 1001.
Data Base Updated

        現(xiàn)在index.txt中與Bob的證書相對應(yīng)的行以字符R開頭,這表示證書已被吊銷:

        R 160420124740Z 150411125310Z 1001 unknown ... /CN=bob@example.com

        撤銷Bob的證書后,Alice必須重新創(chuàng)建CRL。

  •  6-5-4) 服務(wù)器端使用CRL

        對于客戶端證書,通常是服務(wù)器端應(yīng)用程序(如Apache)進(jìn)行驗(yàn)證。此應(yīng)用程序需要具有對CRL的本地訪問權(quán)限。

        對于Alice,她可以將SSLCARevocationPath指令添加到Apache配置中,然后將CRL復(fù)制到她的Web服務(wù)器上,下次Bob連接到Web服務(wù)器時(shí),Apache將根據(jù)CRL檢查其客戶端證書并拒絕訪問。

        同樣,OpenV.P.N具有crl-verfiy指令,因此它可以阻止證書被吊銷的客戶端。

  •  6-5-5) 客戶端服使用CRL

        對于服務(wù)器證書,通常是服務(wù)器端應(yīng)用程序(如web瀏覽器)(譯者注:不知是否是英文原文的筆誤,Web瀏覽器應(yīng)該是客戶端程序)進(jìn)行驗(yàn)證。此應(yīng)用程序必須具有對CRL的刪除訪問權(quán)限。

        如果使用包含crlDistributionPoints的擴(kuò)展項(xiàng)簽署了證書,則客戶端應(yīng)用程序可以讀取此信息并從指定位置獲取CRL。

        CRL分發(fā)點(diǎn)在證書X509v3詳細(xì)信息中可見。

opnessl x509 -in cute-kitten-pictures.example.com.cert.pem -noout -text
X509v3 CRL Distribution Points:
        Full Name:
          URI:http://example.com/intermediate.crl.pem
  •  6-6) 在線證書狀態(tài)協(xié)議OCSP

        百度RFC2560,有中文版。

        聯(lián)機(jī)證書狀態(tài)協(xié)議(OCSP)是證書吊銷列表(CRL)的替代方案。與CRL類似,OCSP允許請求方(如web瀏覽器)確定證書的吊銷狀態(tài)。

        當(dāng)CA簽署證書時(shí),它們通常會在證書中包含OCSP服務(wù)器地址。這在功能上與用于CRL的crlDistributionPoints相似。

        例如,當(dāng)服務(wù)器向web瀏覽器提供了證書,瀏覽器將向證書中指定的OCSP服務(wù)器地址發(fā)送查詢,OCSP響應(yīng)者在此地址偵聽查詢,并以證書的吊銷狀態(tài)做出響應(yīng)。

        注:建議在可能的情況下使用OCSP,實(shí)際上您只需要OCSP來獲得網(wǎng)站證書,因?yàn)橐恍﹚eb瀏覽器已不再支持CRL。

  •  6-6-1) 準(zhǔn)備配置文件

        要使用OCSP,CA必須將OCSP服務(wù)器位置編碼到它所簽署的證書中。在適當(dāng)?shù)牟糠种惺褂胊uthorityInfoAccess選項(xiàng),在本例中指的是[ server_cert ]部分。

[ server_cert ]

# ... snipped ...

authorityInfoAccess = OCSP;URI:http://ocsp.example.com

  •  6-6-2) 創(chuàng)建OCSP密鑰對

        OCSP響應(yīng)程序需要一個(gè)密鑰對,用來對發(fā)回給請求方的響應(yīng)進(jìn)行簽名。OCSP密鑰對必須由當(dāng)前正在檢查的證書的同一CA簽署。

        創(chuàng)建私鑰并使用 AES-256 對其進(jìn)行加密保護(hù):

# cd /root/ca
# openssl genrsa -aes256 -out intermediate/private/ocsp.example.com.key.pem 4096

        創(chuàng)建證書簽名請求(CSR),詳細(xì)信息通常應(yīng)與簽名CA的詳細(xì)信息匹配。但是,公用名必須是完全限定的域名:

# cd /root/ca
# openssl req -config intermediate/openssl.cnf -new -sha256 -key intermediate/private/ocsp.example.com.key.pem -out intermediate/csr/ocsp.example.com.csr.pem
 
Enter pass phrase for intermediate.key.pem: secretpassword
You are about to be asked to enter information that will be incorporated
into your certificate request.
-----
Country Name (2 letter code) [XX]:GB
State or Province Name []:England
Locality Name []:
Organization Name []:Alice Ltd
Organizational Unit Name []:Alice Ltd Certificate Authority
Common Name []:ocsp.example.com
Email Address []:
使用中間 CA 簽署 CSR:
# openssl ca -config intermediate/openssl.cnf -extensions ocsp -days 375 -notext -md sha256 -in intermediate/csr/ocsp.example.com.csr.pem -out intermediate/certs/ocsp.example.com.cert.pem
驗(yàn)證證書具有正確的X509v3擴(kuò)展:
# openssl x509 -noout -text \
      -in intermediate/certs/ocsp.example.com.cert.pem
 
    X509v3 Key Usage: critical
        Digital Signature
    X509v3 Extended Key Usage: critical
        OCSP Signing
  •  6-6-3) 吊銷證書

        OpenSSL ocsp工具可以充當(dāng)OCSP響應(yīng)程序,但僅用于測試。存在可用于生產(chǎn)的OCSP響應(yīng)程序,但是這些響應(yīng)程序不在本指南的范圍內(nèi)。

        創(chuàng)建要測試的服務(wù)器證書:

# cd /root/ca
# openssl genrsa -out intermediate/private/test.example.com.key.pem 2048
# openssl req -config intermediate/openssl.cnf -key intermediate/private/test.example.com.key.pem -new -sha256 -out intermediate/csr/test.example.com.csr.pem
# openssl ca -config intermediate/openssl.cnf -extensions server_cert -days 375 -notext -md sha256 -in intermediate/csr/test.example.com.csr.pem -out intermediate/certs/test.example.com.cert.pem

        在本地主機(jī)上運(yùn)行OCSP響應(yīng)程序。OCSP響應(yīng)程序不會將吊銷狀態(tài)存儲在單獨(dú)的CRL文件中,而是直接讀取index.txt。響應(yīng)使用OCSP私鑰對簽名(使用-rkey和-rsigner選項(xiàng)):

openssl ocsp -port 127.0.0.1:2560 -text -sha256 -index intermediate/index.txt -CA intermediate/certs/ca-chain.cert.pem -rkey intermediate/private/ocsp.example.com.key.pem -rsigner intermediate/certs/ocsp.example.com.cert.pem -nrequest 1

        另一個(gè)終端向OCSP響應(yīng)程序發(fā)送查詢。-cert選項(xiàng)指定要查詢的證書:

# openssl ocsp -CAfile intermediate/certs/ca-chain.cert.pem -url http://127.0.0.1:2560 -resp_text -issuer intermediate/certs/intermediate.cert.pem -cert intermediate/certs/test.example.com.cert.pem

        輸出的開頭顯示:

        ● 是否收到成功響應(yīng)(OCSP 響應(yīng)狀態(tài):OCSP Response Status)

        ● 然后是響應(yīng)者的身份(應(yīng)答器 ID:Responder Id)

        ● 證書的吊銷狀態(tài)(證書狀態(tài):Cert Status)

OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: ... CN = ocsp.example.com
    Produced At: Apr 11 12:59:51 2015 GMT
    Responses:
    Certificate ID:
      Hash Algorithm: sha1
      Issuer Name Hash: E35979B6D0A973EBE8AEDED75D8C27D67D2A0334
      Issuer Key Hash: 69E8EC547F252360E5B6E77261F1D4B921D445E9
      Serial Number: 1003
    Cert Status: good
    This Update: Apr 11 12:59:51 2015 GMT

        吊銷證書:

# openssl ca -config intermediate/openssl.cnf -revoke intermediate/certs/test.example.com.cert.pem
 
Enter pass phrase for intermediate.key.pem: secretpassword
Revoking Certificate 1003.
Data Base Updated

        如前所述,本機(jī)運(yùn)行OCSP響應(yīng)程序,另一個(gè)終端發(fā)送查詢。這次的輸出顯示的證書狀態(tài)已經(jīng)改變:已吊銷和吊銷時(shí)間:

OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: ... CN = ocsp.example.com
    Produced At: Apr 11 13:03:00 2015 GMT
    Responses:
    Certificate ID:
      Hash Algorithm: sha1
      Issuer Name Hash: E35979B6D0A973EBE8AEDED75D8C27D67D2A0334
      Issuer Key Hash: 69E8EC547F252360E5B6E77261F1D4B921D445E9
      Serial Number: 1003
    Cert Status: revoked
    Revocation Time: Apr 11 13:01:09 2015 GMT
    This Update: Apr 11 13:03:00 2015 GMT

     6-7) 附錄

  • 6-7-1) 根CA配置文件

# OpenSSL root CA 配置文件。
# Copy to `/root/ca/openssl.cnf`.
 
[ ca ]
# `man ca`
default_ca = CA_default
 
[ CA_default ]
# 目錄和文件位置。
dir    = /root/ca
certs    = $dir/certs
crl_dir   = $dir/crl
new_certs_dir = $dir/newcerts
database   = $dir/index.txt
serial    = $dir/serial
RANDFILE  = $dir/private/.rand
 
# 根私鑰和根證書。
private_key  = $dir/private/ca.key.pem
certificate  = $dir/certs/ca.cert.pem
 
# 用于證書吊銷列表。
crlnumber  = $dir/crlnumber
crl    = $dir/crl/ca.crl.pem
crl_extensions = crl_ext
default_crl_days = 30
 
# 不推薦使用SHA-1,因此請改用SHA-2。
default_md  = sha256
name_opt  = ca_default
cert_opt   = ca_default
default_days  = 375
preserve   = no
policy    = policy_strict
 
[ policy_strict ]
# 根CA只對match(匹配)的中間證書進(jìn)行簽名。
# 請參閱`man ca`的POLICY FORMAT部分。
countryName    = match
stateOrProvinceName  = match
organizationName   = match
organizationalUnitName  = optional
commonName    = supplied
emailAddress     = optional
 
[ policy_loose ]
# 允許中間CA簽署更多種類的證書。
# 請參閱“ca”手冊頁的“策略格式”部分。
countryName    = optional
stateOrProvinceName  = optional
localityName     = optional
organizationName   = optional
organizationalUnitName  = optional
commonName    = supplied
emailAddress     = optional
 
[ req ]
# `req` 工具選項(xiàng) (`man req`).
default_bits    = 2048
distinguished_name  = req_distinguished_name
string_mask    = utf8only
 
# 不推薦使用SHA-1,請改用SHA-2。
default_md          = sha256
 
# 使用 -x509選項(xiàng)時(shí)要添加的擴(kuò)展項(xiàng)。
x509_extensions   = v3_ca
 
[ req_distinguished_name ]
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
countryName    = Country Name (2 letter code)
stateOrProvinceName  = State or Province Name
localityName     = Locality Name
0.organizationName   = Organization Name
organizationalUnitName  = Organizational Unit Name
commonName    = Common Name
emailAddress     = Email Address
 
#指定一些默認(rèn)值(可選)。
countryName_default    = GB
stateOrProvinceName_default  = England
localityName_default    =
0.organizationName_default  = Alice Ltd
organizationalUnitName_default =
emailAddress_default    =
 
[ v3_ca ]
# 典型CA的擴(kuò)展(`man x509v3_config`)。
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
 
[ v3_intermediate_ca ]
#典型中間CA的擴(kuò)展(`man x509v3_config`)。
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
 
[ usr_cert ]
# 客戶端證書的擴(kuò)展項(xiàng)(`man x509v3_config`)。
basicConstraints = CA:FALSE
nsCertType = client, email
nsComment = "OpenSSL Generated Client Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection
 
[ server_cert ]
# 服務(wù)器證書的擴(kuò)展項(xiàng) (`man x509v3_config`).
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
 
[ crl_ext ]
# CRL擴(kuò)展項(xiàng)(`man x509v3_config`).
authorityKeyIdentifier=keyid:always
 
[ ocsp ]
# OCSP簽名證書的擴(kuò)展項(xiàng) (`man ocsp`).
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning

6-7-2) 中間CA配置文件


# OpenSSL中間CA配置文件。
# Copy to `/root/ca/intermediate/openssl.cnf`.
 
[ ca ]
# `man ca`
default_ca = CA_default
 
[ CA_default ]
# 目錄和文件位置。
dir = /root/ca/intermediate
certs = $dir/certs
crl_dir = $dir/crl
new_certs_dir = $dir/newcerts
database = $dir/index.txt
serial = $dir/serial
RANDFILE = $dir/private/.rand
 
# 根私鑰和根證書。
private_key = $dir/private/intermediate.key.pem
certificate = $dir/certs/intermediate.cert.pem
 
# 用于證書吊銷列表。
crlnumber = $dir/crlnumber
crl = $dir/crl/intermediate.crl.pem
crl_extensions = crl_ext
default_crl_days = 30
 
# 不推薦使用SHA-1,請改用SHA-2。
default_md = sha256
name_opt = ca_default
cert_opt = ca_default
default_days = 375
preserve = no
policy = policy_loose
 
[ policy_strict ]
# 根CA只對match(匹配)的中間證書進(jìn)行簽名。
# 請參閱`man ca`的POLICY FORMAT部分。
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
 
[ policy_loose ]
# 允許中間CA簽署更多種類的證書。
# 請參閱“ca”手冊頁的“策略格式”部分。
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
 
[ req ]
# `req` 工具選項(xiàng) (`man req`)。
default_bits = 2048
distinguished_name = req_distinguished_name
string_mask = utf8only
 
# 不推薦使用SHA-1,請改用SHA-2。
default_md = sha256
 
# 使用 -x509選項(xiàng)時(shí)要添加的擴(kuò)展項(xiàng)。
x509_extensions = v3_ca
 
[ req_distinguished_name ]
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name
localityName = Locality Name
0.organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
emailAddress = Email Address
 
# 指定一些默認(rèn)值(可選)。
countryName_default = GB
stateOrProvinceName_default = England
localityName_default =
0.organizationName_default = Alice Ltd
organizationalUnitName_default =
emailAddress_default =
 
[ v3_ca ]
# 典型CA的擴(kuò)展(`man x509v3_config`)。
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
 
[ v3_intermediate_ca ]
#典型中間CA的擴(kuò)展(`man x509v3_config`)。
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
 
[ usr_cert ]
# 客戶端證書的擴(kuò)展項(xiàng)(`man x509v3_config`)。
basicConstraints = CA:FALSE
nsCertType = client, email
nsComment = "OpenSSL Generated Client Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection
 
[ server_cert ]
# 服務(wù)器證書的擴(kuò)展項(xiàng) (`man x509v3_config`)。
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
 
[ crl_ext ]
# CRL擴(kuò)展項(xiàng)(`man x509v3_config`)。
authorityKeyIdentifier=keyid:always
 
[ ocsp ]
# OCSP簽名證書的擴(kuò)展項(xiàng) (`man ocsp`)
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning

看完上述內(nèi)容,你們對X.509證書有進(jìn)一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI