HTTPS协议
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。
HTTPS=HTTP+SSL(TLS);
- HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。
SSL协议分为两层:
-
SSL记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能。
-
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议提供的服务:
1)认证用户和服务器,确保数据发送到正确的客户机和服务器
2)加密数据以防止数据中途被窃取
3)维护数据的完整性,确保数据在传输过程中不被改变
在访问网站时,由于我们不确定访问的网站是不是我们想要的,所以此时我们还需要一个第三方机构去确认----------CA机构。
CA就是一个公认的公证单位,你可以自行产生一把密钥且制作出必要的证书数据并向CA单位注册,那么当客户端的浏览器在浏览时,该浏览器会主动向CA单位确认该证书是否为合法注册过,如果是,那么该次连接才会建立,如果不是,浏览器会发出警告信息,告知用户应避免建立连接。所以说,如此一来WWW服务器不但有公证单位的证书,用户在建立连接时也比较有保障。
HTTPS协议的工作过程:
首先,在服务器中存在一对非对称密钥,和证书X;
1.客户端向服务端发起HTTPS请求,其中包含了客户端的:
-
客户端支持的SSL /TLS协议的版本号。
-
Cipher Suite(密钥算法套件)。
-
客户端产生的随机数,稍后用于生成"对话密钥"。
2.服务端收到后会将自己的非对称密钥的公钥,证书并且产生一个随机数一起发送给客户端。
3.客户端收到服务端的证书后会在CA机构验证证书的合法性,如果合法性验证没有通过,通讯将断开;如果合法性验证通过,则可以知道认证服务器的公开密钥的是真实有效的数字证书认证机构,并且服务器的公开密钥是值得信赖的。
4.客户端产生一个随机的会话对称密钥,使用服务端发送过来的公钥A加密发送给服务器。用于后续的会话加密。
HTTPS的安全通信工作流程可大致分为三个阶段:
认证服务器:浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。
协商会话密钥:客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。
加密通讯:此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性。
服务器证书
要使数字证书有用,它的结构必须采用一种可理解且可靠的形式,以便人们可以轻松地检索并理解证书内的信息。例如,护照采用这样一种结构:人们可以轻松地理解以前从未见过的那一类护照中的信息。同样,只要数字证书是标准化的,则无论颁发该证书的是哪个机构,人们都可以阅读并理解该证书。
S/MIME 标准规定:用于 S/MIME 的数字证书应遵守国际电信同盟 (ITU) X.509 标准。S/MIME版本 3 明确要求数字证书应遵循 X.509 的第 3 版。由于 S/MIME 依赖于已建立的数字证书结构公认标准,因此 S/MIME 标准建立在该标准的发展之上,从而提高了它的认可度。 X.509 标准规定数字证书应包含标准化信息。具体地说,X.509 版本 3 证书包含下列字段:
-
版本号 证书所遵循的 X.509 标准的版本。
-
序列号 唯一标识证书且由证书颁发机构颁发的编号。
-
签名算法 CA用于对证书进行数字签名的hash算法。
-
颁发者名称 实际颁发该证书的证书颁发机构的标识。
-
有效期 数字证书保持有效的时间段,并包含起始日期和过期日期。
-
使用者名称 数字证书所有者的姓名。
-
使用者公钥信息 与数字证书所有者关联的公钥以及与该公钥关联的特定公钥算法。
-
颁发者唯一标识符 可以用来唯一标识数字证书颁发者的信息。
-
使用者唯一标识符 可以用来唯一标识数字证书所有者的信息。
-
扩充信息 与证书的使用和处理有关的其他信息。
-
证书颁发机构的数字签名 使用指纹算法中指定的HASH算法以及证书颁发机构的私钥进行加密的数字签名。