张啸


世界上最快乐的事,莫过于为理想而奋斗。


Web(5) HTTP与HTTPS

超文本传输协议HTTP被用于Web浏览器和网站服务器之间传递信息,HTTP以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

一、TCP/IP、HTTP、HTTPS

  • TCP/IP:传输层协议,主要解决数据如何在网络中传输,Web服务器将HTTP封装好的文本信息,通过TCP/IP协议发送到网络上。

  • HTTP:应用层协议,用于从www服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

  • HTTPS:以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

下面的图表显示OSI(Open System Interconnect)模型中的各项协议:

OSI层 协议名称
应用层 HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
表示层 XDR、ASN.1、SMB、AFP、NCP
会话层 ASAP、TLS、SSH、ISO 8327 / CCITT X.255、RPC、NetBIOS、ASP、Winsock、BSD sockets
传输层 TCP、UDP、RTP、SCTP、SPX、ATP、IL
网络层 IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、X.25
数据链路层 以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP
物理层 线路、无线电、光钎、信鸽

二、HTTP与HTTPS有什么区别

HTTP传输的数据都是未加密的,也就是明文的,因此使用HTTP传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTPS构建的可进行传输加密、身份认证的网络协议,要比HTTP安全。

HTTPS和HTTP的主要区别如下:

  • 1) HTTPS协议需要到CA申请证书,一般免费证书较少,因而需要一定费用

  • 2) HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议

  • 3) HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,HTTP是80,HTTPS是443

  • 4) HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP构建的可进行加密传输、身份认证的网络协议,比HTTP更安全


三、HTTP三次握手

HTTP三次握手时序图

TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

  • 1) 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认

  • 2) 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

  • 3) 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手


四、HTTP四次挥手

HTTP四次挥手时序图

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

HTTP的关闭需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务端均可主动发起挥手操作,在socket中,任何一方执行close()操作即可产生挥手操作。

  • 1) 客户端发送一个FIN,用来关闭客户端到服务端的数据传送

  • 2) 服务端收到这个FIN,返回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号

  • 3) 服务端关闭与客户端的连接,发送一个FIN到客户端

  • 4) 客户端发挥ACK报文确认,并将确认序号设置为收到序号加1


五、HTTPS的工作原理

HTTPS通信

客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。

  • 1) 客户使用HTTPS的URL访问Web服务器,要求与Web服务器建立SSL连接

  • 2) Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端

  • 3) 客户端解析证书,首先验证公钥是否有效,比如颁发机构、过期时间等,如果发现异常,则会弹出警告框,提示证书存在问题

  • 4) 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级

  • 5) 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给Web服务器

  • 6) Web服务器利用字迹的私钥解密出会话密钥

  • 7) Web服务器利用会话密钥加密与客户端之间的通信

HTTPS连接时序图


六、HTTPS的优点

尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是当前架构下最安全的解决方案,主要有以下几个好处:

  • 1) 使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户端和服务器

  • 2) HTTPS协议是由SSL+HTTP构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性

  • 3) HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本

  • 4) Google曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”


七、HTTPS的缺点

虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:

  • 1) HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%-20%的耗电

  • 2) HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响

  • 3) SSL整数需要收费,功能越强大的整数费用越高,个人网站、小网站没有必要一般不会用

  • 4) SSL整数通常需要绑定IP,不能再同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗

  • 5) HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务供给、服务器劫持等方面几乎起不到什么作用。最关键的,SSL整数的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行


参考文献

  1. HTTP与HTTPS的区别

  2. HTTP与HTTPS握手的那些事

  3. TCP的三次握手(建立连接)和四次挥手(关闭连接)