真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

X.509證書的介紹和使用

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

目前創(chuàng)新互聯(lián)建站已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、廣西網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

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)識(shí)(主機(jī)名、組織或個(gè)人),并由證書頒發(fā)機(jī)構(gòu)(CA)簽名(或自簽名)。對(duì)于一份經(jīng)由可信的證書簽發(fā)機(jī)構(gòu)簽名(或者可以通過其它方式驗(yàn)證)的證書,證書的擁有者就可以用證書及相應(yīng)的私鑰來創(chuàng)建安全的通信,以及對(duì)文檔進(jìn)行數(shù)字簽名。

  • 歷史和用法

X.509最早與X.500一起發(fā)布于1988年7月3日,它假定頒發(fā)證書的證書頒發(fā)機(jī)構(gòu)(CA)具有嚴(yán)格的層次結(jié)構(gòu)。這與Web信任模型(如PGP)形成了鮮明對(duì)比,因?yàn)镻GP方案是任何人都以簽名(而不僅僅是地位特殊的CA),從而證明其他人的密鑰證書的有效性。X.509 V3證書的設(shè)計(jì)非常靈活,除了對(duì)網(wǎng)橋拓?fù)浼軜?gòu)網(wǎng)絡(luò)的支持,還可以支持用于點(diǎn)對(duì)點(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工作組已對(duì)該標(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,包括對(duì)IETF的PKIX證書和證書吊銷列表(CRL Profile),通常也稱為公鑰基礎(chǔ)設(shè)施。

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

組織機(jī)構(gòu)可以把受信的根證書分發(fā)給所有的成員,這樣就可以使用公司的PKI系統(tǒng)了。像Firefox, IE, Opera, Safari 以及Google Chrome這些瀏覽器都預(yù)裝了一組CA根證書,所以可以直接使用這些主流CA發(fā)布的SSL證書。瀏覽器的開發(fā)者直接影響它的用戶對(duì)第三方的信任。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版本號(hào)

● Serial Number序列號(hào)

● 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)識(shí)符(可選)

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

● 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ò)展的用途,就要拒絕使用它。但對(duì)于非決定性的擴(kuò)展,不認(rèn)識(shí)可以予以忽略。RFC 1422給出了v1的證書結(jié)構(gòu),ITU-T在v2里增加了頒發(fā)者和主題唯一標(biāo)識(shí)符,從而可以在一段時(shí)間后重用。重用的一個(gè)例子是當(dāng)一個(gè)CA破產(chǎn)了,它的名稱也在公共列表里清除掉了,一段時(shí)間之后另一個(gè)CA可以用相同的名稱來注冊,即使它與之前的并沒有任何瓜葛。不過IETF并不建議重用同名注冊。另外v2也沒有在Internet里大范圍的使用。v3引入了擴(kuò)展,CA使用擴(kuò)展來發(fā)布一份特定使用目的的證書(比如說僅用于代碼簽名)。

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

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í),會(huì)同時(shí)對(duì)這個(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è)文件中交換公共和私有對(duì)象。

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è)證書,從而建立完全不同的證書鏈。 這對(duì)于PKI與其他應(yīng)用程序之間的交叉認(rèn)證至關(guān)重要,詳見以下示例。

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

  • 例1:兩個(gè)PKI之間,在根證書頒發(fā)機(jī)構(gòu)(CA)級(jí)別上進(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è)是新的私鑰對(duì)舊的公鑰進(jìn)行簽名,另一個(gè)是舊的私鑰對(duì)新的公鑰的簽名,這兩個(gè)證書都是自頒發(fā)的,但都不是自簽名。注:另外還存在新舊兩個(gè)自簽名證書。

假設(shè)cert1和cert3包含相同的公鑰(舊的公鑰),對(duì)于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í)體證書中的證書主體是不能使用證書所對(duì)應(yīng)的私鑰簽發(fā)證書的。最終實(shí)體與CA是兩個(gè)相對(duì)的概念: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)識(shí)符(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書保存在眾多安全層之后,以確保其密鑰絕對(duì)不可訪問。由于根證書簽署了中間證書,因此中間證書可用于簽署客戶安裝和維護(hù)的SSL“信任鏈”。

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


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

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

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(主題,使用者字段)是相同的,能夠使用自己的公鑰對(duì)簽名進(jìn)行驗(yàn)證,信任鏈的驗(yàn)證必須在此結(jié)束。如果驗(yàn)證程序在其信任存儲(chǔ)中有此根證書,就可以認(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ī)的情況下就會(huì)出現(xiàn)誤判,因?yàn)楫?dāng)CRL不可用時(shí),大多數(shù)客戶端都會(huì)信任證書,于是攻.擊者可以通過切斷信道來禁用CRL。谷歌(Google)的亞當(dāng)?蘭利(Adam Langley)曾表示,CRL軟故障檢查就像一條安全帶,只有在發(fā)生事故時(shí)才起作用。

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

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

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

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

        ● 委派問題:從技術(shù)上講,CA無法限制下級(jí)CA在有限的名稱空間或?qū)傩约忸C發(fā)證書;X.509的此功能未被使用。因此,互聯(lián)網(wǎng)上存在大量的CA,對(duì)它們進(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)證書不會(huì)阻止頒發(fā)對(duì)同一主機(jī)名較低驗(yàn)證證書的頒發(fā),這意味著較高的EV驗(yàn)證級(jí)別無法抵御中間人攻.擊。

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

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

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

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

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

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

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

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

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

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

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

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

        ● RFC822名稱有2種表示法

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

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

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

        ● 不應(yīng)將屬性設(shè)為強(qiáng)制屬性,因?yàn)樗鼤?huì)使客戶端崩潰

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

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

        ● 通過使用對(duì)象標(biāo)識(shí)符的0x80填充子標(biāo)識(shí)符,錯(cuò)誤的實(shí)現(xiàn)或通過使用客戶端瀏覽器的整數(shù)溢出,攻.擊者可以在CSR中包含一個(gè)未知屬性,CA會(huì)將其簽名,客戶端錯(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è)證書包含相同的簽名,并且只在公鑰上不同,這是通過對(duì)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é)會(huì)議上,麥格理大學(xué)(Macquarie University)的澳大利亞研究人員提出了“自動(dòng)差分路徑搜索SHA-1”,研究人員能夠推導(dǎo)出一種將碰撞的可能性增加了幾個(gè)數(shù)量級(jí)的方法。

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

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

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

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

        自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袅藢?duì)它們的控制權(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對(duì)消息摘要的加密,隨后合并到PKCS#1中。

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

        ● 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),定義對(duì)舊的v1 X.509證書規(guī)范的擴(kuò)展,被v3淘汰。

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

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

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

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

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

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

        此容器格式可以包含多個(gè)嵌入式對(duì)象,例如多個(gè)證書。通常使用密碼進(jìn)行保護(hù)/加密??捎米鱆ava密鑰存儲(chǔ)的格式,并在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)識(shí)自己,而與應(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)建根對(duì)

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

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

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

        注意:

        最佳實(shí)踐是在安全的環(huán)境中創(chuàng)建根對(duì)。理想情況下,該計(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已棄用,因此請(qǐng)改用SHA-2
defualt_md      = sha256
 
name_opt  = ca_default
cert_opt   = ca_default
default_days  = 375
preserve   = no
policy    = plicy_strict
 
我們將對(duì)所有根CA簽名應(yīng)用policy_strict,因?yàn)楦鵆A僅用于創(chuàng)建中間CA。
[ policy_strict]
# 根CA只對(duì)匹配的中間證書進(jìn)行簽名
# 請(qǐng)參閱“man ca”的策略格式部分。
countryName    = match
stateOrProvinceName  = match
organizationName   = match
organizationalUnitName  = optional
commonName    = supplied
emailAddress     = optional
如果值是“ match”,意為請(qǐng)求文件的該字段取值,必須與簽署時(shí)輸入的CA證書的對(duì)應(yīng)字段取值一模一樣;如果值是“supplied”,那么它必須存在。如果該值為“optional”,則可選(可留空);所以我們將對(duì)所有中間CA簽名應(yīng)用policy_loose而不是policy_strict,因?yàn)橹虚gCA正在對(duì)可能來自各種第三方的服務(wù)器和客戶端證書進(jìn)行簽名。
[ policy_loose ]
# 允許中間CA簽署更多種證書
# 請(qǐng)參見`ca`手冊頁的“策略格式”部分
countryName    = optional
stateOrProvinceName  = optional
localityName     = optional
organizationName   = optional
organizationalUnitName  = optional
commonName    = supplied
emailAddress     = optional
 
在創(chuàng)建證書或證書簽名請(qǐ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已棄用,因此請(qǐng)改用SHA-2
default_md     = sha256
 
# 使用-x509選項(xiàng)時(shí)要添加的擴(kuò)展項(xiàng)。
x509_extensions    = v3_ca
 
[req_distinguished_name]聲明證書簽名請(qǐng)求中通常所需的信息,您可以選擇指定一些默認(rèn)值。
[ req_distinguished_name ]
# 參看.
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í),將自動(dòng)應(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)并確保其絕對(duì)安全,因?yàn)槿魏螕碛懈借€的人都可以頒發(fā)“可信證書”,建議使用AES 256算法和復(fù)雜的強(qiáng)密碼加密根私鑰。

        注意:出于安全考慮,對(duì)所有根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ā)者和主題相同。

        請(qǐng)注意,所有根證書都是自簽名的。

注:以下的黃色漢字是注釋,并非證書的組成部分
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)建中間證書密鑰對(duì)

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

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

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

        根CA文件保存在/ root / ca中,選擇其他目錄(/root/ca/intermediate)來存儲(chǔ)中間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  =&nb            
            
                        
網(wǎng)站標(biāo)題:X.509證書的介紹和使用
本文鏈接:http://weahome.cn/article/pdejed.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部