HTTP:全名为“HyperText Transfer Protocol”,也就是“超文本传输协议”,是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息,默认工作在TCP协议的80端口。 HTTP协议以明文来传输消息,不使用加密,所以当攻击者截取了Web浏览器和网站服务器之间的传输报文,便可直接读取其中的内容。
HTTPS:全名为“Hypertext Transfer Protocol Secure超文本传输安全协议”,HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,相较于HTTP协议,HTTPS更加安全。 它的主要作用:
一是对数据进行加密,建立一个信息安全通道,来保证传输过程中的数据安全;
二是对网站服务器进行真实身份认证。
TCP三次握手
HTTPS在TCP协议中443端口工作,在TCP/IP协议中,TCP协议通过三次握手建立连接
这里我们假设客户端开始时是关闭的。
第一次握手:
客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。
第二次握手:
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。
第三次握手:
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1。
(TCP/IP协议详解可以去这里了解https://www.cnblogs.com/klb561/p/11485463.html)
HTTPS的工作原理
一,通过加密来防止内容被窃听
对称加密就是加密和解密同用一个密钥。加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。
非对称加密就是公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。
HTTPS采用的是对称加密与非对称加密结合的方式来加密。这种方式便是在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。具体来说,发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信。
二,通过数字签名来防止报文被篡改
数字签名能确定消息确实是由发送方签名并发出来的,并且能确定消息的完整性,证明数据是否未被篡改过。
数字签名是由文本通过Hash函数生成消息摘要,再由信息摘要用发送者的私钥加密生成。
接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与上一步得到的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过。
三,通过数字证书解决通信方身份可能被伪装的问题
数字证书认证机构(CA,Certificate Authority)是被客户端与服务器双方信赖的。使用由数字认证机构和其相关机关颁发的公开密钥证书即可解决通信方身份可能被伪装的问题。
数字认证机构的业务流程
首先,服务器的运营人员向数字认证机构提出公开密钥的申请。数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名。
然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。
服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,用来进行公开密钥加密方式通信。公钥证书也可叫做数字证书或直接称为证书。
客户端在接收到证书后,使用数字认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:一,认证服务器的公开密钥是真实有效的数字证书认证机构。二,服务器的公开密钥是值得信赖的。
认证机关的公开密钥必须安全的转交给客户端。使用通信方式时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥。