https深入分析
目录
https
https就是在http的基础上又增加了一个TLS层,它就是一个套壳协议。
加密和解密
https的发展和密码学的发展是分不开的。加密方式可以大体分为对称加密和非对称加密
- 对称加密,就是加密和解密都是用同一个秘钥,这种方式优点就是速度快,缺点就是在管理和分配秘钥的时候不安全。
- 非对称加密算法,非对称加密有一个秘钥对,叫做公钥和私钥,私钥自己持有,公钥可以公开的发送给使用的人。使用公钥进行加密的信息,只有和其配对的私钥可以解开。目前常见的非对称加密算法是RSA,非对称的加密算法的优点是安全,因为他不需要把私钥暴露出去。 在正式的使用场景中一般都是对称加密和非对称加密结合使用,使用非对称加密完成秘钥的传递,然后使用对称秘钥进行数据加密和解密
https的简要流程
先是经典的TCP三次握手,这里不详细展开了。
client Hello,客户端(通常是浏览器)先向服务器发出加密通信的请求
|
|
- 服务器收到请求,然后响应 (server Hello)
|
|
- 客户端收到证书之后会首先会进行验证
|
|
- 服务器收到使用公钥加密的内容,在服务器端使用私钥解密之后获得随机数pre-master secret,然后根据radom1、radom2、pre-master secret通过一定的算法得出session Key和MAC算法秘钥,作为后面交互过程中使用对称秘钥。同时客户端也会使用radom1、radom2、pre-master secret,和同样的算法生成session Key和MAC算法的秘钥。
https证书
服务器发给了客户端证书,客户端是如何验证证书的有效性的呢?这里我们分析一下它的原理。
SSL 证书中包含的具体内容有:
(1)证书的发布机构CA
(2)证书的有效期
(3)公钥
(4)证书所有者
(5)签名
…
CA机构在签发证书的时候,都会使用自己的私钥对证书进行签名,如果我们使用的是购买的证书,那么很有可能,颁发这个证书的CA机构的公钥已经预置在操作系统中。这样浏览器就可以使用CA机构的公钥对服务器的证书进行验签,验签之后得到的是CA机构使用sha256得到的证书摘要,客户端就会对服务器发送过来的证书使用sha256进行哈希计算得到一份摘要,然后对比之前由CA得出来的摘要,就可以知道这个证书是不是正确的,是否被修改过。
所以说原理就是因为CA机构的公钥已经预存于我们的操作系统之中。
完整的验证过程如下:
- 首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验;
- 浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发;
- 如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的;
- 如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密;
- 浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比;
- 对比结果一致,则证明服务器发来的证书合法,没有被冒充;
- 此时浏览器就可以读取证书中的公钥,用于后续加密了
参考: