1

前言

在自己学习SSL和HTTPS的时候觉得SSL的加密过程较为繁琐,在此特地记录下学习的过程。

SSL简介

SSL(secure socket layer) 能够帮助系统在客户端和服务器之间建立一条安全通信通道。SSL 安全协议是由 Netscape Communication 公司在 1994 年设计开发,SSL 依赖于加密算法、极难窃听、有较高的安全性,因此 SSL 协议已经成为网络上最常用的安全保密通信协议,该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。

为什么需要加密

当我们访问某些网站的时候会出现如下信息
image.png
而这些网站的网站基本都是基于http协议的,但是在其他基于https协议的网站就显示为安全的,那么为什么HTTPS比HTTP安全呢?
HTTPS的全称为HTTP Over SSL,那么其本质就是http,只不过加了一层SSL保证其数据传输的安全,似乎这就简单的解释了为什么HTTPS比HTTP安全。
这个时候就需要我们仔细想一想了,为什么HTTP就是不安全的,并且为什么一定需要加密呢?
其实原因也很简单,就是在基于http链路在传输数据的时候是明文传输的,如果这个时候有一个中间人劫持了服务器的数据并且获得你们公司中特别重要的数据信息,这样就会导致数据泄露,从而产生安全隐患。(好意提醒下,不要使用公用wifi,这个wifi就是一个互联网连接点,有可能收集表单数据)
image.png

第一阶段(对称式加密)

既然不安全,那么在服务端传递给客户端的时候会将数据进行加密,那么客户端自然也需要具备解密的方法,所以在传输数据的时候,服务端会将数据和解密的方法同时传递到客户端。

同时当前阶段是最为简单的阶段,也就是加密的算法和解密的算法是一样的,也称之为对称式加密,就好像很多年前的钥匙,既可以锁门,也可以开门一样。那么这种加密方法依然不安全,原因在于中间依然有可能有人拦截你的数据,然后利用数据中的密钥解开你的数据,然后进行修改,再通过密钥加密发送给你。

这种方式的好处是加密速度快,缺点也显而易见,就是容易被拦截和篡改。
image.png

第二阶段(非对称式加密)

可以想到解决上述对称式加密算法缺点的办法就是,加密的时候使用一套算法,解密的时候使用另外一套算法。加密算法只用于服务器加密,传输的时候传输加密的数据和解密算法即可。到这里就呈现了SSL的雏形了,但是这个算法也有问题。如果中间人拦截了数据后,获取了解密算法,这样他依然可以看到你的数据,也就是数据依然有被窃取的风险,并且可以自定义一套加密和解密算法,在修改数据后使用自定义的加密算法加密数据并且将自定义的解密算法一并传输给客户端。其中加密算法和解密算法叫公钥和私钥,公钥和私钥都可以加密和解密,只不过一个用来加密的话,就只能使用另外一个来解密。一般情况下是使用私钥进行加密,然后传输公钥给客户端。
image.png

第三阶段(SSL)

如果要解决非对称加密的问题,咱们可以想到,只要浏览器只认识服务端的公钥,这样其他人自定义的数据和解密算法就会被丢弃,也就是说,我们不在让服务器传递公钥,而是在浏览器内部“内嵌”一个公钥,这个公钥得和服务端的公钥要一致。那么这样就会产生一个新的问题,怎么才能浏览器“内嵌”一个和服务端一样的公钥呢?这就要引入CA的概念了,CA指的是一个第三方,就类似与每一个人的身份证下发机构一样,具有较高的权威和信用度。最常见的CA机构就是GlobalSign,这个CA机构会为每一个注册的网站下发一个数字证书,数字证书里有证书持有者、证书持有者的公钥等信息,服务器把证书传输给浏览器,浏览器从证书里取公钥就行了。这样就保证了浏览器获得的公钥就一定是来自于访问的服务器的了。现在唯一的问题就是这个证书如何保证一定不会被篡改。

数字签名和浏览器的校验过程。

首先CA拥有一对自己的私钥和公钥,它会将证书的明文信息(包括了网站域名、hash算法和服务端公钥等信息)的一部分进行hash,再对hash后的值使用CA的私钥进行加密,然后将明文和加密后的数字一起组成一个数字签名。
然后这个数字签名会在浏览器端进行校验,也就是先CA机构的公钥(浏览器相信CA机构,所以有CA机构的公钥)对数字签名进行解密,再使用hash算法对明文进行hash,判断hash后的值和数字签名解密后的值是否相等,如果是就说明证书是可信的。

为什么使用了数字证书就可以防止篡改

这里假设,中间人有CA机构的公钥,那么解开了数字证书,也就是说,中间人依然有可能存在“窥探”数据的可能(数字证书和加密后的数据现在是一起发送的),解开数字签名后,中间人依然无法修改数字签名,因为没有CA的私钥(这个是绝对不能丢的),同时,如果中间人伪造一个数字证书的话,由于没有CA的私钥,生成的数字签名浏览器解不开,在浏览器校验的时候一定会出错,自然会丢弃的。

HTTPS中的SSL

HTTPS协议支持session,在一次session会话的过程中,客户端会接受到服务端发送的sessionId,服务器会把该密钥存到相应的sessionId下,之后浏览器每次请求都会携带sessionId,服务器会根据sessionId找到相应的密钥并进行解密加密操作,这样就不必要每次重新制作、传输密钥了。
image.png

HTTPS的缺点

  1. HTTPS协议多次握手,导致页面的加载时间延长近50%;
  2. HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
  3. 申请SSL证书需要钱,功能越强大的证书费用越高。
  4. SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。

HTTP和HTTPS的区别

  1. HTTPS是HTTP协议的安全版本,HTTP协议的数据传输是明文的,是不安全的,HTTPS使用了SSL/TLS协议进行了加密处理。
  2. http和https使用连接方式不同,http的连接是无状态的,https是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,默认端口也不一样,http是80,https是443。

乔梓鑫
569 声望17 粉丝

主要分享个人学习经验和心得