转载请注明出处
作者:@ZJXin
由于本人水平有限,如有不正确的地方欢迎留言指出,谢谢!
一、HTTPS基础知识
什么是HTTPS
HTTPS(Hypertext Transfer Protocol Security),安全超文本传输协议,在http后面加上的s代表 security,表示现在使用的是提供安全服务的HTTP协议。它使用安全套接字层(SSL)进行信息交换,简单来说,它是HTTP的安全版,是使用SSL/TLS加密的HTTP协议。
HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。
HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。HTTPS协议的主要作用是:
- 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的网络安全
- 对网站服务器进行真实身份认证
HTTPS和HTTP的区别
- HTTPS是加密传输协议,HTTP是明文传输协议
- HTTPS需要用到SSL证书,而HTTP不用
- HTTPS标准443,HTTP标准端口80
- HTTPS基于传输层,HTTP基于应用层
HTTPS的大致过程
- 建立服务器443端口连接
- SSL握手:随机数,证书,密钥,加密算法
- 发送加密请求
- 发送加密响应
- 关闭SSL
- 关闭TCP
二、TLS/SSL工作原理
安全套接字层 SSL(Secure Socket Layer)
运输层安全 TLS(Transport Layer Security)
SSL作用在端系统应用层的HTTP和运输层之间,在TCP之上建立起一个安全通道,为通过TCP传输的应用层数据提供安全保障。
IETE在SSL3.0的基础上设计了TLS协议,为所有基于TCP的网路应用提供安全数据传输服务。
TLS/SSL的功能实现主要依赖于三类基本算法: 散列函数 、对称加密 和 非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
SSL提供的安全服务可以归纳为以下三类:
- SSL服务器鉴别,允许用户证实服务器的身份。支持SSL的客户端通过验证来自服务器的证书,来鉴别服务器的真实身份并获得服务器的公钥。
- SSL客户鉴别,SSL的可选安全服务,允许服务器证实客户的身份
- 加密的SSL会话,对客户和服务器间发送的所有报文进行加密,并检测报文是否被篡改
TLS的基本工作方式是,客户端使用非对称加密与服务器进行通信,实现身份验证并协商对称加密使用的密钥,然后对称加密算法采用协商密钥对信息以及信息摘要进行加密通信,不同的节点之间采用的对称密钥不同,从而可以保证信息只能通信双方获取。
二、SSL握手
SSL握手的大致过程
- 客服端发送随机数①,以及支持的加密算法(如RSA公钥加密算法)
- 服务端发送随机数②,以及服务器公钥,并确认加密方法
- 客户端发送用服务器公钥加密的随机数③
- 服务器用私钥解密这个随机数③,用加密方法计算生成对称加密的密钥给客户端
- 接下来的报文都用双方协定好的加密方法和密钥,进行加密通信
SSL握手的详细过程
(一) 客户端发出加密通信请求client_hello
提供:
- 协议版本(如TSL1.0)
- 随机数①(用于生成对话密钥)
- 支持的加密方法(如RSA加密)
- 支持的压缩方法
(二) 服务器回应server_hello
回应内容:
- 确认使用的加密通信协议版本
- 随机数②(用于生成对话密钥)
- 确认加密算法(RSA)
- 服务器证书(包含非对称加密的公钥)
- (可选)要求客户端提供证书请求
(三) 客户端验证证书
如果证书不是可信即构颁布,或证书域名与实际域名不符,或者证书已经过期,就会向访问者显示一个警告,是否继续通信
(四) 客户端回应
证书没问题,就会取出证书中的服务器公钥
然后发送:
- 随机数③(pre-master key,此随机数用服务器公钥加密,防止被窃听)
- 编码改变通知(表示随后的信息都将用双方商定的方法和密钥发送)
- 客户端握手结束通知
(五) 双方生成会话密钥
双方同时有了三个随机数,接着用事先商定的加密算法,各自生成同一把会话密钥
服务端用自己的非对称加密私钥解密随机数③,会计算生成本次所用的会话密钥(对称加密的密钥)
(六) 服务器最后响应
服务器生成会话密钥后,向客户端发送:
- 编码改变通知
- 服务器握手结束
至此,握手阶段全部结束,接下来客户端与服务器进入加密通信,用会话密钥加密内容