X.509

✍ dations ◷ 2025-04-26 16:39:28 #X.509

X.509是密码学里公钥证书的格式标准。X.509证书已应用在包括TLS/SSL在内的众多网络协议里,同时它也用在很多非在线应用场景里,比如电子签名服务。X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)。

X.509还附带了证书吊销列表和用于从最终对证书进行签名的证书签发机构直到最终可信点为止的证书合法性验证算法。X.509是ITU-T标准化部门基于他们之前的ASN.1定义的一套证书标准。

X.509最早与X.500一起发布于1988年7月3日。它假设有一套严格的层次化的证书颁发机构(CA)。X.500系统仅由主权国家实施,以实现国家身份信息共享条约的实施目的;而IETF的公钥基础设施(X.509)简称PKIX工作组将该标准制定成适用于更灵活的互联网组织。而且事实上X.509认证指的是RFC5280里定义的X.509 v3,包括对IETF的PKIX证书和证书吊销列表,通常也称为公钥基础设施(PKI)。

在X.509里,组织机构通过发起证书签名请求(英语:Certificate Signing Request)(CSR)来得到一份签名的证书。首先需要生成一对密钥对,然后用其中的私钥对CSR进行数字签署(签名),并安全地保存私钥。CSR进而包含有请求发起者的身份信息、用来对此请求进行验真的的公钥以及所请求证书专有名称。CSR里还可能带有CA要求的其它有关身份证明的信息。然后CA对这个CSR进行签名。组织机构可以把受信的根证书分发给所有的成员,这样就可以使用公司的PKI系统了。浏览器(如Firefox)或操作系统预装有可信任的根证书列表,所以主流CA发布的TLS证书都直接可以正常使用。浏览器的开发者直接影响着它的用户对CA的信任。X.509也定义了CRL实现标准。另一种检查合法性的方式是OCSP。

证书组成结构标准用ASN.1(一种标准的语言)来进行描述.X.509 v3 数字证书结构如下:

所有扩展都有一个ID,由object identifier来表达.它是一个集合,并且有一个标记用与指示这个扩展是不是决定性的。证书使用时,如果发现一份证书带有决定性标记的扩展,而这个系统并不清楚该扩展的用途,那么要拒绝使用它。但对于非决定性的扩展,不认识可以予以忽略。RFC 1422给出了v1的证书结构ITU-T在v2里增加了颁发者和主题唯一标识符,从而可以在一段时间后可以重用。重用的一个例子是当一个CA破产了,它的名称也在公共列表里清除掉了,一段时间之后另一个CA可以用相同的名称来注册,即使它与之前的并没有任何瓜葛。不过IETF并不建议重用同名注册。另外v2在Internet也没有多大范围的使用。v3引入了扩展。CA使用扩展来发布一份特定使用目的的证书(比如说仅用于代码签名)所有的版本中,同一个CA颁发的证书序列号都必须是唯一的。

RFC 5280(及后续版本)定义了一些扩展用来指定证书的用途。 它们的多数都来源于joint-iso-ccitt(2) ds(5) id-ce(29) OID。在4.2.1里定义的几个常用扩展定义如下:

通常情况下,一份证书有多个限制用途的扩展时,所有限制条件都应该满足才可以使用。RFC 5280里有对一个同时含有keyUsage和extendedKeyUsage的证书的例子,这样的证书只能用在两个扩展中都指定了的用途。比如网络安全服务决定证书用途时会同时对这两个扩展进行判断

X.509有多种常用的扩展名。不过其中的一些还用于其它用途,就是说具有这个扩展名的文件可能并不是证书,比如说可能只是保存了私钥。

PKCS#7 是签名或加密数据的格式标准,官方称之为容器。由于证书是可验真的签名数据,所以可以用SignedData结构表述。 .P7C文件是退化的SignedData结构,没有包括签名的数据。

PKCS#12 由PFX进化而来的用于交换公共的和私有的对象的标准格式。

证书链(也就是RFC 5280里的证书路径)是从终端用户证书后跟着一系列的CA证书,而通常最后一个是自签名证书,并且有如下关系:

证书链用于检查目标证书(证书链里的第一个证书)里的公钥及其它数据是否属于其主题。检查是这么做的,用证书链中的下一个证书的公钥来验证它的签名,一直检查到证书链的尾端,如果所有验证都成功通过,那个这个证书就是可信的。

下面是对RFC 5280里定义的证书路径合法性算法的一个简要介绍,包括对证书的有效期、CRL等其它额外的检查。

对于具体的证书来说,有一点需要注意的是它可能存在于很不一样的两条或多条证书链中,并且都是合法的。这是因为CA证书可以来自多个颁发者,或者来自相同颁发者但用不同的私钥签发,这样在CA证书上会出现分叉,从而可以出现多条证书链。这也是PKI之间交叉认证和其它应用的关键所在。看下面的例子:

在这两个图里:

为了让PKI2的用户证书也得到PKI1的信任,CA1生成一包含CA2公钥的证书cert2.1这时候cert2和cert2.1具体相同的主题及公钥,cert2.2 (User 2)就有了两条合法的证书链:"cert2.2 → cert2" and "cert2.2 → cert2.1 → cert1"。

CA2也可以生成类似的包含有CA1公钥的证书cert1.1,以便PKI1的用户(比如User 1)的证书能在PKI2得到认证。

Understanding Certification Path Construction (PDF). PKI Forum. September 2002 . (原始内容 (PDF)存档于2019-02-04). 为了证书颁发者从旧的私钥顺利地转移到新的私钥,他可以颁发两个证书,其中一个是新的私钥对旧的公钥进行签名,另一个是旧的私钥对新的公钥的签名,这两个都是机构自己给自己颁发的证书,但都不是自签名证书。注:另外还存在新旧两个自签名证书。 

假设cert1和cert3具有相同的公钥,对于cert5来说有两条合法的证书链,cert5 → cert1 和 cert5 → cert3 → cert2, cert6的情况也类似。这样就允许老的用户证书可以在新旧两个根证书之间平滑转移。

下面是GlobalSign颁发的用于wikipedia.org以及一些其它Wikipedia网站X.509证书。证书颁发者填在颁发者(Issuer)字段,主题内容里是组织机构Wikipedia的描述,主题备用名称是那些采用该证书的服务器的主机名。主题公钥里的信息表明采用的是椭圆曲线公共密钥,位于最后的签名算法表示它是由GlobalSign用其私钥并采用带RSA加密的SHA-256算法进行签名的。

  認證:          版本: 3 (0x2)        序號: 10:e6:fc:62:b7:41:8a:d5:00:5e:45:b6      簽章演算法: sha256WithRSAEncryption        發行者: C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - SHA256 - G2      有效期開始時間: Nov 21 08:00:00 2016 GMT      有效期結束時間: Nov 22 07:59:59 2017 GMT         主體: C=US, ST=California, L=San Francisco, O=Wikimedia Foundation, Inc., CN=*.wikipedia.org  主體公鑰信息(subject public key info):            公鑰算法: id-ecPublicKey         256位的公鑰:                    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       額外資訊(extension):          密鑰使用:                敏感訊息(critical):是               公鑰用途:數位簽章,密鑰協商Key Agreement       授權相關訊息:                敏感訊息(critical):否                頒發者URI:http://secure.globalsign.com/cacert/gsorganizationvalsha2g2r1.crt  線上憑證狀態協定(OCSP)URI:http://ocsp2.globalsign.com/gsorganizationvalsha2g2         證書原則(Certificate Policies):                敏感訊息(critical):否          policy ID#1: 1.3.6.1.4.1.4146.1.20           CPS URI: https://www.globalsign.com/repository/          policy ID#2: 2.23.140.1.2.2          基本限制:                 CA:FALSE       憑證撤銷中心(X509v3 CRL Distribution Points):                敏感訊息(critical):否               URI:http://crl.globalsign.com/gs/gsorganizationvalsha2g2.crl       主體備用名稱:                敏感訊息(critical):否               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        (在額外訊息中的)密鑰使用目的:               敏感訊息(critical):否              目的1:TLS Web伺服器鑑定              目的2:TLS Web客户端鑑定    主體密鑰識別代碼(Subject Key Identifier):                敏感訊息(critical):否               密鑰id: 28:2A:26:2A:57:8B:3B:CE:B4:D6:AB:54:EF:D7:38:21:2C:49:5C:36    授權密鑰識別代碼(X509v3 Authority Key Identifier):                敏感訊息(critical):否               密鑰id:96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7C        簽章算法: sha256WithRSAEncryption             數位簽章: 8b:c3:ed:d1:9d:39:6f:af:40:72:bd:1e:18:5e:30:54:23:35:         ...


要验证这个证书,我们需要一个跟该证书颁发者及授权密钥标识符

都匹配的中间证书

配置正确的服务器可以在TLS连接创建的握手阶段同时提供其中间证书。但是也有可能需要根据证书里颁发者的URL去获取中间证书。

下面是证书颁发机构的证书示例。该证书是由下例根证书签名的用于颁发上例最终实体证书的证书。当然它的主题标识符跟上例证书的授权密钥标识符是相匹配的。

 证书:          版本: 3 (0x2)        序列号: 04:00:00:00:00:01:44:4e:f0:42:47      签名算法: sha256WithRSAEncryption        颁发者: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA      此前无效: Feb 20 10:00:00 2014 GMT      此后无效: Feb 20 10:00:00 2024 GMT         主题: C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - SHA256 - G2  主题公钥信息:            公钥算法: rsaEncryption        2048位的公钥:                    00:c7:0e:6c:3f:23:93:7f:cc:70:a5:9d:20:c3:0e:                    ...               指数: 65537 (0x10001)  X509 v3扩展:   X509v3 密钥使用:                关键:是               用于:证书签名, CRL签名          基本约束:               关键:是        证书颁发机构:是        路径长度限制:0    主题密钥标识符:                关键:否                密钥: 96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7C                96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7C        证书策略:               关键:否               策略1: 任何策略标识符            CPS URI: https://www.globalsign.com/repository/     CRL 分发点:               关键:否                URI:http://crl.globalsign.net/root.crl       授权相关信息:                关键:否  在线证书状态协议(OCSP)URI:http://ocsp.globalsign.com/rootr1     授权密钥标识符:               关键:否                    密钥:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B        签名算法: sha256WithRSAEncryption             数字签名:46:2a:ee:5e:bd:ae:01:60:37:31:11:86:71:74:b6:46:49:c8:         ...

根证书

下面是证书颁发机构的自签名根证书。它的颁发者和主题是相同的,可以用自身的公钥进行合法认证。证书认证过程也将在此终止。如果应用已经在它的可信公钥存贮里已经含有该公钥证书,那么TLS连接时的那个最终实体证书是可信的,否则就是不可信的。

 证书:          版本: 3 (0x2)        序列号: 04:00:00:00:00:01:15:4b:5a:c3:94    Signature Algorithm: sha1WithRSAEncryption        Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA        Validity            Not Before: Sep  1 12:00:00 1998 GMT            Not After : Jan 28 12:00:00 2028 GMT        Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA        Subject Public Key Info:            Public Key Algorithm: rsaEncryption                Public-Key: (2048 bit)                Modulus:                    00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b:                    ...                Exponent: 65537 (0x10001)        X509v3 extensions:            X509v3 Key Usage: critical                Certificate Sign, CRL Sign            X509v3 Basic Constraints: critical                CA:TRUE            X509v3 Subject Key Identifier:                 60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B    Signature Algorithm: sha1WithRSAEncryption         d6:73:e7:7c:4f:76:d0:8d:bf:ec:ba:a2:be:34:c5:28:32:b5:         ...

安全性

布鲁斯·施奈尔、彼得·古特曼及其他安全专家已经发布了很多PKI的安全问题。

相关

  • 海格力斯赫拉克勒斯(希腊语:Ηρακλής,Hēraklēs,引申自Hēra“赫拉”和kleos“荣耀”,即赫拉克勒斯被称为赫拉的荣耀,转写:Heracles,音译赫剌克勒斯、海格力斯、海克力士、赫克力士),是
  • 小目亚目(suborder)是生物分类法中的一级,一般是界于目和科之间,但有时亚目和科之间会再分下目(又译作次目)。亚目的拉丁文名称较无固定的字尾。下目(infra-order),又译作次目是生物分类
  • 守恒量在经典力学里,对于一个动力系统,随着时间的演进,所有保持不变的物理量都称为守恒量(conserved quantity),又称为运动常数。由于很多物理定律会表达某种守恒行为,对应的守恒量时常会
  • 锡的同位素锡(Sn,原子量:118.710(7))共有71个同位素,由于锡的质子数为幻数50,因此锡的同位素相较于邻近的核素都有较稳定的趋势,例如锡有7个稳定同位素和3个观测上稳定的同位素,这是所有化学元
  • 奥古斯特·雷尼奥·德·圣-让·当热利奥古斯特·米歇尔·埃蒂耶纳·雷尼奥·德·圣-让·当热利,第二代雷尼奥·德·圣-让·当热利伯爵(Auguste Michel Étienne Regnaud de Saint-Jean d'Angély, later 2nd Count
  • 徐梦洁徐梦洁(1994年6月19日-),中国流行乐女歌手、影视演员,ViVi杂志模特,少女偶像团体蜜蜂少女队风队成员,国家二级短跑运动员。2018年4月,参加腾讯视频综艺节目《创造101》,并于6月23的总
  • 平松岛平松岛(西班牙语:Isla Pinzón)是厄瓜多尔的岛屿,位于太平洋海域,属于加拉帕戈斯群岛的一部分,面积18平方公里,最高点海拔高度458米,岛上无人居住。坐标:0°36′S 90°39′W / 0.600
  • 卡尔·李卜克内西大楼坐标:52°31′34″N 13°24′47″E / 52.52611°N 13.41306°E / 52.52611; 13.41306卡尔·李卜克内西大楼(德语:Karl-Liebknecht-Haus)是位于德国柏林米特区的建筑,以德国共产党
  • 中国消费者协会中国消费者协会是中华人民共和国一个保护消费者权益的组织,也是改革开放后首个全国性的同类组织,成立于1984年12月26日,总部位于北京,挂靠于国家市场监督管理总局。1987年9月,中国消费者协会成为国际消费者联盟组织会员。1991年3月15日,中国消费者协会与中国中央电视台、中国消费者报社、中华工商时报社联合举办首届中国中央电视台3·15晚会。中国消费者协会每年召开一次理事会全体会议,会议闭幕期间由常务理事会暂代理事会职权。中国消费者协会拥有3·15图形商标(3·15数字及地球人型组合图)的专用权。
  • 伯恩哈德 (萨克森-迈宁根)伯恩哈德·弗里德里希·尤里乌斯·海因里希(Bernhard Friedrich Julius Heinrich;1901年6月30日-1984年10月4日),出生于科隆。萨克森-迈宁根亲王。萨克森-迈宁根王室首领,韦廷家族首领。是萨克森-迈宁根腓特烈王子与妻子利珀-比斯特菲尔德的阿德莱德女伯爵的幼子。前任王室首领格奥尔格的弟弟。