交叉证书-阿里云开发者社区

开发者社区> 云计算> 正文

交叉证书

简介: ## 证书4要素 pubkey(公钥) ,有一个其一一对应的私钥,由证书拥有者保存。 subject(名字),可以理解为证书的名字,你可以理解为 网站的域名。 issuer(颁发者的名字),即上级证书的subject。 signature(签名) ,上级证书使用私钥对当前证书进行签名的值。 ## 证书签名 假设 有 3 级 证书 ![image.png](

证书4要素

pubkey(公钥) ,有一个其一一对应的私钥,由证书拥有者保存。
subject(名字),可以理解为证书的名字,你可以理解为 网站的域名。
issuer(颁发者的名字),即上级证书的subject。
signature(签名) ,上级证书使用私钥对当前证书进行签名的值。

证书签名

假设 有 3 级 证书

image.png
首先 ,R1 CA证书 是由 R1证书签发,而www.taobao.com是由R1 CA证书签发。

签发过程核心就是签名,比如 签发R1 CA证书时,拿R1证书的私钥对R1 CA证书进行数字签名操作,签名的值添加在R1 CA证书中。同理签发www.taobao.com这张证书,是用 R1 CA证书的私钥对该证书进行数字签名,签名值添加在www.taobao.com的证书中。

被数字签名的值,是该证书的HASH。举个例子当 使用 R1证书加签R1 CA时,其签名值是 R1_privatekey_sign( HASH(R1 CA) )。

数字证书校验

由于 私钥签名的数据,可以使用公钥校验,假设我们信任R1 + R1 CA证书,我们收到www.taobao.com这个证书,如何校验?

首先,构造证书链,即 拿 server的证书然后和本地(操作系统或者浏览器内置)的可信证书进行上级证书的查找,一般通issuer字段查找(还有通过keyid的方式,这里不讨论),比如 www.taobao.com的证书的issuer是R1 CA,那么在本地仓库里面找R1 CA,接着找R1 CA的上级证书,直到找到最高一级的证书,即R1证书。

第二步,光靠名字来找上级是不够的,因为名字可以伪造,我们还需要对证书的签名值进行校验,我们知道,私钥签名的数据可以使用公钥来校验,所以,首先拿R1 CA证书的的公钥,去解开 www.taobao.com签名值,然后校验其值是否是www.taobao.com的hash,同理可以验证证书链中R1是否是R1 CA的上级证书。 签名校验成功,表明了2点
1:上下级关系正确
2:证书被未篡改,如果证书被篡改,使用上级证书的公钥解开当前证书后,会发现其值和当前证书的HASH值不一样

交叉证书

如果一个CA机构有如下2个受信的链:

image.png

那么又 R1 CA签发的证书只能由R1+R1 CA进行验证;视同 R3 CA签发的证书只能由R3+R3 CA进行签发。

但是有些客户端只有R1和R1 CA而没有R3以及R3 CA,而有些客户端只有R3和R3 CA而没有R1 以及 R1 CA ,我们能不能让证书有2条可以用来验证的链呢? 比如 www.taobao.com->...->R1 是一条证书链, www.taobao.com->...->R3 也算一条证书链,这样假设有些客户端只信任R1或者R3也能同时验证同一个证书。

为了达到这个目的,我们需要做这么一个操作,就是 使用 R1 对 R3进行签名生成一张叫做 R1-R3 的证书(即使用R1的私钥对R3进行签名)。

image.png

注意,R1-R3 拥有和 R3一模一样的 subject+公钥,和R3唯一的区别就是 R3是自签名证书,其issuer是R3自己,而 R1-R3 是中间证书,其issuer是R1。

接着,使用 R1-R3 来对 签发 www.taobao.com ,即 www.taobao.com 的 issuer 是R3(上面说了,issuer就是个字符串,和上级证书的subject一样,而R1-R3 这张证书的subject就是R3),这张 R1-R3 就是所谓的交叉证书corss-certificate

image.png

www.taobao.com 这样的证书,如何能让只信任R1的客户端进行验证:

1、构造证书链
服务器发送 www.taobao.com + R1 R3,客户端构造证书链,自然,通过找 www.taobao.com 的issuer:R3,在server发送的证书中找到了 R1 R3这张证书 ,通过 R1 R3 的issuer:R1,在本地找到了R1。
2、验证证书链
略,通上节一致,通过上级证书的公钥验证当前证书的签名值。

www.taobao.com 这样的证书,如何能让只信任R3的客户端进行验证:

1、构造证书链
服务器发送 www.taobao.com ,客户端构造证书链,自然,通过找 www.taobao.com 的issuer:R3,在本地找到了受信的R3 ,R3是根证书,证书链构造完成。

2、验证证书链
虽然,实际上 www.taobao.com 的证书是由 R1 R3这张证书签名的,但是上面说过,R1 R3这张证书的公钥和R3一样,也就意味着使用R1 R3的公钥,能够验证 www.taobao.com的签名值。

结尾

实际上,使用R1-R3www.taobao.com签名的效果,和使用R3www.taobao.com签名的效果是一模一样的,因为R1-R3R3拥有相同的subject以及公钥,自然拥有相同的私钥。

说的通俗一点,就是CA机构通过欺骗的方式,签了一张交叉证书,这张证书能够让客户端的证书链引导到R1。

交叉证书有什么作用?

1、兼容老设备。假设,老的客户端只支持R1根证书,但是我们的证书是R3是签名的,那需server发送交叉证书,来“引导”客户端使用R1校验。

2、CA机构合并,假设R1 收购了R3,R1为了“收回最终校验权”,可以生成这么一个交叉证书,那么使用R3签名的证书,最后都被R1来校验。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章