CA体系与证书——TLS安全加密的基础

为什么要建立证书体系 (PKI)

public key infrastructure,PKI 公钥基础设施,PKI的提供者狭义的被看做是CA,也就是颁发签署证书的权威机构。

之前论述的密钥交换过程与提到的身份认证,在实际互联网应用上的不足在于:之前论述的小范围的使用RSA算法,事先A B两方分享了公钥和私钥,然后在A B 之间进行保密通信是行得通的,可是要在广泛的互联网中使用,就存在很多问题。我假定一个网上银行的场景:

之前A没有登陆过网上银行(自然也就没有RSA中的公钥,实际中公钥存放在证书里):

客户A——>服务器B:hello 开启通信

服务器B——>客户A:hello,我是服务器B

客户A——>服务器B:开始身份认证, 并把公钥发给我,A在自己这边产生一个随机串作为身份认证标识传给B。

服务器B——>客户A:B使用私钥加密身份认证标识,然后把这个加密的标识 与 公钥一起传给A。

客户A:虽然使用公钥可以解密身份标识,但到底是不是B?? (因为任何人都可以生成RSA密钥对,RSA算法或别的算法都是公开的),到底是不是B??这个问题如果不采用“线下”手段是无解的。

DNS劫持或者中间人攻击都可以冒充B。冒充者自己完全可以生成一对RSA密钥。即使A不是第一次使用网上银行,之前已有了一个公钥P,那也是有问题的,因为密钥是要有有效期的,到时候要更换,攻击者可以诱使客户A更换自己生成的密钥。问题的根源在于,算法是公开的,人人都可以生成RSA密钥对,无法确认RSA密钥对到底是谁的。如果收到冒充服务器发过来的公钥,经过某种检查,能够发现这个公钥不是服务器的就可以解决这个问题。这就要引入权威第三方——CA。这就是要建立CA体系的原因。

 

证书与证书的验证

数字证书就是权威第三方签发的,可以解决上面的问题。一个证书包含以下的具体内容:

(1)证书的发布机构

(2)证书所有者(Subject)——可以简单理解为域名

(3)证书的有效期

(4)公钥

(5)签名所使用的算法

(6)指纹以及指纹算法

数字证书可以保证数字证书里的公钥确实是这个证书的所有者(Subject)的,证书可以用来确认对方的身份,上面说的网上银行从权威第三方申请到了CA证书(要走严格的流程)。

有了证书以后通信过程:

客户A——>服务器B:hello 开启通信。

服务器B——>客户A:hello,我是服务器B,这是CA证书。

客户A:验证这个数字证书到底是不是服务器B的,如果检查没有问题,进行下一步。

客户A——>服务器B:开始身份认证 (发一个随机串)。

服务器B——>客户A:加密随机串形成加密后的身份认证标识 。

客户A使用CA中的公钥解密身份认证标识以后比对之前的随机串,如果比对成功,就证明对方是服务器B,然后就可以正常通信了。有了证书以后可以避免有人去冒充B,要冒充就得有CA证书,其实证书是可以轻易得到的,E可以正常和B做一次正常通信,然后就得到证书了,问题关键在于,E没有这个证书对应的私钥,不能正确的响应A的身份认证请求。一切都源于证书,本质是公钥以证书形式唯一化了,那么私钥也唯一了,没有私钥冒充不成B。但是还不能解决证书造假这个问题,因为证书的格式和包括什么内容是公开的,是可以造出来的。

 

 

我们怎么验证一个证书是不是CA签发的呢?

CA证书的详细构成里面有2个重要的内容:

(5)签名所使用的算法 Signature algorithm :使用哪个算法加密了指纹,指纹的加密结果也叫数字签名。

(6)指纹(加密后的)以及指纹算法 Thumbprint, Thumbprint algorithm :指纹是个加密后的结果,是用来确保证书完整性的,保证证书不被篡改。

重点解释一下(5)和(6),使用(5)(6),就可以检验证书是不是由权威第三方(CA)颁发的。

原理就是在发布证书时,权威第三方使用指纹算法(一个hash算法)计算整个证书的hash值(指纹),然后加密并和证书放在一起,这个指纹是要被加密的,是使用权威第三方(CA)的一个私钥加密的,普通用户的计算机操作系统中是有权威第三方的公钥的,这是和操作系统一起安装的,具有“天然性”,这个公钥也保存在一个证书里,叫做根证书。有了这个公钥,就可以解密指纹,使用指纹算法可以计算出指纹,如果计算出的指纹与解密的指纹一致,就说明证书没有被篡改而且是权威第三方签发的合法证书。

实际上操作系统中存放的根证书有很多,因为CA也不止一个。现在很清楚了,其实是两套证书,一套是跟随操作系统一起安装的CA的根证书,一套是各个使用了https的公司向CA申请的证书。

那CA的证书是哪里来的?其实很简单,是他们自己给自己签发的。

推荐一个课程:https://ke.qq.com/course/382156

课程全面深入讲解了CA 、证书、并用openssl 模拟了证书的签发,吊销,模拟了二级CA签发证书、证书链等内容;讲了openssl的使用,加密算法的讲解,nginx配置使用证书、优化配置等等。

 

 

你可能感兴趣的:(TLS/SSL协议)