1. 什么是HTTPS
在说HTTPS之前必须要先说一下HTTP。我们平常浏览网页用的就是HTTP协议,HTTP协议之间传输的数据都是明文,这样对于一些敏感信息传输其实是不安全的,很容易被恶意窃取。应于这样的需求,网景公司设计了SSL协议,用于对HTTP协议传输的数据进行加密,于是HTTPS就此诞生了。SSL的最后一个版本是3.0,之后IETF对SSL3.0进行了升级,于是有了TLS。实际上当前的HTTPS都是用的TLS协议,但SSL依旧被浏览器所支持。
2. HTTPS的工作原理
HTTPS在传输数据之前要求客户端与服务端之间完成一次握手过程,在这个过程中,确定以后数据传输所需要的密码信息。在整个握手过程中,主要用到了非对称加密算法、对称加密算法以及HASH算法。
以下介绍握手过程:
(1) 客户端(浏览器)将自己支持的一套加密算法发送给服务器;
(2) 服务器从中选出一组加密算法和HASH算法,并将自己的身份信息以证书的形式发送给浏览器,证书中包含了域名信息、证书颁发机构、加密公钥等等。
(3) 浏览器取得证书后,需要做下面几件事情
(a)验证证书的合法性,比如证书颁发机构是否可信任,证书中的域名与正在访问的域名是否一致等。如果证书是信任的,则在网址旁边出现一把锁(如图1),否则会给出证书不受信任的提示。
(b) 如果浏览器认为证书是受信任的或者用户接受了不信任的证书,浏览器会随机生成一个随机数,并用步骤(2)中返回的公钥进行加密;
(c) 使用约定好的HASH计算握手消息,并用上面生成的随机数进行加密,最后将生成的所有信息一起发给服务器。
(4) 服务器接收到这些信息后需要做下面几件事情
(a) 使用自己的私钥将信息解密取出密码,然后再拿密码解密握手信息,查看HASH是否一致。
(b) 使用密码加密一段握手信息,发送给浏览器
(5) 浏览器解密并计算握手消息的HASH,如果与服务器发来的HASH一致,则握手结束。以后浏览器和客户端之间通信则通过之前浏览器生成的随机密码进行加密。
为什么要进行上面这一系列的操作呢?
主要是为了确认双方都获得了相同的密码,并且可以成功地加密解密,为后续的数据传输做了一次测试。
3. 非对称加密算法、对称加密算法和HASH算法
非对称加密算法用于加密浏览器端生成的随机密码,因为这个密码是HTTPS数据传输的关键,所以使用了这种加密算法。非对称加密算法会生成公钥和私钥,公钥用于加密数据,因此可以随意传输。私钥用于解密数据,由服务端保管,不可泄露。
对称加密算法用于对真正传输的数据进行加密。
HASH加密算法用于验证数据的完整性。
本文内容参考http://www.guokr.com/post/114121/