數字證書基礎-X.509協議

數字證書的兩個基本概念

1. 公鑰加密,私鑰解密;私鑰簽名,公鑰驗籤。

2. 根證書應該被無條件信任,根證書通過可靠途徑獲得。

1. 證書狀態查詢

提供證書回收狀態查詢的兩種機制:

1.OCSP --online certficate status protocol (rfc2560)Firefox3 缺省就是使用OCSP協議。

2.CRLs --certificate revocation lists

2. X.509中的實體

end entity

CA:certification authority

RA:registeration authority, CA申請證書之間,需要先向RA註冊。

CRL Issuer:代替CA發佈CRLs

repository:存儲證書和CRL

3. PEM

PEM: InternetPrivacy Enhanced Mail (PEM)

PEM中的架構:

第一層:IPRA,level-1,爲PCAs頒發證書

第二層:PCAslevel-2,爲CA頒發證書。不同的PCAs面向不同類型的用戶。

第三層:CA.level-3,也可處於更低的級別。

X.509 V3允許certification path不起源於IPRA,可以起源於user'sdomain,因爲有些時候,localdomain是最可信的。

4. 證書類型

證書分爲CA證書和end-entity 證書,可以通過Basic Constraints[x.509 4.2.1.9]中的subject type區分。其中CA證書分爲如下三類:

cross-certificate:             issuer subject不一樣。

self-issued certificates:自頒發證書。issuer subject一樣,to support changes in policy or operations

self-signed certificates:自簽證書,即根證書。是一種特殊的self-issued certificates使用自己的密匙對證書籤名。根證書是一種特殊證書,必須受到客戶無條件的信任

證書是自頒發證書而不是自簽證書的情形:

CA在一定情形下需要進行密匙更換,比如private key泄露。CA在進行密鑰更替時,存在兩個密鑰對(新密鑰對和舊密鑰對),爲了平滑過渡,需要另外生成3個證書。

證書1: 新密匙對的self-signed 證書,新的根證書。

證書2:self-issued證書,攜帶oldpublic key,使用new private key簽名。目的:使得舊密匙對還能使用,即舊密匙對頒發的證書還能繼續使用。並且,驗證這類證書需要用到新密匙對,確保了安全性。

證書3:self-issued證書,攜帶newpublic key,使用old private key簽名。存在的必要性??

6. protocol

Operational protocols:分發證書和CRLs有很多手段。分發證書和CRLs有很多手段,包括但不限於LDAP,HTTP,FTP,X.500

Management protocols:支持在線交互。包括如下功能:

1.註冊。CARA可以接受註冊。

2.初始化。install key materials

3.頒發證書

4.key pair recovery

5.key pair updateAll key pairs need to be updatedregularly.

6.revocation request

7.cross-certification

注意:除了on-line protocol能夠支持這些功能,還有其它手段,比如hardware token.

7. 證書格式

 

# openssl x509 -in gino2.cer -text -noout 
Version: 3 (0x2) 
Serial Number: be:86:77:9c:48:b1:d7:86:ca:38:87:ef:d4:87:dd:00   --CA內唯一
Signature Algorithm: sha1WithRSAEncryption --必須與signatureAlgorithm一致
Issuer: O=Ericsson, CN=Ericsson NL Individual CA v2 --證書的頒發者
Validity 
    Not Before: Dec 5 08:21:55 2014 GMT 
    Not After : Dec 5 08:21:54 2017 GMT 
Subject:
O=Ericsson, CN=Gino Liao/[email protected]/serialNumber=elioxii --證書的擁有者
Subject Public Key Info: 
    Public Key Algorithm: rsaEncryption --支持RSA,DSA,DH。DSA僅適用於數字簽名。DH僅適用於祕鑰交換。
    RSA Public Key: (2048 bit) 
    Modulus (2048 bit): --RSA算法中的n, n=pq。這裏表示是一個佔用256個字節的整數。
        00:90:17:20:6b:23:19:40:48:ce:d8:9a:b9:ce:7d: 
        23:93:b9:17:2b:ab:be:08:d2:fc:02:c9:7f:e9:58: 
        cd:4c:c7:19:90:21:27:f8:cb:46:73:e4:e3:e9:1e: 
        3f:27:a2:8c:4b:51:77:27:6f:8f:b7:05:77:a4:fd: 
        39:c5:c8:ca:5f:fe:47:1c:b3:f1:2e:bd:cb:87:89: 
        f4:01:a9:fa:34:31:2b:2b:c8:3f:39:4d:a5:36:db: 
        dd:7a:a2:18:d8:1e:2a:f5:11:a1:ec:1c:5b:27:7c: 
        a1:73:33:9c:3a:40:17:a8:d1:6e:91:3d:9b:8e:8c: 
        64:7d:ff:87:4e:2c:f2:c7:a9:6b:c9:c3:8c:cb:10: 
        c3:a8:18:7f:36:4e:fb:17:d6:8c:c5:43:20:7d:3b: 
        d3:c7:57:ad:5e:c3:22:03:21:92:c6:47:38:ed:bc: 
        09:12:0c:c7:e3:fd:c8:fd:83:5a:ab:d7:d0:bb:19: 
        e1:4c:94:e1:cb:e5:91:b5:18:59:3e:46:18:a9:32: 
        21:c6:92:9a:33:7d:dd:29:c6:6c:bc:a4:4b:21:41: 
        db:9d:f2:e8:29:07:32:23:ec:23:94:ab:e0:0c:95: 
        fb:e0:d3:f8:2c:e9:a0:c4:7e:13:61:ef:03:64:58: 
        b1:a4:65:87:d2:13:74:5a:af:6a:8d:6c:46:58:43: 
        88:a9
    Exponent: 65537 (0x10001) --RSA算法中的e
X509v3 extensions: 
    X509v3 CRL Distribution Points:   --如何得到CRL信息
        URI:http://crl.trust.telia.com/ericssonnlindividualcav2.crl 

    Authority Information Access:   --重要,後面描述
        OCSP - URI:http://ocsp2.trust.telia.com 
        CA Issuers - URI:http://ca.trust.teliasonera.com/ericssonnlindividualcav2.cer 

    X509v3 Subject Alternative Name: 
        email:[email protected] 

    X509v3 Certificate Policies: 
        Policy: 1.3.6.1.4.1.271.2.3.1.1.18 
        CPS: https://repository.trust.teliasonera.com/CPS 

    X509v3 Extended Key Usage: --表明了證書的用途。證書只能用於這裏制定的用途。 
        E-mail Protection, TLS Web Client Authentication 

    X509v3 Subject Key Identifier: --SKID,用來區分一個CA的多對公鑰密鑰 
        39:5B:62:EC:81:56:E4:26:55:0F:FC:A4:7B:43:0A:2C:88:AB:B4:38 

    X509v3 Authority Key Identifier: --AKID,用來區分一個CA的多對公鑰密鑰
        keyid:B1:0D:CA:D4:46:B7:AF:86:02:C3:2F:6F:06:CA:0E:76:71:7F:4B:37 

    X509v3 Key Usage: critical 
        Digital Signature, Key Encipherment 

Signature Algorithm: sha1WithRSAEncryption --簽名算法和簽名。這裏表示用sha1算法和上級CA的密匙對本證書中的tbsCertificate進行簽名.驗籤的過程:用sha1算法對tbsCertifcate計算摘要值,用上級CA的public key對本字段解密,然後比較。
        08:3b:25:31:72:ef:3f:e7:51:9d:f2:10:2f:c4:28:72:ec:29: 
        49:56:c2:c5:cf:8b:f6:f3:a0:b5:dc:fa:3a:92:9b:4b:0c:5a: 
        a4:5f:6b:66:b4:6f:ff:86:ac:18:8f:aa:38:9b:94:51:cd:71: 
        51:3d:cc:64:c6:8f:e0:e1:69:1f:ca:d5:95:75:dc:48:ad:88: 
        ec:08:cf:22:f0:f8:0e:76:05:39:b3:b2:3d:3e:31:57:dd:ef: 
        e7:1c:9a:ae:26:75:22:4a:00:f6:7d:2e:67:52:6d:83:61:b1: 
        fe:8b:db:ca:6c:19:2d:80:7f:d1:a8:b8:79:db:5d:4e:3f:25: 
        9e:70:bc:ec:a0:9e:2e:8a:d0:35:7e:3e:c7:73:57:4c:be:40: 
        e3:0f:74:6c:6b:57:08:3d:cc:f9:d5:a5:0d:d1:0b:20:ab:f8: 
        1d:13:d3:59:b3:80:1c:2f:5f:e2:db:05:c9:7f:8b:3d:d4:4b: 

8. 證書鏈

8.1 證書鏈的概念

證書鏈路{1,...,n-1,n}

1) 12issuer23issure...n-1nissuer

2) 1是可信任的證書

3) 待驗證的證書是n

4) 所有證書都在有效期內

在證書鏈中,一個證書不可以出現兩次。

8.2 如何獲取證書的頒發者

方法1name chaining

藉助證書中的issuer/subject兩個字段。缺點:一個CA只能有一對公鑰密鑰對。

 

方法2key identifer chaining

AKID(Authority Key Identifier): 一個CA有多個key pair時,用這個id來區分key pair

SKID(Subject Key Identifier):  用來表示一個具體的public key

name chaining比較,其優點是支持一個CA可以有多個公鑰密鑰對

 

8.3 如何獲得證書

方法一:CA制定一些規則

在協議中,以下屬性指明瞭證書的路徑。

The cACertificate attribute of a CA's directory entry:指明瞭一個路徑。這個路徑下了存儲如下兩種證書:1.self-issued證書,2.在同一個realm內的其它CA頒發給本CA的證書。realm的定義沒有明確,這裏可以理解爲其它所有CA頒發給本CA的證書。

The issuedToThisCA elements of the crossCertificatePair attributeof a CA's directory entry:指明瞭一個路徑。這個路徑下可以存儲所有頒發給本CA的證書,除了self-issued證書。

The  issuedByThisCA elements of the crossCertificatePair attributeof a CA's directory entry :指明一個路徑。這個路徑存儲本CA頒發的這類證書:頒發的對象不是本CA的下屬。

CA制定如下規則後,就可以獲取所有證書路徑:

1 所有self-issued證書都存儲在cACertificate 

2. 頒發給本CA的證書都存儲在issuedToThisCA,除了self-issued證書

3. CA給其它非下屬CA頒發的證書存儲在issuedByThisCA 

方法二:windows2000利用private extention中的AIA

Authority Information Access (AIA) 可以用來指明路徑。

例如:

Authority Information Access: 
       OCSP - URI:http://ocsp.trust.teliasonera.com 
       CA Issuers -URI:http://repository.trust.teliasonera.com/teliasonerarootcav1.cer

方法三:pkiPath

pkiPath:這個路徑直接說明了從某個CA到另外的CA的路徑。

8.4 構建證書鏈

構建證書鏈的兩個方向:

正向:從實體證書到可信賴證書,適用於hierarchical模型


hierarchical模型

逆向:從可信賴證書到實體證書,適用於分佈式模型

 

分佈式模型

構建證書鏈路正向的例子

從待驗證的證書開始,向前遞歸,直到一個已知的可信賴的CA爲止。這種方法只使用於應該意義上的層次證書結構。

比如:User2收到User1的證書,需要驗證。User2會找到User1的證書是CA1頒發的,獲取CA1的證書,然後查看CA1的證書是CA0頒發的,並且CA0是可信賴的CA。所以最終構建一個完整的證書鏈:User1--CA1--CA0


構建證書鏈路逆向的例子

適用於層次結構和分佈式結構混合的場景。如下圖所示,User3可信賴的CACA7如果User3收到User2的證書,需要驗證其有效性。我們需要在User2CA7之間創建證書鏈路。左邊部分是嚴格的層次結構,可以使用向前遞歸的部分,建立鏈路User2--CA4--CA2--CA0。接下來,剩餘工作是建立CA0CA7的鏈路,右邊部分是分佈式結構,適用於反向方法建立鏈路,需要藉助證書的issuedByThisCA 參數,從而建立CA0--CA5--CA7。所以最終建立的證書鏈路是User2--CA4--CA2--CA0----CA5--CA7--User3

注意:反向建立證書鏈路的效率低,因爲需要排除很多分支。

 

總結:在嚴格的層次結構中,適用於正向建立鏈路。在分佈式結構中,適用反向建立證書鏈路,如果使用正向的方法,效率低。

9. 證書存儲格式

Ø  DER-encoded binary X.509
The Distinguished Encoding Rules (DER) format supports storage of a single certificate.This format does not support storage of the private key or certification path.

Ø  Base64-encoded X.509
The Base64 format supports storage of a single certificate. This format doesnot support storage of the private key or certification path.

ePDG使用這種證書。

Ø  Personal Information Exchange (PKCS #12)
The Personal Information Exchange format (PFX, also called PKCS #12) supportssecure storage of certificates, private keys, and all certificates in acertification path.

The PKCS #12 format is the only file format that can be used to export acertificate and its private key.

Ø  Cryptographic Message Syntax Standard (PKCS #7)
The PKCS #7 format supports storage of certificates and all certificates in thecertification path.

文件名後綴

格式

.pem

base64

.cer

.crt

.der

通常是DER格式,也可能是base64

 

.p7b

.p7c

PKCS#7

 

.pfx

Predecessor of PKCS#12

.p12

PKCS #12


10. 證書應用於ePDG

10.1拓撲圖

網絡拓撲圖

UE通過證書認證WMG,WMG通過AAA來驗證UE,所以WMG不需要UE的證書。UE必須無條件信任WMG的根證書,所以UE是通過第三方可靠途徑獲取WMG的根證書的。這就是WMG在給UE下發的證書鏈中,包括了所有證書,除了WMG的根證書的原因。

WMG使用SCEP協議註冊證書和下載證書。SCEP的全稱是Simplecertificate enrollment protocol。SCEP支持如下的功能:

1 下載證書和CRL。

2 證書的註冊和查詢。

10.2註冊證書

1)  ePDG向CA發送GetCaCert請求, CA會把整個證書鏈(除了ePDG的證書,因爲還沒有生成)發給ePDG。收到證書鏈後,ePDG需要驗證證書鏈。

•如何驗證根證書:只驗證簽名。

•以明文傳輸CA證書。

2)  ePDG向CA發送PKCSReq,向CA申請爲ePDG註冊一個證書,PKCSReq包含了很多參數(參見PKI模塊的配置)。

•證書的格式是PKCS7,因爲PKCS7可以存儲private key。ePDG需要轉換成base64。

•證書傳輸使用ePDG上級CA的私鑰加密。因爲需要傳輸private key,所以傳輸需要加密。

10.3 證書的使用

證書導致UDP過大

在現場出現這樣的問題:上圖的第7條消息由於攜帶了證書,UDP包的大小輕鬆超過MTU,導致分片。但是在現場,很多AP的版本比較老,不支持UDP分片,導致第7條消息被AP丟棄,IKE無法建立會話。

兩種解決方案:

1)  如果第4條消息攜帶了Notify(HTTP_CERT_LOOKUP_SUPPORTED),意味着UE支持通過HTTP協議獲取證書。ePDG可在第7條消息中用URL代替證書來保證IKE消息的長度小於AP的MTU。ePDG內置了一個HTTP服務器來支持UE通過HTTP獲取證書。

2) 使用ECC簽名算法。在同等安全的需求小,ECC的key的長度原因小於RSA和DSA算法。

11. 算法比較

圖在同中安全等級下,各個算法所需要的key的長度的比較

圖 RSA算法和ECC算法效率的比較。RSA加密慢,解密快;ECC加密快,解密慢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章