TLS
TLS (Transport Layer Security) 是在SSL3.0基础上设计的协议,实际上相当于SSL的后续版本
SSL/TLS是一个安全通信框架,上面可以承载HTTP协议或者SMTP/POP3协议
TLS主要分为两层,底层的是TLS记录协议,主要负责使用对称密码对消息进行加密;上层的是TLS握手协议
TLS握手过程
客户端发出请求(ClientHello)
TLS是一套加密框架,其中的有些组件其实是可以替换的,这里可用版本号,可用的密
码套件清单,可用的压缩方式清单就是向服务器询问对方支持哪些服务
客户端向服务器端发出以下信息:
- 支持的协议版本(如TLS 1.0版)
- 客户端生成的随机数
- 支持的加密方法(Cipher Suite)和支持的压缩方法
- 会话ID和当前时间戳
服务器回应(SeverHello)
服务器端收到ClientHello消息后,会向客户端返回一个ServerHello消息,有些服务端的实现是每条单
独发送,有些服务端的实现是合并到一起发送,包含以下部分:
- ServerCertificate:服务器证书
- ServerKeyExchange:可选,如RSA公钥或或者Diffie-Hellman参数
- CertificateRequest:对于重要的保密数据,服务器要求客户端发送证书以进行验证
- ServerHelloDone
- 使用的协议版本号:如果浏览器与服务器支持的版本不一致,服务器关闭加密通信
- 服务器随机数:和客户端的随机数一起生成会话密钥(Master Secret)
- 使用的Cipher Suite和压缩方式
- 当前时间戳和会话ID
客户端回应(Certificate Verify)
- CertificateVerify:检查服务器证书
- ClientCertificate:如果客户端需要验证就发送自己的证书
- ClientKeyExchange:发送RSA预主密钥(PreMaster Secret/Key)或者Diffie-Hellman参数,用于安全地协商出会话密钥
- ChangeCipherSpec:是一个独立的协议,用数据包中的一个字节告知服务器端已经切换到协商好的Cipher Suite
- Finished:客户端握手协议结束
服务器的最后回应(Server Finish)
- ChangeCipherSpec:告知客户端已经切换到协商好的Cipher Suite
- Finished:生成会话密钥,加密Finish消息发送给客户端,以验证加解密通道建立成功
交换数据
双方使用相同的会话密钥,对数据进行对称加密,交换数据,完成通信
TLS应用——HTTPS
CA证书
Certificate Authority,是负责管理和签发证书的第三方机构,浏览器不可能认识所有的网站,但可以认识几个CA机构,如果要访问的网站有CA证书,那么就能证明这个网站是安全的网站
服务方 S 向第三方机构CA提交申请,如申请通过,CA会向申请者颁发证书,证书包括:
申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名
使用散列函数计算公开的明文信息的信息摘要,然后,采用CA的私钥对信息摘要进行加密,密文即签名;
客户端使用CA公钥解密,如果信息摘要没有发送变化,则证书未被修改,证明可信
HTTPS过程
1 | HTTPS = HTTP + TLS |
后续的问题
- https的缺点
- https保证了通信的安全,但带来了加密解密消耗计算机cpu资源的问题 ,不过,有专门的https加解密硬件服务器
- 各大互联网公司,百度、淘宝、支付宝、知乎都使用https协议,为什么?
- 支付宝涉及到金融,所以出于安全考虑采用https这个,可以理解,为什么百度、知乎等也采用这种方式?为了防止运营商劫持!http通信时,运营商在数据中插入各种广告,用户看到后,怒火发到互联网公司,其实这些坏事都是运营商(移动、联通、电信)干的,用了https,运营商就没法插播广告篡改数据了
本着互联网开源的性质,欢迎分享这篇文章,以帮助到更多的人,谢谢!