HTTPS协议
HTTPS协议
定义
超文本传输安全协议(Hypertext Transfer Protocol Secure,简称:HTTPS)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,利用SSL/TLS来加密数据包。HTTPS的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。
安全层的主要职责就是对发起的HTTP请求的数据进行加密操作 和 对接收到的HTTP的内容进行解密操作。
对称加密
通信双方使用同样的加密和解密规则。
缺点:因为秘钥还是会通过网络传输的,如果有第三方知道加密的规则以后,会很容易被破解。 这就要用到非对称加密的方法。
非对称加密
也叫公钥加密。通信双方使用两个密匙来进行加密和解密。
- 一个是私钥:仅仅是持有方才有的密钥,一般来说都放在服务器中,数据经过公钥加密就只能被私钥解密,数据经过私钥加密就只能被公钥解密
- 一个是公钥:是通信双方都拥有的密钥
应用到客户端和服务端的话:服务端拥有成对的私钥和公钥,然后公布自己的公钥让服务端知道,客户端用公钥把自己的数据加密,加密后用公钥反而无法解密这段数据,一定要用服务端的私钥才能解密,这样就是非对称加密。
虽然我们现在可以对数据进行加密,但是现在的方法也不一定是安全的,因为没有办法确定得到的公钥就一定是安全的公钥。如果存在中间人,截取了对方发给我们的公钥,然后将他的公钥发送给我们,这样的话我们的信息就会被窃取了,然而我们还不知道,为了解决这样的问题,我们可以使用证书。
证书
服务端需要申请SSL证书,表明自己的身份。
- SSL证书就是保存在源服务器的数据文件,要让SSL证书生效就需要向CA申请。
- 这个证书除了表明域名是属于谁的,日期等等信息以外,还包括了特定的公钥
有了证书以后,用户就可以通过HTTPS来访问服务器了。
浏览器也会把HTTP的默认端口80改为HTTPS的默认端口443
TLS握手过程
那么现在浏览器通过HTTPS访问服务器具体会有哪些变化呢?
可以看到:
首先浏览器会向服务器打招呼,并且把自己支持的TLS版本,加密套件发给服务端,同时还生成了一个随机数给服务端,也就是随机数1。
接着服务端打招呼,确认支持的TLS版本以及选择加密套件,并且也生成一个随机数发送给客户端,也就是随机数2
服务端会接着把证书和公钥都发送给客户端,都发送完毕后告诉客户端。
然后客户端生成随机数3,也叫预主密匙,用刚刚收到的公钥进行加密后再发送出去
服务端收到预主密钥后,用自己的私钥进行解密,这样服务器也知道预主密钥了,而且只有客户端和服务端知道这个预主密钥,除非私钥泄露,否则没人知道这个预主密钥是什么
最后客户端和服务端用预主密钥、随机数1、随机数2分别计算出会话密钥,当然这个会话密钥是相同的
这前面的步骤都是非对称加密,为了得到会话密钥
在得到会话密钥后,双方都只使用会话密钥进行加密
也就是说后面使用的是对称加密。
那为什么不继续使用非对称加密呢?会话密钥不会泄露吗?
原因如上可见,非对称加密消耗资源非常大。而且双方锁使用的会话密钥是本地计算出来的,不会彼此传输,所以不会泄露
如果与其他服务器沟通就是去建立新的会话,会话密钥也不相同,会话密钥只应用在当前会话,更加提高了安全性。
优缺点:
优点:
认证用户和服务器,保证了数据可以发送到正确的客户端和服务器。
加密传输、身份认证,使通信更加安全,防止数据在传输过程中被窃取、修改,确保数据安全性。
他是现行框架下最安全的解决方案,虽然不绝对,但大幅增加了中间人攻击的成本。
缺点:
- 服务器和客户端双方的加密和解密处理,耗费更多的服务器资源,过程复杂。
- 握手阶段比较费时,增加页面的加载时间。
- SSL证书收费,功能越强,费用越高。
- SSL证书需要绑定IP,不能在一个IP上绑定多个域名
- 连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本。