數字證書的兩個基本概念:
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頒發證書
第二層:PCAs,level-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.註冊。CA或RA可以接受註冊。
2.初始化。install key materials
3.頒發證書
4.key pair recovery
5.key pair update。All 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) 1是2的issuer,2是3的issure,...,n-1是n的issuer
2) 1是可信任的證書
3) 待驗證的證書是n
4) 所有證書都在有效期內
在證書鏈中,一個證書不可以出現兩次。
8.2 如何獲取證書的頒發者
方法1:name chaining
藉助證書中的issuer/subject兩個字段。缺點:一個CA只能有一對公鑰密鑰對。
方法2:key 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可信賴的CA是CA7。如果User3收到User2的證書,需要驗證其有效性。我們需要在User2和CA7之間創建證書鏈路。左邊部分是嚴格的層次結構,可以使用向前遞歸的部分,建立鏈路User2--CA4--CA2--CA0。接下來,剩餘工作是建立CA0到CA7的鏈路,右邊部分是分佈式結構,適用於反向方法建立鏈路,需要藉助證書的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加密快,解密慢。