HTTPS原理浅谈

由于工作的原因,发现单纯的使用http协议非常不安全,所以逐渐对安全问题引起了重视,于是对https协议进行了一定的了解,接下来我会用浅显易懂的语言来描述什么是https以及它的原理,欢迎拍砖。

一、什么是HTTPS:

对应什么是HTTPS网上有大把大把的解释,这里做一个浅显的总结:
HTTPS协议是HTTP协议的安全性加强版协议,HTTP协议在浏览器与站点之间采用未加密的明文传输,非常不利于传输敏感信息的传输。为了能保证这些敏感信息能保密可靠传输,一家伟大的公司-网景设计了SSL(secure sockets layer)协议用于对HTTP协议传输的信息进行加密,于是HTTPS协议就此诞生。最初为HTTP+SSL。再到后来,随着更多规范标准的加入和制定,出现了TLS(Transport Layer security),直到今天TLS几乎完全替代了SSL,不过目前的浏览器都支持着SSL和TSL。所以目前的HTTPS 可以理解为 HTTP+SSL/TSL。说白了,就是在使用HTTP协议的时候,增加了一次加解密程序。

二、HTTPS的工作原理:

首先HTTP协议,是一种基于TCP/IP协议的三次握手协议。HTTPS协议则在HTTP协议的基础上多了一次握手,这次握手发生在HTTP三次握手成功之后。当三次握手完成,SSL/TSL协议则开始了工作,这一次为安全而握的手,总共可将这次握手划分为四个步骤。当这次为安全而握的手成功之后,HTTPS链接就算建立成功了。接下来,重点讨论一下何为安全握手。

第一步:浏览器根据自己的版本把自己所能支持的加密规则发送给网站。(做个不是很恰当的比喻,就好比你要去世界书店借一本书,但这本书有很多种语言版本,你在向管理员借书的时候,需要告诉他,你能看懂哪几种语言。这里的语言,就是上述的加密规则,还需要补充一点这里的加密规则涉及到对称加密,非对称加密,hash算法。)

第二步:网站收到浏览器请求之后,会从浏览器所支持的加密规则中,选择一组加密算法和hash算法。并将属于本网站的身份信息以证书的形式发送给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息(这里需要解释一下,为何选择一组加密算法和hash算法,因为在整个SSL协议建立的过程中,为了“绝对的安全”会对每一次连接做精心设计,防止在整个安全握手的过程出现不安全的环节,所以会用到各种各样的加密策略。hash算法,对称加密,非对称加密,接下来会详细介绍的)
下面两张图为一个网站发送给浏览器的证书的基本内容:
HTTPS原理浅谈_第1张图片   HTTPS原理浅谈_第2张图片

第三步:浏览器获得网站证书之后,会进行一系列的操作,步骤如下:
  1. 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网址是否与当前网址一致等,做一些基本的合法性验证)如果证书被信任,则浏览器栏会多一个特殊的标记,如chrome浏览器会在url前添加一把绿锁。如果证书被确定为不合法,一般浏览器会弹框提示用户,让用户手动确实是否信任该证书。
  2. 如果证书受信任,或用户接受不受信的证书,这时浏览器会生成一串随机的密码(代号:随机密码串1),并用证书中提供的公钥进行加密,得到加密串(代号:加密串1)。(这里需要重点解释:(1)、这里所指的:生成的随机密码串1,就是日后该浏览器与该网站之间传递消息用来加解密必须要使用的私钥,该私钥不能被除了浏览器和网站之外的第三方获得,否则建立好https后密文信息会被第三方轻松解码;(2)、这里所指的:用证书中提供的公钥进行加密,这里的加密是指的非对称加密,也就是通过公钥+非对称加密算法,将信息编写成密文,该密文只能由与公钥配对的私钥+非对称加密算法才能解密。简单对非对称加密打个比喻:非对称加密算法,好比是一把锁和一把钥匙,私钥是钥匙,公钥是锁,浏览器将随机密码串1通过锁锁起来,然后传给网站,即使在整个传输过程中被第三方拿到这个被锁起来的盒子(密文),没有钥匙也就无法打开盒子(解密密文)。所以采用非对称加密算法,将随机密码串封装起来是比较安全的。说到这里顺便提一句,在第二步中,网站发送的证书中的加密公钥,其实对应了一把私钥,这把私钥由网站保管维护,不存在传递问题,所以相对安全)
  3. 浏览器使用约定好的HASH签名算法,生成签名1(签名生成策略:使用2步骤中浏览器生成的随机密码串1对加密串1等必要信息进行hash加密,生成签名1),最后将基本信息以及加密串1和签名1发送给网站。(解释一下,(1)、hash签名算法:这类算法,是实现一种不可逆的加密,主要是对原加密信息的完整性做保障,一般采用md5或是SHA等,(2)、为何还需要做一个hash签名,连同加密串1一起发送。原因是为了防止该包被第三方截获篡改,为了保障所有信息的完整性添加签名,当网站收到这个包之后,再次计算信息的签名,如果和传递过来的签名1相等,则证明该包安全)
第四步:网站接收浏览器发来的数据之后,也会进行一系列的操作,步骤如下:
  1. 使用第三步-2步中提到的私钥(也就是网站最开始发送的公钥对应的私钥)将加密串1解码,得到随机密码串1。然后使用随机密码串1验证hash值是否与签名1一致。
  2. 使用随机密码串1加密一段握手信息,发送给浏览器。(解释一下这个的加密,这里的加密采用的是hash签名算法,目的只是验证随机密码串是否在浏览器和网站两端都一致。)
第五步:浏览器解密并计算握手信息的hash签名,如果与服务端发来的hash一致,则“为安全而握的手”就完美结束了,之后该浏览器到该网站的所有HTTPS信息传输都采用对称加密的方式进行,对称加密的加密串就是随机密码串1。(简单解释一下:对称加密,对称加密的原理是使用一个私钥,进行加密解密,没有公钥的概念。由于这里,浏览器和网站维护相同的一把私钥--随机密码串1,所以完全可以采用对称加密的方式密文对所要传输的内容进行加解密)

三、拓展信息:

整个HTTPS链接建立的步骤和原理就介绍到这里,另外几点拓展信息:
1、HTTPS所用到的加密算法如下:
  • 非对称加密算法:RSA,DSA/DSS;
  • 对称加密算法:AES,RC4,3DES
  • HASH算法:MD5,SHA1,SHA256
2、如果SSL/TSL握手过程中一旦有任何异常或是错误,链接就会断开。
3、附带一张简洁易懂的原理图:
HTTPS原理浅谈_第3张图片


四、总结:

我对HTTPS认识时间也不长,这次介绍的是基本原理,描述上多是借鉴了别人的博客,加上自己的理解,与实践,希望能对想要了解HTTPS原理的同学有一定的帮助。

参考文章:
http://www.guokr.com/post/114121/



你可能感兴趣的:(网络)