密碼學(xué)之證書

"證書 -- 為公鑰加上數(shù)字簽名"

要開車得先考駕照.駕照上面記有本人的照片、姓名、出生日期等個(gè)人信息.以及有效期、準(zhǔn)駕車輛的類型等信息,并由公安局在上面蓋章。我們只要看到駕照,就可以知道公安局認(rèn)定此人具有駕駛車輛的資格。

公鑰證書(Public-Key Certificate,PKC)其實(shí)和駕照很相似,里面記有姓名、組織、郵箱地址等個(gè)人信息,以及 屬于此人的公鑰,并由認(rèn)證機(jī)構(gòu)(Certification Authority、Certifying Authority, CA)施加數(shù)字簽名。只要看到公 鑰證書,我們就可以知道認(rèn)證機(jī)構(gòu)認(rèn)定該公鑰的確屬于此人。公鑰證書也簡(jiǎn)稱為證書(certificate)。

可能很多人都沒聽說(shuō)過認(rèn)證機(jī)構(gòu),認(rèn)證機(jī)構(gòu)就是能夠認(rèn)定 “公鑰確實(shí)屬于此人",并能夠生成數(shù)字簽名的個(gè)人或 者組織。認(rèn)證機(jī)構(gòu)中有國(guó)際性組織和政府所設(shè)立的組織,也有通過提供認(rèn)證服務(wù)來(lái)盈利的一般企業(yè),此外個(gè)人 也可以成立認(rèn)證機(jī)構(gòu)。

1. 證書的應(yīng)用場(chǎng)景

下面我們來(lái)通過證書的代表性應(yīng)用場(chǎng)景來(lái)理解證書的作用。

下圖展示了Alice向Bob發(fā)送密文的場(chǎng)景,在生成密文時(shí)所使用的Bob的公鑰是通過認(rèn)證機(jī)構(gòu)獲取的。

認(rèn)證機(jī)構(gòu)必須是可信的,對(duì)于“可信的第三方”,下圖中會(huì)使用Trent這個(gè)名字,這個(gè)詞是從trust(信任)一詞演 變而來(lái)的。

證書的代表性應(yīng)用場(chǎng)景.png

下面讓我們對(duì)照著上圖來(lái)看一看這些步驟具體都做了些什么。

  1. Bob生成密鑰對(duì)
    要使用公鑰密碼進(jìn)行通信,首先需要生成密鑰對(duì)。Bob生成了一對(duì)公鑰和私鑰,并將私鑰自行妥善保管。在這里,密鑰對(duì)是由Bob自己生成的,也可以由認(rèn)證機(jī)構(gòu)代為生成。

  2. Bob在認(rèn)證機(jī)構(gòu)Trent注冊(cè)自己的公鑰

    • 在這里Bob則將公鑰發(fā)送給了認(rèn)證機(jī)構(gòu)Trent,這是因?yàn)锽ob需要請(qǐng)認(rèn)證機(jī)構(gòu)Trent對(duì)他的公鑰加上數(shù) 字簽名(也就是生成證書)。
    • Trent收到Bob的公鑰后,會(huì)確認(rèn)所收到的公鑰是否為Bob本人所有(參見專欄:身份確認(rèn)和認(rèn)證業(yè) 務(wù)準(zhǔn)則)

專欄:身份確認(rèn)和認(rèn)證業(yè)務(wù)準(zhǔn)則
認(rèn)證機(jī)構(gòu)確認(rèn)"本人"身份的方法和認(rèn)證機(jī)構(gòu)的認(rèn)證業(yè)務(wù)準(zhǔn)則(CertificatePractice Statement, CPS,的內(nèi)容有關(guān)。如果認(rèn)證機(jī)構(gòu)提供的是測(cè)試用的服務(wù),那么可能完全不會(huì)進(jìn)行任何身份確 認(rèn)。如果是政府部門運(yùn)營(yíng)的認(rèn)證機(jī)構(gòu),可能就需要根據(jù)法律規(guī)定來(lái)進(jìn)行身份確認(rèn)。如果是企業(yè) 面向內(nèi)部設(shè)立的認(rèn)證機(jī)構(gòu),那就可能會(huì)給部門負(fù)責(zé)人打電話直接確認(rèn)。
例如,VeriSign的認(rèn)證業(yè)務(wù)準(zhǔn)則中將身份確認(rèn)分為Class1 ~ 3共三個(gè)等級(jí)

  • Class1:通過向郵箱發(fā)送件來(lái)確認(rèn)本人身份
  • Class2:通過第三方數(shù)據(jù)庫(kù)來(lái)確認(rèn)本人身份
  • Class3:通過當(dāng)面認(rèn)證和身份證明來(lái)確認(rèn)本人身份

等級(jí)越高,身份確認(rèn)越嚴(yán)格。

  1. 認(rèn)證機(jī)構(gòu)Trent用自己的私鑰對(duì)Bob的公鑰施加數(shù)字簽名并生成證書
    Trent對(duì)Bob的公鑰加上數(shù)字簽名。為了生成數(shù)字簽名,需要Trent自身的私鑰,因此Trent需要事先生成好密鑰對(duì)。

  2. Alice得到帶有認(rèn)證機(jī)構(gòu)Trent的數(shù)字簽名的Bob的公鑰(證書)
    現(xiàn)在Alice需要向Bob發(fā)送密文,因此她從Trent處獲取證書。證書中包含了Bob的公鑰。

  3. Alice使用認(rèn)證機(jī)構(gòu)Trent的公鑰驗(yàn)證數(shù)字簽名,確認(rèn)Bob的公鑰的合法性
    Alice使用認(rèn)證機(jī)構(gòu)Trent的公鑰對(duì)證書中的數(shù)字簽名進(jìn)行驗(yàn)證。如果驗(yàn)證成功,就相當(dāng)于確認(rèn)了證書中所包含的公鑰的確是屬于Bob的。到這里,Alice就得到了合法的Bob的公鑰。

  4. Alice用Bob的公鑰加密消息并發(fā)送給Bob
    Alice用Bob的公鑰加密要發(fā)送的消息,并將消息發(fā)送給Bob。

  5. Bob用自己的私鑰解密密文得到Alice的消息
    Bob收到Alice發(fā)送的密文,然后用自己的私鑰解密,這樣就能夠看到Alice的消息了。

上面就是利用認(rèn)證機(jī)構(gòu)Trent進(jìn)行公鑰密碼通信的流程。其中1、2、3這幾個(gè)步驟 僅在注冊(cè)新公鑰時(shí)才會(huì)進(jìn)行,并不是每次通信都需要。此外,步驟 4 僅在Alice第 一次用公鑰密碼向Bob發(fā)送消息時(shí)才需要進(jìn)行,只要Alice將Bob的公鑰保存在電 腦中,在以后的通信中就可以直接使用了。

2. 證書標(biāo)準(zhǔn)規(guī)范X.509

證書是由認(rèn)證機(jī)構(gòu)頒發(fā)的,使用者需要對(duì)證書進(jìn)行驗(yàn)證,因此如果證書的格式千奇百怪那就不方便了。于是, 人們制定了證書的標(biāo)準(zhǔn)規(guī)范,其中使用最廣泛的是由ITU(International Telecommumcation Union,國(guó)際電信聯(lián)盟)和ISO(Intemational Organization for Standardization, 國(guó)際標(biāo)準(zhǔn)化組織)制定的X.509規(guī)范。很多應(yīng)用程序都支 持x.509并將其作為證書生成和交換的標(biāo)準(zhǔn)規(guī)范。

X.509是一種非常通用的證書格式。所有的證書都符合ITU-T X.509國(guó)際標(biāo)準(zhǔn),因此(理論上)為一種應(yīng)用創(chuàng)建的證書 可以用于任何其他符合X.509標(biāo)準(zhǔn)的應(yīng)用。X.509證書的結(jié)構(gòu)是用ASN1(Abstract Syntax Notation One)進(jìn)行描述數(shù)據(jù) 結(jié)構(gòu),并使用ASN.1語(yǔ)法進(jìn)行編碼。

在一份證書中,必須證明公鑰及其所有者的姓名是一致的。對(duì)X.509證書來(lái)說(shuō),認(rèn)證者總是 CA 或由CA指定的 人,一份X.509證書是一些標(biāo)準(zhǔn)字段的集合,這些字段包含有關(guān)用戶或設(shè)備及其相應(yīng)公鑰的信息。X.509標(biāo)準(zhǔn)定義 了證書中應(yīng)該包含哪些信息,并描述了這些信息是如何編碼的(即數(shù)據(jù)格式)。

一般來(lái)說(shuō),一個(gè)數(shù)字證書內(nèi)容可能包括基本數(shù)據(jù)(版本、序列號(hào)) 、所簽名對(duì)象信息( 簽名算法類型、簽發(fā)者信 息、有效期、被簽發(fā)人、簽發(fā)的公開密鑰)、CA的數(shù)字簽名,等等。

2.1. 證書規(guī)范

前使用最廣泛的標(biāo)準(zhǔn)為ITU和ISO聯(lián)合制定的X.509的 v3版本規(guī)范 (RFC5280), 其中定義了如下證書信息域:

  • 版本號(hào)(Version Number):規(guī)范的版本號(hào),目前為版本3,值為0x2;
  • 序列號(hào)(Serial Number):由CA維護(hù)的為它所發(fā)的每個(gè)證書分配的一的列號(hào),用來(lái)追蹤和撤銷證書。只要擁有簽發(fā)者信息和序列號(hào),就可以唯一標(biāo)識(shí)一個(gè)證書,最大不能過20個(gè)字節(jié);
  • 簽名算法(Signature Algorithm):數(shù)字簽名所采用的算法,如:
  • sha256-with-RSA-Encryption
  • ecdsa-with-SHA2S6
  • 頒發(fā)者(Issuer):發(fā)證書單位的標(biāo)識(shí)信息,如 ” C=CN,ST=Beijing, L=Beijing, O=org.example.com,CN=ca.org。example.com ”;

  • 有效期(Validity): 證書的有效期很,包括起止時(shí)間。

  • **主體(Subject) : 證書擁有者的標(biāo)識(shí)信息(Distinguished Name),如:" C=CN,ST=Beijing, L=Beijing, CN=person.org.example.com”;

  • 主體的公鑰信息(SubJect Public Key Info):所保護(hù)的公鑰相關(guān)的信息:

  • 公鑰算法 (Public Key Algorithm)公鑰采用的算法;
  • 主體公鑰(Subject Unique Identifier):公鑰的內(nèi)容。
  • 頒發(fā)者唯一號(hào)(Issuer Unique Identifier):代表頒發(fā)者的唯一信息,僅2、3版本支持,可選;

  • 主體唯一號(hào)(Subject Unique Identifier):代表?yè)碛凶C書實(shí)體的唯一信息,僅2,3版本支持,可選;

  • 擴(kuò)展(Extensions,可選):可選的一些擴(kuò)展。中可能包括:

  • Subject Key Identifier:實(shí)體的秘鑰標(biāo)識(shí)符,區(qū)分實(shí)體的多對(duì)秘鑰;
  • Basic Constraints:一指明是否屬于CA;
  • Authority Key Identifier:證書頒發(fā)者的公鑰標(biāo)識(shí)符;
  • CRL Distribution Points: 撤銷文件的頒發(fā)地址;
  • Key Usage:證書的用途或功能信息

此外,證書的頒發(fā)者還需要對(duì)證書內(nèi)容利用自己的私鑰添加簽名, 以防止別人對(duì)證書的內(nèi)容進(jìn)行篡改。

2.2. 證書格式

X.509規(guī)范中一般推薦使用PEM(Privacy Enhanced Mail)格式來(lái)存儲(chǔ)證書相關(guān)的文件。證書文件的文件名后綴一般 為 .crt 或 .cer 。對(duì)應(yīng)私鑰文件的文件名后綴一般為 .key。證書請(qǐng)求文件的文件名后綴為 .csr 。有時(shí)候也統(tǒng)一用 pem作為文件名后綴。

PEM格式采用文本方式進(jìn)行存儲(chǔ)。一般包括首尾標(biāo)記和內(nèi)容塊,內(nèi)容塊采用Base64進(jìn)行編碼。

編碼格式總結(jié):

  • X.509 DER(Distinguished Encoding Rules)編碼,后綴為:.der
  • .cer .crt X.509 BASE64編碼(PEM格式),后綴為:.pem .cer .crt

例如,一個(gè)PEM格式(base64編碼)的示例證書文件內(nèi)容如下所示:

-----BEGIN CERTIFICATE-----
MIIDyjCCArKgAwIBAgIQdZfkKrISoINLporOrZLXPTANBgkqhkiG9w0BAQsFADBn
MSswKQYDVQQLDCJDcmVhdGVkIGJ5IGh0dHA6Ly93d3cuZmlkZGxlcjIuY29tMRUw
EwYDVQQKDAxET19OT1RfVFJVU1QxITAfBgNVBAMMGERPX05PVF9UUlVTVF9GaWRk
bGVyUm9vdDAeFw0xNzA0MTExNjQ4MzhaFw0yMzA0MTExNjQ4MzhaMFoxKzApBgNV
BAsMIkNyZWF0ZWQgYnkgaHR0cDovL3d3dy5maWRkbGVyMi5jb20xFTATBgNVBAoM
DERPX05PVF9UUlVTVDEUMBIGA1UEAwwLKi5iYWlkdS5jb20wggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAoIBAQDX0AM198jxwRoKgwWsd9oj5vI0and9v9SB9Chl
gZEu6G9ZA0C7BucsBzJ2bl0Mf6qq0Iee1DfeydfEKyTmBKTafgb2DoQE3OHZjy0B
QTJrsOdf5s636W5gJp4f7CUYYA/3e1nxr/+AuG44Idlsi17TWodVKjsQhjzH+bK6
8ukQZyel1SgBeQOivzxXe0rhXzrocoeKZFmUxLkUpm+/mX1syDTdaCmQ6LT4KYYi
soKe4f+r2tLbUzPKxtk2F1v3ZLOjiRdzCOA27e5n88zdAFrCmMB4teG/azCSAH3g
Yb6vaAGaOnKyDLGunW51sSesWBpHceJnMfrhwxCjiv707JZtAgMBAAGjfzB9MA4G
A1UdDwEB/wQEAwIEsDATBgNVHSUEDDAKBggrBgEFBQcDATAWBgNVHREEDzANggsq
LmJhaWR1LmNvbTAfBgNVHSMEGDAWgBQ9UIffUQSuwWGOm+o74JffZJNadjAdBgNV
HQ4EFgQUQh8IksZqcMVmKrIibTHLbAgLRGgwDQYJKoZIhvcNAQELBQADggEBAC5Y
JndwXpm0W+9SUlQhAUSE9LZh+DzcSmlCWtBk+SKBwmAegbfNSf6CgCh0VY6iIhbn
GlszqgAOAqVMxAEDlR/YJTOlAUXFw8KICsWdvE01xtHqhk1tCK154Otci60Wu+tz
1t8999GPbJskecbRDGRDSA/gQGZJuL0rnmIuz3macSVn6tH7NwdoNeN68Uj3Qyt5
orYv1IFm8t55224ga8ac1y90hK4R5HcvN71aIjMKrikgynK0E+g45QypHRIe/z0S
/1W/6rqTgfN6OWc0c15hPeJbTtkntB5Fqd0sfsnKkW6jPsKQ+z/+vZ5XqzdlFupQ
29F14ei8ZHl9aLIHP5s=
-----END CERTIFICATE-----

證書中的解析出來(lái)的內(nèi)容:

Certificate:
    Data:
G2
    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-
    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:
         ...

2.3. CA證書

證書是用來(lái)證明某某東西確實(shí)是某某東西的東西(是不是像繞口令?)。通俗地說(shuō),證書就好比上文里面的公章。通過公章,可以證明對(duì)應(yīng)的證件的真實(shí)性。

理論上,人人都可以找個(gè)證書工具,自己做一個(gè)證書。那如何防止壞人自己制作證書出來(lái)騙人呢?請(qǐng)看后續(xù) CA 的介紹。

CA是Certificate Authority的縮寫,也叫“證書授權(quán)中心”。

它是負(fù)責(zé)管理和簽發(fā)證書的第三方機(jī)構(gòu), 好比一個(gè)可信任的中介公司。一般來(lái)說(shuō),CA必須是所有行業(yè)和所有公眾 都信任的、認(rèn)可的。因此它必須具有足夠的權(quán)威性。就好比A、B兩公司都必須信任C公司,才會(huì)找 C 公司作為公 章的中介。

2.3.1. 證書信任鏈

證書直接是可以有信任關(guān)系的, 通過一個(gè)證書可以證明另一個(gè)證書也是真實(shí)可信的. 實(shí)際上,證書之間的信 任關(guān)系,是可以嵌套的。比如,C 信任 A1,A1 信任 A2,A2 信任 A3......這個(gè)叫做證書的信任鏈。只要你信 任鏈上的頭一個(gè)證書,那后續(xù)的證書,都是可以信任的。

假設(shè) C 證書信任 A 和 B;然后 A 信任 A1 和 A2;B 信任 B1 和 B2。則它們之間,構(gòu)成如下的一個(gè)樹形關(guān)系 (一個(gè)倒立的樹)。

證書信任鏈.png

處于最頂上的樹根位置的那個(gè)證書,就是“ 根證書 ”。除了根證書,其它證書都要依靠上一級(jí)的證書,來(lái)證明自己。那誰(shuí)來(lái)證明“根證書”可靠呢?實(shí)際上,根證書自己證明自己是可靠的(或者換句話說(shuō),根證書是 不需要被證明的)。

2.3.2. 證書有啥用

1. 驗(yàn)證網(wǎng)站是否可信(針對(duì)HTTPS)

通常,我們?nèi)绻L問某些敏感的網(wǎng)頁(yè)(比如用戶登錄的頁(yè)面),其協(xié)議都會(huì)使用 HTTPS 而不是 HTTP。因?yàn)?HTTP 協(xié)議是明文的,一旦有壞人在偷窺你的網(wǎng)絡(luò)通訊,他/她就可以看到網(wǎng)絡(luò)通訊的內(nèi) 容(比如你的密碼、銀行帳號(hào)、等);而 HTTPS 是加密的協(xié)議,可以保證你的傳輸過程中,壞蛋無(wú)法偷窺。

但是,千萬(wàn)不要以為,HTTPS 協(xié)議有了加密,就可高枕無(wú)憂了。再舉一個(gè)例子來(lái)說(shuō)明,光有加密是不夠的。假設(shè)有一個(gè)壞人,搞了一個(gè)假的網(wǎng)銀的站點(diǎn),然后誘騙你上這個(gè)站點(diǎn)。假設(shè)你又比較單 純,一不留神,就把你的帳號(hào),口令都輸入進(jìn)去了。那這個(gè)壞蛋的陰謀就得逞了。

為了防止壞人這么干,HTTPS 協(xié)議除了有加密的機(jī)制,還有一套證書的機(jī)制。通過證書來(lái)確保,某 個(gè)站點(diǎn)確實(shí)就是某個(gè)站點(diǎn)。

有了證書之后,當(dāng)你的瀏覽器在訪問某個(gè) HTTPS 網(wǎng)站時(shí),會(huì)驗(yàn)證該站點(diǎn)上的 CA 證書(類似于驗(yàn)證 介紹信的公章)。如果瀏覽器發(fā)現(xiàn)該證書沒有問題(證書被某個(gè)根證書信任、證書上綁定的域名和 該網(wǎng)站的域名一致、證書沒有過期),那么頁(yè)面就直接打開;否則的話,瀏覽器會(huì)給出一個(gè)警告, 告訴你該網(wǎng)站的證書存在某某問題,是否繼續(xù)訪問該站點(diǎn)?

大多數(shù)知名的網(wǎng)站,如果用了 HTTPS 協(xié)議,其證書都是可信的(也就不會(huì)出現(xiàn)上述警告)。所以, 今后你如果上某個(gè)知名網(wǎng)站,發(fā)現(xiàn)瀏覽器跳出上述警告,你就要小心啦!

3. 公鑰基礎(chǔ)設(shè)施(PKI)

僅制定證書的規(guī)范還不足以支持公鑰的實(shí)際運(yùn)用,我們還需要很多其他的規(guī)范,例如證書應(yīng)該由誰(shuí)來(lái)頒發(fā),如何頒發(fā),私鑰泄露時(shí)應(yīng)該如何作廢證書,計(jì)算機(jī)之間的數(shù)據(jù)交換應(yīng)采用怎樣的格式等。這一節(jié)我們將介紹能夠使公鑰的運(yùn)用更加有效的公鑰基礎(chǔ)設(shè)施。

3.1. 什么是公鑰基礎(chǔ)設(shè)施

公鑰基礎(chǔ)設(shè)施(Public-Key infrastructure)是為了能夠更有效地運(yùn)用公鑰而制定的一系列規(guī)范和規(guī)格的總稱。公 鑰基礎(chǔ)設(shè)施一般根據(jù)其英語(yǔ)縮寫而簡(jiǎn)稱為PKI。

PKI只是一個(gè)總稱,而并非指某一個(gè)單獨(dú)的規(guī)范或規(guī)格。例如,RSA公司所制定的PKCS(Public-Key Cryptography Standards,公鑰密碼標(biāo)準(zhǔn))系列規(guī)范也是PKI的一種,而互聯(lián)網(wǎng)規(guī)格RFC(Requestfor Comments)中也有很多與 PKI相關(guān)的文檔。此外,X.509這樣的規(guī)范也是PKI的一種。在開發(fā)PKI程序時(shí)所使用的由各個(gè)公司編寫的 API(Application Programming Interface, 應(yīng)用程序編程接口)和規(guī)格設(shè)計(jì)書也可以算是PKI的相關(guān)規(guī)格。

因此,根據(jù)具體所采用的規(guī)格,PKI也會(huì)有很多變種,這也是很多人難以整體理解PKI的原因之一。

為了幫助大家整體理解PKI,我們來(lái)簡(jiǎn)單總結(jié)一下PKI的基本組成要素(用戶、認(rèn)證機(jī)構(gòu)、倉(cāng)庫(kù))以及認(rèn)證機(jī)構(gòu)所 負(fù)責(zé)的工作。

3.2. 什么是公鑰基礎(chǔ)設(shè)施

PKI的組成要素主要有以下三個(gè):

  • 用戶 --- 使用PKI的人
  • 認(rèn)證機(jī)構(gòu) --- 頒發(fā)證書的人
  • 倉(cāng)庫(kù) --- 保存證書的數(shù)據(jù)庫(kù)
公鑰基礎(chǔ)設(shè)施.png
3.2.1. 用戶

用戶就是像Alice、Bob這樣使用PKI的人。用戶包括兩種:一種是希望使用PKI注冊(cè)自己的公鑰的人,另一種是希 望使用已注冊(cè)的公鑰的人。我們來(lái)具體看一下這兩種用戶所要進(jìn)行的操作。

  • 注冊(cè)公鑰的用戶所進(jìn)行的操作

    • 生成密鑰對(duì)(也可以由認(rèn)證機(jī)構(gòu)生成)
    • 在認(rèn)證機(jī)構(gòu)注冊(cè)公鑰
    • 向認(rèn)證機(jī)構(gòu)申請(qǐng)證書
    • 根據(jù)需要申請(qǐng)作廢已注冊(cè)的公鑰
    • 解密接收到的密文
    • 對(duì)消息進(jìn)行數(shù)字簽名
  • 使用已注冊(cè)公鑰的用戶所進(jìn)行的操作

    • 將消息加密后發(fā)送給接收者
    • 驗(yàn)證數(shù)字簽名
3.2.2. 認(rèn)證機(jī)構(gòu)(CA)

認(rèn)證機(jī)構(gòu)(Certification Authority,CA)是對(duì)證書進(jìn)行管理的人。上面的圖中我們給它起了一個(gè)名字叫作Trent。 認(rèn)證機(jī)構(gòu)具體所進(jìn)行的操作如下:

  • 生成密鑰對(duì) (也可以由用戶生成)
    生成密鑰對(duì)有兩種方式:一種是由PKI用戶自行生成,一種是由認(rèn)證機(jī)構(gòu)來(lái)生成。在認(rèn)證機(jī)構(gòu)生成用戶密鑰 對(duì)的情況下,認(rèn)證機(jī)構(gòu)需要將私鑰發(fā)送給用戶,這時(shí)就需要使用PKCS#12(Personal Information Exchange Syntax Standard)等規(guī)范

  • 在注冊(cè)公鑰時(shí)對(duì)本人身份進(jìn)行認(rèn)證, 生成并頒發(fā)證書
    在用戶自行生成密鑰對(duì)的情況下,用戶會(huì)請(qǐng)求認(rèn)證機(jī)構(gòu)來(lái)生成證書。申請(qǐng)證書時(shí)所使用的規(guī)范是由 PKCS#10(Certification Request Syntax Standard)定義的。
    認(rèn)證機(jī)構(gòu)根據(jù)其認(rèn)證業(yè)務(wù)準(zhǔn)則(Certification Practice Statement,CPS)對(duì)用戶的身份進(jìn)行認(rèn)證,并生成證 書。在生成證書時(shí),需要使用認(rèn)證機(jī)構(gòu)的私鑰來(lái)進(jìn)行數(shù)字簽名。生成的證書格式是由PKCS#6 (Extended- Certificate Syntax Standard)和 X.509定義的。

  • 作廢證書
    當(dāng)用戶的私鑰丟失、被盜時(shí),認(rèn)證機(jī)構(gòu)需要對(duì)證書進(jìn)行作廢(revoke)。此外,即便私鑰安然無(wú)恙,有時(shí) 候也需要作廢證書,例如用戶從公司離職導(dǎo)致其失去私鑰的使用權(quán)限,或者是名稱變更導(dǎo)致和證書中記載 的內(nèi)容不一致等情況。
    紙質(zhì)證書只要撕毀就可以作廢了,但這里的證書是數(shù)字信息,即便從倉(cāng)庫(kù)中刪除也無(wú)法作廢,因?yàn)橛脩魰?huì)
    保存證書的副本,但認(rèn)證機(jī)構(gòu)又不能人侵用戶的電腦將副本刪除。
    要作廢證書,認(rèn)證機(jī)構(gòu)需要制作一張證書 作廢清單(Certificate Revocation List),簡(jiǎn)稱為CRL 。
    CRL是認(rèn)證機(jī)構(gòu)宣布作廢的證書一覽表,具體來(lái)說(shuō),是一張已作廢的證書序列號(hào)的清單,并由認(rèn)證機(jī)構(gòu)加
    上數(shù)字簽名。證書序列號(hào)是認(rèn)證機(jī)構(gòu)在頒發(fā)證書時(shí)所賦予的編號(hào),在證書中都會(huì)記載。
    PKI用戶需要從認(rèn)證機(jī)構(gòu)獲取最新的CRL,并查詢自己要用于驗(yàn)證簽名(或者是用于加密)的公鑰證書是否已 經(jīng)作廢這個(gè)步驟是非常重要的。
    假設(shè)我們手上有Bob的證書,該證書有合法的認(rèn)證機(jī)構(gòu)簽名,而且也在有效期內(nèi),但僅憑這些還不能說(shuō)明 該證書一定是有效的,還需要查詢認(rèn)證機(jī)構(gòu)最新的CRL,并確認(rèn)該證書是否有效。一般來(lái)說(shuō),這個(gè)檢查不 是由用戶自身來(lái)完成的,而是應(yīng)該由處理該證書的軟件來(lái)完成,但有很多軟件并沒有及時(shí)更能CRL。

認(rèn)證機(jī)構(gòu)的工作中,公鑰注冊(cè)和本人身份認(rèn)證這一部分可以由注冊(cè)機(jī)構(gòu)(Registration Authority,RA) 來(lái)分擔(dān)。 這樣一來(lái),認(rèn)證機(jī)構(gòu)就可以將精力集中到頒發(fā)證書上,從而減輕了認(rèn)證機(jī)構(gòu)的負(fù)擔(dān)。不過,引入注冊(cè)機(jī)構(gòu)也有 弊端,比如說(shuō)認(rèn)證機(jī)構(gòu)需要對(duì)注冊(cè)機(jī)構(gòu)本身進(jìn)行認(rèn)證,而且隨著組成要素的增加,溝通過程也會(huì)變得復(fù)雜,容 易遭受攻擊的點(diǎn)也會(huì)增。

3.2.2. 倉(cāng)庫(kù)

倉(cāng)庫(kù)(repository)是一個(gè)保存證書的數(shù)據(jù)庫(kù),PKI用戶在需要的時(shí)候可以從中獲取證書.它的作用有點(diǎn)像打電話 時(shí)用的電話本。在本章開頭的例子中,盡管沒特別提到,但Alice獲取Bob的證書時(shí),就可以使用倉(cāng)庫(kù)。倉(cāng)庫(kù)也叫 作證書目錄。

3.3. 各種各樣的PKI

公鑰基礎(chǔ)設(shè)施(PKI)這個(gè)名字總會(huì)引起一些誤解,比如說(shuō)“面向公眾的權(quán)威認(rèn)證機(jī)構(gòu)只有一個(gè)",或者“全世界的 公鑰最終都是由一個(gè)根CA來(lái)認(rèn)證的",其實(shí)這些都是不正確的。認(rèn)證機(jī)構(gòu)只要對(duì)公鑰進(jìn)行數(shù)字簽名就可以了,因 此任何人都可以成為認(rèn)證機(jī)構(gòu),實(shí)際上世界上已經(jīng)有無(wú)數(shù)個(gè)認(rèn)證機(jī)構(gòu)了。

國(guó)家、地方政府、醫(yī)院、圖書館等公共組織和團(tuán)體可以成立認(rèn)證機(jī)構(gòu)來(lái)實(shí)現(xiàn)PKI,公司也可以出于業(yè)務(wù)需要在內(nèi)部 實(shí)現(xiàn)PKI,甚至你和你的朋友也可以以實(shí)驗(yàn)為目的來(lái)構(gòu)建PKI。

在公司內(nèi)部使用的情況下,認(rèn)證機(jī)構(gòu)的層級(jí)可以像上一節(jié)中一樣和公司的組織層級(jí)一一對(duì)應(yīng),也可以不一一對(duì) 應(yīng)。例如,如果公司在東京、大阪、北海道和九州都成立了分公司,也可以采取各個(gè)分公司之間相互認(rèn)證的結(jié) 構(gòu)。在認(rèn)證機(jī)構(gòu)的運(yùn)營(yíng)方面,可以購(gòu)買用于構(gòu)建PKI的軟件產(chǎn)品由自己公司運(yùn)營(yíng),也可以使用VeriSign等外部認(rèn) 證服務(wù)。具體要采取怎樣的方式,取決于目的和規(guī)模,并沒有一定之規(guī)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容