X.509

X.509

 

编译:嵇志国

时间:2011.7.15

 

在密码学当中,X.509是SSO(单点登录,Single Sign-on)和PMI(授权管理基础设施,Privilege ManagementInfrastructure)的PKI(公钥基础设施,Public Key Infrastructure)标准。X.509描述了公钥证书、CRL(证书吊销列表)、属性证书、证书路径验证算法以及其他事项的标准格式。

历史和用途

X.509在1988年7月3日首次发布v1版本,与X.500标准一起出现。它假设了一个严格的CA层次结构来发布证书。这个和Web信任模型形成了对比,像PGP,任何人(不仅仅是特定的CA)都可以签署证书,并可以验证别人的密钥证书的有效性。X.509 V3包括了这种灵活性,来支持像Bridges和Meshes这样的技术(RFC4158中有描述)。它可以用在点对点、类似OpenPGP这样的Web信任中,但是到2004为止还很少那样使用。仅仅是主权国家曾实现了X.500系统,用于在履行合约中共享国家识别信息的目的。IETF的PKI(X.509)(或者叫PKIX)工作组改进了该标准,使其更适合Internet上灵活多变的组织。实际上,术语X.509证书通常是指IETF的PKIX证书和CRL Profile(证书吊清单结构),这些在RFC5280中有描述,通常指PKIX for PKI(X.509),符合X.509 V3证书标准。

证书

在X.509体系中,CA发行一个证书,按照X.500的传统,将一个公钥绑定到一个可辨别的特定名称,或者绑定到一个别名,例如Email地址或者DNS名称。

一个组织信任的根证书可以分布到所有雇员中,以便使用公司的PKI系统。IE、Netscape/Mozilla、Opera、Safari和Chrome这样的浏览器都预装了根证书,因此,来自大厂商的SSL证书可以立即工作;实际上,浏览器开发商为其用户决定了哪些CA是可以信任的第三方。

X.509也包括CRL实现的标准,这是PKI系统常常被忽视的方面。IETF批准的证书有效性检查方式是OCSP(Online Certificate StatusProtocol)。Firefox 3 默认开启了OCSP检查,这也是包括Vista及其后来版本Windows系统的默认设置。

证书结构

标准所规定的证书结构采用规格语言来表示,叫ASN.1(Abstract Syntax NotationOne)。

X.509 v3数字证书结构如下:

  • Certificate
    • Version
    • Serial Number
    • Algorithm ID
    • Issuer
    • Validity
      • Not Before
      • Not After
    • Subject
    • Subject Public Key Info
      • Public Key Algorithm
      • Subject Public Key
    • Issuer Unique Identifier (optional)
    • Subject Unique Identifier (optional)
    • Extensions (optional)
      • ...
  • Certificate Signature Algorithm
  • Certificate Signature

每个extension有自己的ID,以Object identifier、值集合、critical或者non-critical非关键指示符等来表示。在遇到不能识别的critical extension,或者critical extension所包含的信息不能处理时,使用证书的系统必须拒绝证书。在不能识别non-critical extension时,可以忽略,但在能够识别时,必须处理。

RFC 1422中给出了V1版证书结构。

ITU-T在V2中引入了issuer和subject 唯一标识符,以允许在后来的某个时间重用issuer和subject名称。一个重用的例子是,当一个CA破产,其名称被从国家的公用列表中删除,过了一段时间后,另一个相同名称的CA可能注册了,而这个CA和先前的CA毫无关系。然而,IETF建议不允许重用issuer和subject名称。因此,V2版本没有在Internet上获得广泛使用。

Extensions是在V3中引入的。CA可以使用extensions发布一个证书只用于特定的用途(例如,仅用于签名数字对象)。每个extension可以是critical或者non-critical的。如果一个extension是critical的,而处理该证书的系统不能识别这个extension,或者不能处理它,那么,系统必须拒绝整个证书。另一方面,一个non-critical extension在不能识别时,可以忽略,但如果能够识别,则必须处理。系统忽略时,可以处理证书的其余部分。

在所有版本中,某一CA发行的每个证书的序列号必须唯一(RFC 2459中有提及)。

Extensions标识一个证书的特定用途

Ø  Basic Constraints用来表明该证书是否属于一个CA

Ø  Key usage用来描述证书包含的公钥用途

Ø  Extended Key usage用来表明证书中包含的公钥目的。NSS(网络安全服务)使用这个extension描述证书类型。

正如RFC 5280中所提到的,如果key usage 和extended key usage 这两个extension同时出现,则两个都必须被处理,并且只有二者关于证书的用途描述一致时,证书才可以使用。

证书文件扩展名

Ø  .pem:(Privacy Enhanced Mail),Base64编码的DER证书,包含在"-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----"之间

Ø  .cer、.crt、.der:通常使用二进制DER格式,但是Base64编码的证书也很常见(参加上面的.pem)

Ø  .p7b、.p7c:PKCS#7 SignedData结构,不带数据,只有Certificate(s)或者CRL(s)

Ø  .P12:PKCS#12,可以包含Certificate(s)(Public)和私钥(密码保护)

Ø  .pfx:PFX,PKCS#12的前身(通常包含PKCS#12格式的数据,例如,IIS中生成的PFX文件)

PKCS#7是一个签名和加密数据的标准(官方称为enveloping)。由于需要证书来验证签名数据,可能将证书包含在SignedData结构中。.p7c文件是一个蜕变了SignedData结构,没有任何签名数据。

PKCS#12从personal informationexchange(PFX)标准发展而来,用来在单个文件中交换公共和私有对象。

X.509证书样本

这是一个解码后的X.509证书样本,用于www.freesoft.org网站,采用OpenSSL生成——实际证书大小约1KB。该证书由Thawte发行(通过Verisign获得?),这在Issuer字段有描述。证书的Subject包含了许多个人信息,但最重要的部分通常是common name(CN),因为这是必须与待认证主机匹配的部分。证书还包括RSA公钥(modulus和public exponent),紧跟着是签名,此签名使用Thawte的RSA私钥对证书第一部分的MD5散列进行签名而得(使用加密操作)。

 

第一个证书:

Certificate:
   Data:
       Version: 1 (0x0)
       Serial Number: 7829 (0x1e95)
       Signature Algorithm: md5WithRSAEncryption
       Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc,
               OU=Certification Services Division,
               CN=Thawte Server CA/emailAddress=server-certs@thawte.com
       Validity   
           Not Before: Jul  9 16:04:02 1998 GMT
           Not After : Jul  9 16:04:02 1999 GMT
       Subject: C=US, ST=Maryland, L=Pasadena, O=Brent Baccala,
                OU=FreeSoft, CN=www.freesoft.org/emailAddress=baccala@freesoft.org
       Subject Public Key Info:
           Public Key Algorithm: rsaEncryption
           RSA Public Key: (1024 bit)
               Modulus (1024 bit):
                   00:b4:31:98:0a:c4:bc:62:c1:88:aa:dc:b0:c8:bb:
                   33:35:19:d5:0c:64:b9:3d:41:b2:96:fc:f3:31:e1:
                   66:36:d0:8e:56:12:44:ba:75:eb:e8:1c:9c:5b:66:
                   70:33:52:14:c9:ec:4f:91:51:70:39:de:53:85:17:
                   16:94:6e:ee:f4:d5:6f:d5:ca:b3:47:5e:1b:0c:7b:
                   c5:cc:2b:6b:c1:90:c3:16:31:0d:bf:7a:c7:47:77:
                   8f:a0:21:c7:4c:d0:16:65:00:c1:0f:d7:b8:80:e3:
                   d2:75:6b:c1:ea:9e:5c:5c:ea:7d:c1:a1:10:bc:b8:
                   e8:35:1c:9e:27:52:7e:41:8f
               Exponent: 65537 (0x10001)
   Signature Algorithm: md5WithRSAEncryption
       93:5f:8f:5f:c5:af:bf:0a:ab:a5:6d:fb:24:5f:b6:59:5d:9d:
       92:2e:4a:1b:8b:ac:7d:99:17:5d:cd:19:f6:ad:ef:63:2f:92:
       ab:2f:4b:cf:0a:13:90:ee:2c:0e:43:03:be:f6:ea:8e:9c:67:
       d0:a2:40:03:f7:ef:6a:15:09:79:a9:46:ed:b7:16:1b:41:72:
       0d:19:aa:ad:dd:9a:df:ab:97:50:65:f5:5e:85:a6:ef:19:d1:
       5a:de:9d:ea:63:cd:cb:cc:6d:5d:01:85:b5:6d:c8:f3:d9:f7:
       8f:0e:fc:ba:1f:34:e9:96:6e:6c:cf:f2:ef:9b:bf:de:b5:22:
       68:9f
 

为了验证这个证书,需要第二个证书,其Issuer要匹配第一个证书的Issuer(Thawte Server CA)。验证过程:首先,验证第二个证书的类型是CA类型,就是说,可以用来发行其他证书。这是通过检查X509v3 extension区的CA属性完成的。然后,用第二个证书的RSA公钥对第一个证书的签名进行解码,获得MD5散列,这个散列必须与对第一个证书的其余部分计算的实际MD5散列相匹配。这样就验证了第一个证书。

 
第二个证书:
Certificate:
   Data:
       Version: 3 (0x2)
       Serial Number: 1 (0x1)
       Signature Algorithm: md5WithRSAEncryption
       Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc,
               OU=Certification Services Division,
               CN=Thawte Server CA/emailAddress=server-certs@thawte.com
       Validity
           Not Before: Aug  1 00:00:00 1996 GMT
           Not After : Dec 31 23:59:59 2020 GMT
       Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc,
                OU=Certification Services Division,
                CN=Thawte Server CA/emailAddress=server-certs@thawte.com
       Subject Public Key Info:
           Public Key Algorithm: rsaEncryption
           RSA Public Key: (1024 bit)
               Modulus (1024 bit):
                   00:d3:a4:50:6e:c8:ff:56:6b:e6:cf:5d:b6:ea:0c:
                   68:75:47:a2:aa:c2:da:84:25:fc:a8:f4:47:51:da:
                   85:b5:20:74:94:86:1e:0f:75:c9:e9:08:61:f5:06:
                   6d:30:6e:15:19:02:e9:52:c0:62:db:4d:99:9e:e2:
                   6a:0c:44:38:cd:fe:be:e3:64:09:70:c5:fe:b1:6b:
                   29:b6:2f:49:c8:3b:d4:27:04:25:10:97:2f:e7:90:
                   6d:c0:28:42:99:d7:4c:43:de:c3:f5:21:6d:54:9f:
                   5d:c3:58:e1:c0:e4:d9:5b:b0:b8:dc:b4:7b:df:36:
                   3a:c2:b5:66:22:12:d6:87:0d
               Exponent: 65537 (0x10001)
       X509v3 extensions:
           X509v3 Basic Constraints: critical
               CA:TRUE
   Signature Algorithm: md5WithRSAEncryption
       07:fa:4c:69:5c:fb:95:cc:46:ee:85:83:4d:21:30:8e:ca:d9:
       a8:6f:49:1a:e6:da:51:e3:60:70:6c:84:61:11:a1:1a:c8:48:
       3e:59:43:7d:4f:95:3d:a1:8b:b7:0b:62:98:7a:75:8a:dd:88:
       4e:4e:9e:40:db:a8:cc:32:74:b9:6f:0d:c6:e3:b3:44:0b:d9:
       8a:6f:9a:29:9b:99:18:28:3b:d1:e3:40:28:9a:5a:3c:d5:b5:
       e7:20:1b:8b:ca:a4:ab:8d:e9:51:d9:e2:4c:2c:59:a9:da:b9:
       b2:75:1b:f6:42:f2:ef:c7:f2:18:f9:89:bc:a3:ff:8a:23:2e:
       70:47
 

从第二个证书可以看出,它是一个自签名的证书,因为issuer和subject是一样的。无法验证这个证书,除了用它自己证明自己。而实际上,这类顶级证书是手工存储在浏览器中的。Thawte是Microsoft和Netscape都认可的根CA之一。这个证书随浏览器一起提供并且默认为信任它。作为长期有效、全球信任的证书,能够对任何东西签名(因为在X509v3 Basic Constraints没有任何约束),它的匹配私钥必须仔细小心保管。

安全性

有很多关于PKI问题的出版物。由Bruce Schneier, PeterGutmann 和其他一些安全专家出版。

规范:复杂而缺乏质量

X.509主要为X.500标准设计,但今天的使用情况是以Web为中心。许多特性与今天很少相关或者无关。X.509规范有很多麻烦:功能太多太重量级了,描述不足,标准信息分布在不同标准组织的许多不同文档中。开发了一些概述文件用来解决这些问题,这又引入了互操作的问题,且并没有解决这些问题。

体系结构的缺陷

Ø  使用无效证书的黑名单(CRLs和OCSP)而不是白名单

Ø  因为大小和分布模式所限,CRLs特别弱

Ø  含糊不清的OCSP语义和缺乏历史吊销状态

Ø  根证书的吊销仍为解决

Ø  聚集问题:省份声明(用ID验证)、属性声明(一批审查的属性)和策略声明放到了一起。这带来了隐私、策略映射和维护问题

Ø  委托问题:CAs在技术上不能限制子CAs只发行限定命名空间和属性集的证书,X.509的这个特性并没有使用。因此,在Internet上存在大量CAs,对它们和它们的策略进行分类根本不可能。授权委托在一个组织中根本不能处理,而这是常常见到的业务。

Ø  联邦问题:由子CAs、桥接和交叉签名带来的证书链使得验证复杂、时间开销昂贵。路径验证的语义可能含糊不清。第三方信任的分层结构是仅有的模型。这在双边信任关系已经存在的情况下,显得不方便。

商业证书授权问题

Ø  业务模型缺陷:由Subject购买,而不是依赖方购买证书。RA(?)常常购买最便宜的,在市场竞争中,无人为质量买单。

Ø  CAs几乎全部拒绝为用户提供保证

Ø  过期日期:应该用来作为密钥强度,这就足够了。但有时CAs滥用这个时间向用户不断收费。密钥的不必要更新,给用户带来了不必要的负担

Ø  客户证书对于专门攻击者没有任何保护。

Ø  在浏览器中,安全性由最弱的CA决定。存在非常弱的CAs

Ø  “用户使用未定义的证书请求协议获得一个证书,这个证书发布在不清楚的地方,在一个不存在的目录中,无法撤除它”。

实现问题

Ø  设计缺陷、bugs、对标准的不同解释以及缺乏不同标准之间的互操作性,这些带来实现问题。一些问题如下:

Ø  许多实现关闭了吊销检查

Ø  看着过期,策略没有强制

Ø  在所有浏览器中默认打开,包括代码签名,这可能会导致基础设施崩溃

Ø  DNs(?)复杂且难以理解(缺乏标准化,国际化问题,等等)

Ø  RFC822Name(?)有2个记号

Ø  命名和策略约束很少得到支持

Ø  Key usage被忽略,列表中的第一证书被使用了

Ø  强制定制OIDs困难

Ø  属性不应critical,因为它使得客户端崩溃

Ø  未明确属性长度导致产品特定的限制差别大

漏洞利用

Ø  2005年,Arjen Lenstra 和 Benne de Weger演示了“如何利用散列冲突构造两个X.509证书,包含同样的前面和不同的公钥”,通过利用MD5散列函数的冲突攻击完成。

Ø  2008年,Alexander Sotirov 和 Marc Stevens在Chaos CommunicationCongress上提供了一个实际攻击案例,允许他们创建一个暴力CA,所有通用浏览器都能够接受。通过利用这个漏洞,RapidSSL仍然在发行基于MD5的X.509证书。

Ø  基于SHA-1的X.509证书知道最近还是被认为安全的。2009年4月的 Eurocrypt Conference大会上,来自Macquarie大学的澳大利亚研究人员发布了陈述:“SHA-1自动差异路径搜索”。研究者可以演绎出一种方法,通过安排某些量的顺序,增加了冲突的可能性。

Ø  域验证的证书(“垃圾证书”)仍然受到Web浏览器的信任,可以轻易从商业CAs处获得。

Ø  EV-certificates 作用非常有限,因为浏览器根本没有策略,不允许DV-certificates,2009年, Zusman and Sotirov Blackhat

Ø  存在X.509的实现错误导致证书受到攻击,例如使用无结束符的Subject名称证伪,或者代码注入。2009年,Marlinspike Blackhat

符合X.509的PKI标准

Ø  PKCS#7:Cryptographic MessageSyntax Standard - public keys with proof of identityfor signed and/or encrypted message for PKI

Ø  SSL:cryptographic protocolsfor internet secure communications

Ø  Online Certificate StatusProtocol (OCSP) / Certificate Revocation List (CRL):thisis for validating proof of identity

Ø  PKCS#12:(Personal InformationExchange Syntax Standard) - used to store a private key with the appropriatepublic key certificate

CA

CA是个实体,它发行数字证书给其他机构使用,它是受到信任的第三方机构。要求CA是很多公钥基础设施的特点。

有很多商业CA提供服务,研究所和政府可以有他们自己的CA,也有很多免费CA

PKI(X.509)工作组

PKI(X.509)工作组(PKIX)是IETF的一个工作组,专门致力于创建基于X.509证书的PKI相关问题的RFC和其他标准文档。PKIX在1995年秋天,与NIST(National Institute ofStandards and Technology)一同成立。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值