1 概要说明
在互联网通信方式中,目前用的最广泛的是HTTPS配合SSL和数字证书来保证传输和认证安全了。
2 详细介绍
2.1 HTTPS
HTTPS全称:Hypertext Transfer Protocal over Secure Socket Layer,是以安全为目标的HTTP通信协议。
即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。SSL用于安全的HTTP数据传输,HTTPS:URL表明它使用了HTTPS,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统最初是网景公司进行,提供了身份验证与加密通讯方式,现在它被广泛用于万维网安全敏捷通讯,例如交易支付方面等。
1. HTTP基础上提出的一种安全的HTTP协议,因此可以称为安全的超文本传输协议。
2. HTTP协议需要通过CA(数字证书)申请证书。
3. HTTP和HTTPS使用完全不用的链接方式,端口也不一样,前者是80,后者是443。
4. HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。
2.2 SSL
SSL全称:SecureSocket Layer,是网景公司所研发,用以保证INTERNET上数据传输安全,利用数据加密技术,可确保数据在网络上传输过程中不会被截取及窃听。
SSL协议位于TPC/IP 协议与各种应用层协议之间,是一种国际标准的加密及身份认证通信协议,为TCP提供一个可靠的端对端的安全服务。为两个通讯个体之间提供保密性和完整性。
2.2.1 SSL协议分两层:
2.2.1.1 SSL记录协议(SSLRecord Protocol)
它建立在可靠的传输协议之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
2.2.1.2 SSL握手协议(SSLHandshake Protocol)
它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
2.2.2 SSL功能
1. 客户对服务器的身份认证:SSL服务器允许客户的浏览器使用标准的公钥加密技术和一些可靠的认证中心CA的证书,来确认服务器的合法性。
2. 服务器对客户的身份认证:也可以通过公钥技术和证书进行认证,也可以通过用户名和密码来认证。
3. 建立服务器与客户之间安全的数据通道:SSL要求客户与服务器之间的所有发送的数据都被发送端加密、接收端解密,同时还检查数据得完整性。
2.2.3 SSL协议工作的基本流程
1. 接通阶段:客户机通过网络向服务器打招呼,服务器响应。
2. 密码交换阶段:客户机与服务器之间交换双方认可的密码,一般选用RSA密码算法。
3. 会谈密码阶段:客户机器与服务器间产生彼此交谈的会谈密码。
4. 检验阶段:客户机检验服务器获得的密码。
5. 客户认证阶段:服务器验证客户机的可行度。
6. 结束阶段:客户机与服务器之间相互交换结束的信息。
2.2.4 SSL安全实现原理
SSL提供了用于启动TCP/IP连接的安全性“信号交换”:
1. 这种信号交换导致客户和服务器同意将使用的安全性级别,并履行连接的任何身份验证要求。
2. 通过数据签名和数字证书可实现浏览器和WEB服务器双向身份认证。
3. 在用数字证书对双方身份验证后,双方就可以用保密密钥进行安全会话了。
2.2.5 SSL协议结构
Ø SSL协议定义了两个通信主题:客户(Client)和服务器(Server)。
Ø 在客户/服务器结构中,应用层从请求服务和提供服务的角度定义客户和服务器。
Ø SSL协议则从建立加密参数的过程中所扮演的角色来定义客户和服务器。
Ø SSL协议包含四个阶段:
(1). 建立安全能力;
(2). 服务器鉴别和密钥交换;
(3). 客户鉴别和密钥交换;
(4). 完成握手协议;
1.1.1 SSL协议工作基本流程
Ø 服务器认证阶段:
(1). 客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接。
(2). 服务器根据客户信息确认是否需要生成新的主密钥,如果需要则服务器响应客户的“Hello”信息时将包含生成主密钥所需的信息。
(3). 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器。
(4). 服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
Ø 用户端认证阶段:
(1). 在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户端的认证。经认证的服务器发送一个提问给客户,客户则返回数字签名后的提问和其公开密钥,从而向服务器提供认证。
1.1.1 SSL流程图
Ø 流程图
Ø 身份验证
Ø 发明密语规则
Ø 密语规则共享
Ø 进行安全通信
1.1.1 SSL详细说明
基于SSL一般都使用单向认证,如果应用场景要求对客户来源做验证也可以实现双向认证。
以下重点介绍SSL协议的握手协议。SSL协议即用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术速度快,可是公钥加密数据提供了更好的身份认证技术。SSL的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:
(1). 客户端的浏览器向服务器传送客户单SSL协议的版本号,加密算法种类,产生的随机数,以及其他服务器和客户端之间通信所需要的各种信息。
(2). 服务器向客户端传送SSL协议版本号,加密算法种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书(也就是公钥)。
(3). 客户利用服务器传送过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的CA是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开,如果合法性验证通过,将继续进行第四步。
(4). 用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥对其机密,然后加密后的“预主密码”传给服务器。
(5). 如果服务器要求客户的身份认证(也就是要双向认证,在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。
(6). 如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA是否可靠,发行CA的公钥能否正确解开客户证书的发行CA的数字签名,检查客户的证书是否在证书废止列表(CRL)中,检验如果没有通过,通讯立刻中断,如果验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同相同的主通讯密码)。
(7). 服务器和客户端用相同的密码即“通话密码”,一个对称密钥用于SSL协议的安全通讯的加解密通讯。同时在SSL通讯过程中还要保证通讯的完整性,防止数据通讯中产生任何变化。
(8). 客户端向服务器端发送信息,指明后面的数据通讯将使用步骤7的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
(9). 服务器向客户端发出信息,指明后面的数据通讯将使用步骤7中的主密码为对称密钥,同时通知客户端服务器的握手过程结束。
(10). SSL的握手部分结束,SSL安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行通讯,同时进行通讯完整性的检验。
1.1.2 SSL双向认证具体过程
如果是双向认证,就会有三个私钥和三个证书,分别是ca.key,ca.crt,server.key,server.crt,client.key,client.crt。
如果使用有CA证书的单向认证,证书和私钥就是ca.key,ca.crt,server.key,server.crt。
如果使用无CA证书的单向认证,证书和私钥就是server.key,server.crt。
双向认证SSL协议的具体通讯过程如下,在这个情况下服务器和用户双方都需要有证书,单向认证SSL部需要客户拥有CA证书,具体的过程相对于下面的步骤,只需要将服务器验证客户证书过程去掉,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户的是没有加过密的密码方案。
(1). 浏览器发送一个连接请求给安全服务器。
(2). 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。
(3). 客户浏览器检查服务器过来的证书是否是自己信赖的CA中心所签发的,如果是,就继续执行协议。如果不是,客户浏览器就给客户一个警告消息,警告客户这个证书不是信赖的,询问客户是否需要继续。
(4). 接着客户浏览器会比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
(5). 服务器要求客户发送客户自己的证书,收到后,服务器验证客户的证书,如果没有通过验证,拒绝链接。如果通过验证,服务器获得用户的公钥。
(6). 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。
(7). 服务器从客户发送过来的密码方案中,选择一种加密程序最高额密码方案,用客户的公钥加过密通知浏览器。
(8). 浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。
(9). 服务器接收到浏览器传送过来的消息,用自己的私钥解密,获得通话密钥。
(10).服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过密的。