HTTPS通信总结

对不起~我还是托更了,唉,没办法,我也很绝望啊! = =
行,不多哔哔,近期在做一些协议相关的总结和记录,会带来一个新的专题连载,望大家支持~


HTTPS通信总结

HTTPS:

HTTP+TLS/SSL,即在http传输过程中加上认证以及一系列加密解密,以保证数据传输的安全性和有效性。
首先需要对背景做介绍:http、tcp、ssl、tls
这里只做简单扫盲,如果全部仔细分析,篇幅爆炸!

HTTP:

没见过也听过吧,hyper text transfer protocol超文本传输协议,属于应用层无状态协议,由相应和请求组成,CS标准。常见的请求方式:GET/POST。一些具体概念名词:connection、message、request、response、resource、entity、server、client……

TCP:

Transport control protocol传输控制协议,传输层协议,许多传输的基本如HTTP/FTP/SMTP/POP,可以把它想成一个水管,从一端到另一端数据可以准确流通。

SSL:

Secure socket layer安全套接字层,位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过相互认证,使用数字签名确保完整性,使用加密确保私密性,以实现客户端和服务器之间的安全通讯。由两层组成:SSL记录协议和SSL握手协议。

  • SSL提供的服务主要有:

1、 认证用户和服务器,确保数据发送到正确的客户机和服务器。
2、 加密数据以防止数据中途被窃取。
3、 维护数据的完整性,确保数据在传输过程中不被改变。

TLS:

Transport Layer Security传输层安全协议,TLS的主要目标是使SSL更安全,并使协议的规范更精准和完善,也可称为SSL的标准化,SSL和TLS属于同一东西的不同阶段。由TLS记录协议和TLS握手协议组成。

  • TLS记录协议的两个基本特征:

1、 私有——对称加密用以数据加密(DES/RC4····)
2、 可靠——信息传输包括使用密钥的MAC进行信息完善性检查 SHA/MD5····

  • TLS握手协议由三个子协议组成:

允许对等双方在记录层的安全层参数上达成一致、自我认证、例示协商安全参数、互相报告出错条件。

TLS和SSL的差异:

1、 版本号:TLS记录格式相同,但版本号不同,TLS1.0使用SSLv3.1。
2、 报文鉴别码:SSLv3.0和TLS的MAC算法及MAC计算范围不同。
3、 伪随机数:TLS使用了称为PRF的伪随机函数来将密钥扩展成数据块,是更安全的方式。
4、 报警代码:TLS支持几乎所有SSLv3.0报警代码,而且还补充定义了其他。
5、 密文族和客户证书:SSLv3.0和TLS存在少量差别
6、 Certificate_verify和finished消息:SSLv3.0和TLS在用这两时有少许差别,但安全性相当。
7、 加密算法:TLS和SSLv3.0计算主密值时采用的方式不同。
8、 用户数据加密前需要增加的填充字节。


图示结构:

HTTPS通信总结_第1张图片

介于应用层与TCP层之间,应用层数据不再直接传递给传输层,而给SSL层。

介绍完相关背景后,看下通信过程

HTTPS通信握手过程:

HTTPS通信总结_第2张图片

1、 浏览器(客户端)将自己支持的一套加密规则(支持的加密算法)发给服务端。
2、 服务端从中选出一组加密算法与hash算法,并将自己的身份信息以证书的形式发回给浏览器。证书里包含了服务器的地址,加密公钥以及证书颁发机构等信息。
3、 获得服务器证书后浏览器作以下工作:
A) 验证证书的合法性,如果信任则通过,不信任则给出不守信提示。
B) 如果证书受信任,用户接受受信的证书,浏览器会生成一串随机数的密码,并用证书提供的公钥加密。
C) 使用约定好的hash算法计算握手消息(如SHA1),并使用生成的随机数对消息进行加密,最后将之前生成的被公钥加密的随机数密码,hash摘要值一起发给服务器。
4、 服务端接受浏览器发来的数据后:
A) 使用自己的私钥将信息解密并取出浏览器发来的随机密码,使用密码解密浏览器发来的握手消息,并验证hash是否与浏览器发来的一致。
B) 使用随机密码加密一段握手消息,发给浏览器。
5、 浏览器解密并计算握手消息的hash,如果与服务端发来的hash一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

我有一个模拟通信过程Demo代码,有需要的朋友可以留言哈~

你可能感兴趣的:(协议,ssl,通信,tcp,https)