https(http+ssl)
- https协议不是应用层的新协议,只是HTTP通信接口部分用SSL 或 TLS协议代替
- 一般情况,HTTP直接和tcp通信,使用SSL时,变成HTTP先和SSL通信,然后SSL在和TCP通信
- SSL独立于HTTP,其他运行在应用层的协议,比如SMTP,Telnet等都可以配合SSL使用
SSL采用的是公开密钥加密:
- 公开密钥加密: 非对称的秘钥, 一把私有秘钥,一把公开秘钥。发送密文的一方使用对方的公开秘钥加密,对方接收后用自己的私钥解密
- 对称秘钥加密: 加密和解密用同一个秘钥
https采用混合加密机制:
交换秘钥缓解使用公钥加密,建立通信交换报文时用共享秘钥加密
CA证书(浏览器开发商一般会内置常用的公钥)
- 服务器运营人员向数字证书认证机构提出公钥的申请;
- 认证机构判明身份后,对已经申请的公钥做数字前民,分配这个已签名的公钥;
- 将该公钥放入公钥证书后绑定在一起;
- 服务器将这份公钥证书发给客户端,用于公开密钥加密方式通信;
- 接到证书后,客户端使用公钥对证书上的数字签名验证;(安全转交给客户端很困难,所以用内置的)
HTTPS通信
步骤详解:
- 客户端发送加密通信请求(client hello)【提供协议版本,客户端生成的随机数,支持的加密方法,压缩方法等】
- 服务器响应,如果可进行SSL通信,以server hello 报文作为应答【确认协议版本,服务端随机数,确认加密方法,服务器证书,】
- 服务端发送certificate报文,包含公钥证书
- 服务器发送server hello done通知客户端,最初的ssl握手协商结束。
- 客户端发送client key exchange作为回应,包含用3中公钥加密的一个随机字符串(pre-master secret)
- 客户端发送编码变更通知(Change Cipher Spec),之后通信采用5中的字符串密钥加密;
- 客户端发送finished报文,如果服务器正确解密本次报文,则本次握手协商成功
- 服务端发送编码变更通知
- 服务端发送finished报文
- ssl链接成功,HTTP请求;双方都发送finished报文后,ssl链接成功,这个时候开始进行应用层协议的通信,也就是
- 应用层协议通信,发送HTTP响应。
- 客户端断开链接