数字证书的两个基本概念:
1. 公钥加密,私钥解密;私钥签名,公钥验签。
2. 根证书应该被无条件信任,根证书通过可靠途径获得。
提供证书回收状态查询的两种机制:
1.OCSP --online certficate status protocol (rfc2560)。Firefox3 缺省就是使用OCSP协议。
2.CRLs --certificate revocation lists
end entity
CA:certification authority
RA:registeration authority, 向CA申请证书之间,需要先向RA注册。
CRL Issuer:代替CA发布CRLs
repository:存储证书和CRL
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是最可信的。
证书分为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签名。存在的必要性??
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.
# 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:
证书链路{1,...,n-1,n}
1) 1是2的issuer,2是3的issure,...,n-1是n的issuer
2) 1是可信任的证书
3) 待验证的证书是n
4) 所有证书都在有效期内
在证书链中,一个证书不可以出现两次。
方法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可以有多个公钥密钥对。
方法一: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的路径。
构建证书链的两个方向:
正向:从实体证书到可信赖证书,适用于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。
注意:反向建立证书链路的效率低,因为需要排除很多分支。
总结:在严格的层次结构中,适用于正向建立链路。在分布式结构中,适用反向建立证书链路,如果使用正向的方法,效率低。
Ø 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 |
网络拓扑图
UE通过证书认证WMG,WMG通过AAA来验证UE,所以WMG不需要UE的证书。UE必须无条件信任WMG的根证书,所以UE是通过第三方可靠途径获取WMG的根证书的。这就是WMG在给UE下发的证书链中,包括了所有证书,除了WMG的根证书的原因。
WMG使用SCEP协议注册证书和下载证书。SCEP的全称是Simplecertificate enrollment protocol。SCEP支持如下的功能:
1 下载证书和CRL。
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,所以传输需要加密。
证书导致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算法。
图在同中安全等级下,各个算法所需要的key的长度的比较
图 RSA算法和ECC算法效率的比较。RSA加密慢,解密快;ECC加密快,解密慢。