在HTTP协议中有可能存在信息窃听或身份伪装等安全问题。使用HTTPS通信机制可以有效地防止这些问题。
1.HTTP的缺点
HTTP主要有这些不足,列举如下:
通信使用名文,内容可能会被窃听
不验证通信方的身份,因此有可能遭遇伪装
无法证明报文的完整性,所以有可能已遭篡改
这些问题不仅在HTTP上出现,其他未加密的协议也会存在这类问题。除此之外,HTTP本身有很多缺点。而且像某些特定的Web服务器和特定的Web浏览器在实际应用中存在的不足,另外,用Java和PHP等编程语言开发的Web应用也可能存在安全漏洞。为了有效防止这些弊端,有必要使用HTTPS。SSL提供认证和加密处理及摘要功能。仅靠HTTP确保完整性是非常困难的,因此通过和其他协议组合使用来实现这个目标。
2.HTTP+加密+认证+完整性保护=HTTPS
经常会在Web的登录页面和购物结算等使用HTTPS通信。使用HTTPS通信时,不再用http://,而是改用https://。另外,当浏览器访问HTTPS通信有效的Web网站时,浏览器的地址栏内会出现一个带锁的标记。
HTTPS并非时应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。通常,HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。
相互交互密钥的公开密钥加密技术
在对SSL进行讲解之前,我们先来了解一下加密方法。SSL采用了一种叫做公开密钥加密的加密处理方式。近代的加密方式中加密算法是公开的,而加密却是保密的。通过这种方法得以保持加密方法得安全性。加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来,任何人只要持有密钥就能解密了,如果密钥被攻击者获得,那加密也就失去了意义。
共享密钥加密的困境
加密和解密用同一个密钥的方式称为共享密钥加密,也被叫做对称密钥加密。以共享密钥方式加密时必须将密钥也发给对方。在互联网上转发密钥时,如果通信被监听,密钥就可能落到攻击者之手,也就失去了加密的意义。
使用两把密钥的公开密钥加密
公开密钥加密是一种非对称的密钥,一把叫做私有密钥,一把叫做公开密钥。使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方在收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
HTTPS采用混合加密机制
HTTPS采用共享密钥和公开密钥加密两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。所以应充分利用两者各自的优势,将多种方法组合起来建立通信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
证明公开密钥正确性的证书
公开密钥加密方式还是有一些问题,那就是无法证明公开密钥本身就是货真价实的公开密钥,为了解决上述问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其他相关机关颁发的公开密钥证书。
数字证书认证机构处于客户端和服务器双方都可信赖的第三方机构的立场上。首先,服务器的运营人员向数字认证机构提出公开密钥的申请。数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定到一起。服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信,公钥证书也叫做数字证书,接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端就可以明确两件事:一,认证服务器的公开密钥是真实有效的数字证书认证机构,二,服务器的公开密钥是可信赖的。此处认证机关的公开密钥如何安全的交给客户端是个问题,因此,多数浏览器在开发商发布版本时,会事先植入常用认证机关的公开密钥。
可证明组织真实性的EV SSL证书
证书的一个作用是用来证明作为通信一方的服务器是否规范,另外一个作用是确认对方服务器背后运营的企业是否真实存在,拥有该特性的证书就是EV SSL证书。
用以确认客户端的客户端证书
HTTPS中可以使用客户端证书。以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端,其作用跟服务器证书如出一辙。例如,银行的网上银行就采用了客户端证书。在登录网银时,不仅要求用户确认输入ID和密码,还会要求用户的客户端证书,以确认用户是否从特定的终端访问网银。
认证机构信誉第一
SSL机制中介入认证机构之所以可行,是建立在其信用绝对可靠的这一大前提下的,然后2011年发生在荷兰的伪造证书事件从根本上撼动了SSL的可信度。因为伪造证书上有正规认证机构的数字签名,所以浏览器会判定该证书是正当的。当伪造的证书被用作服务器伪装时,用户根本无法察觉,虽然存在将证书无效化的证书吊销列表机制以及从客户端删除根证书颁发机构的对策,但距离生效期间还需要一段时间,在这段时间里有多少用户蒙受损失就不得而知了。
由自认证机构颁发的证书称为自签名证书
即使使用自签名证书,通过SSL加密之后,可能偶尔还会看见通信处在安全的状态的提示,可那也是有问题的,因为就算加密通信,也不能排除正在和已经通过伪装的假服务器保持通信。
3.HTTPS的安全通信机制
1.客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法及密钥长度等)。
2.服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本和加密组件,服务器的加密组件内容是从客户端加密组件列表内筛选出来的。
3.服务器发送Certificate报文。报文中包含公开密钥证书。
4.最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束
5.客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文采用公开密钥加密。
6.接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。
7.客户端发送Finished报文,该报文包含连接至今的全部报文的整体较验值。此次握手是否成功,取决于服务器是否正确解密该报文作为判断标准。
8.服务器同样发送Change Cipher Spec报文
9.服务器同样发送Finished报文
10.SSL连接建立完成,当然,通信会收到SSL的保护,从此处开始进入应用层协议的通信,即发送HTTP请求。
11.应用层协议通信,即发送HTTP响应。
12。客户端断开连接,断开时发送close_notify报文,这步之后发送TCP FIN报文来关闭与TCP的通信。
在以上流程中,应用层发送数据时会附加一种叫做MAC的报文摘要,MAC能够查知报文是否遭到篡改,从而报文报文的完整性。
SSL和TLS
HTTPS使用SSL和TLS这两个协议。SSL技术最初是由浏览器开发商网景通信公司倡导的,开发过SSL3.0之前的版本。目前由IETF(Internet Engineering Task Force,Internet工程任务组)的手中。
IETF以SSL3.0为基准,后制定了TLS1.0、TLS1.1、TLS1.2。TSL是以SSL为原型开发的协议,有时会统一称该协议为SSL。当前的主流版本是SSL3.0和TLS1.0。