https 和 http 的区别
在详细探究HTTP与HTTPS之前,先理清一下HTTP的基本概念
:
HTTP中文叫做超文本传输协议,是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
在这里,我们需要先提出几个问题:
为什么需要使用HTTPS来进行通信?HTTPS在安全上做了哪些事情?
HTTP的特点
- HTTP是无连接的:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
- HTTP是无状态的:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP的缺点
容易被监听
http通信都是明文,即未加密,内容可能会被窃听。
窃听可能发生在互联网通信中的各个环节。比如,发送了银行卡号和密码,hacker劫取到数据,就能看到卡号和密码,这是很危险的。被伪装
通信双方的身份没有进行验证,可能出现伪装身份的情况。
所有人都可以对服务器发起请求。比如你请求 www.taobao.com ,你怎么知道返回的数据就是来自淘宝,中间人可能返回数据伪装成淘宝。
可以看出,对于客户端来说,无法确定这台Web服务器是否是“真的”服务器,可能通过了伪装
。对于服务器来说,也无法确定自己返回的报文是否被真正的客户端接收到。
此外,服务器的全盘接收的缺点也会被利用来进行DOS攻击。
因此,以客户端为例,客户端在与服务器通信之前需要确定服务器的身份,该身份即是一份证书,该证书有值得信赖的第三方颁发,客户端确认身份后才进行通信。
- 被篡改
接受的报文完整性无法确定,可能中途被改动。
hacker中间篡改数据后,接收方并不知道数据已经被更改.我们知道,服务器接收到请求后,会进行响应。但服务器和客户端都无法知道报文中途的传输是否出现了问题。很有可能在传输时被其他攻击者进行了篡改,报文完整性遭到破坏。
虽然HTTP提供了确认报文完整性的方法(MD5,SHA-1),但是也无法完全保证报文的完整性。因为MD5本身也可能被攻击者改写。在SSL中,提供了认证和加密处理等功能。通过配合SSL可以达到保证报文完整性的目的。
HTTPS与HTTP协议的差异
- HTTP的URL是以“http://”开始,HTTPS的URL是以“https://”开始;
- HTTP默认端口为80,HTTPS的默认端口为443;
- 采用HTTPS的Web Server需要到CA申请证书;
- HTTPS由HTTP+SSL来实现,可进行加密传输、身份认证等,要比HTTP安全
- HTTP的信息是明文传输,而HTTPS的信息是加密传输
HTTPS解决的问题:
鉴于HTTP的缺点,HTTPS在HTTP的基础上增加了:
- 通信加密
- 证书认证
- 完整性保护
https很好的解决了http的三个缺点(被监听、被篡改、被伪装)
https不是一种新的协议,它是http+SSL(TLS)的结合体,SSL是一种独立协议,所以其它协议比如smtp等也可以跟ssl结合。https改变了通信方式,它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式
- 防监听
数据是加密的,所以监听得到的数据是密文,hacker看不懂。 - 防伪装
伪装分为客户端伪装和服务器伪装,通信双方携带证书,证书相当于身份证,有证书就认为合法,没有证书就认为非法,证书由第三方颁布,很难伪造 - 防篡改
https对数据做了摘要,篡改数据会被感知到。hacker即使从中改了数据也白搭。
普遍的加密方式
共享密钥加密(对称密钥)
顾名思义,就是客户端和服务器都拥有一把相同的钥匙,对报文的加密和解密用的都是这把钥匙,而且密钥也需要在通信的过程中发给对方,对方才能通过这把钥匙来解密。因此,一旦在通信过程中,这把密钥被攻击者获取,报文加密便失去了意义。
公开密钥加密
共享密钥带来了一个问题就是,如何能够安全地把密钥发送给对方。而公开密钥则较好地解决了这个问题。
公开密钥加密使用得是非对称的密钥。一把是公有密钥,一把是私有密钥。公有密钥是对通信双方公开的,任何人都可以获取,而私有的则不公开。发送方使用这把公有密钥对报文进行加密,接收方则使用私有的密钥进行解密。仅仅通过密文和公有密钥是很难破解到密文。
使用公开密钥带来安全的同时,也隐藏着一些问题,就是如何保证公开的这把公有密钥的真实性?这个问题伴随也是证书机构。通过证书来保证公有密钥的真实性。
HTTPS采用混合加密机制
由于公有密钥的机制相对复杂,导致其处理速度相对较慢。于是HTTPS利用了两者的优势,采用了混合加密的机制。我们知道,
共享(对称)密钥未能解决的问题是如何能够安全地把密钥发送给对方。只要解决了这个问题就可以进行安全地通信。于是,
HTTPS首先是通过公有密钥来对共享密钥进行加密传输。当共享密钥安全地传输给对方后,双方则使用共享密钥的方式来加密报文,
以此来提高传输的效率。
HTTPS的握手机制(建立连接的过程)
- 步骤1:向服务器发起请求。
- 步骤2-3:取出公有密钥及证书并发送给客户端。
- 步骤4:客户端判断公有密钥是否有效,无效则显示警告。有效则生成一个随机数串,并以此生成客户端的共享密钥。
- 步骤5:用步骤3得到的公有密钥对该随机数串加密,发送到服务器。
- 步骤6:服务器得到加密报文,用私有密钥解密报文,得到随机数串,并以此生成服务器端的共享密钥。此时客户端和服务端拥有相同的共享密钥,可以用该共享密钥进行安全通信。
- 步骤7-8:服务器对响应进行加密,客户端对报文进行解密。
选择HTTP还是HTTPS来搭建服务器
在比较之前,首先要了解HTTPS存在的问题才能进行权衡。
SSL会使通信的效率降低
- 通信速率降低
HTTPS 除了TCP连接,发送请求,响应之外,还需要进行SSL通信。整体通信信息量增加。 - 加密过程消耗资源
每个报文都需要进行加密和解密的运算处理。比起HTTP会消耗更多的服务器资源。 - 证书开销
如果想要通过HTTPS进行通信,就必须向认证机构购买证书。
基于以上三点,如果通信中传输的是非敏感的信息,则会较多地选择HTTP协议。而当通信过程中会涉及个人隐私
或其他安全信息时,则会选择用HTTPS。当然,访问量也是考虑的因素之一,如果访问量很大,而每个报文都进行加密解密,也会给服务器带来很大的负担。