http的缺点
- 通信使用明文,内容可能会被窃听;
- 不验证通信方的身份,因此有可能遭遇伪装;
- 无法证明报文的完整性,有可能已遭篡改;
什么是HTTPS
HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并不是一个新鲜协议,Google 很早就开始启用了,初衷是为了保证数据安全。
https简单的说就是安全版的http,因为http协议的数据都是明文进行传输的,所以对于一些敏感信息的传输就很不安全,为了安全传输敏感数据,网景公司设计了SSL(Secure Socket Layer),在http的基础上添加了一个安全传输层,对所有的数据都加密后再进行传输,客户端和服务器端收到加密数据后按照之前约定好的秘钥解密。
对称加密
对称加密是指用来加密和解密的是同一个秘钥。其特点是加密速度快,但是秘钥容易被黑客截获,所以安全性不高。常见的有AES、DES算法。
假如http只采用对称加密的方式进行通信,由于密钥是共享的,如果被中间人拦截得到密钥那么加密的意义就不存在了。那么有人可能就想到了非对称加密的方式。
非对称加密
加密和解密时使用不同的密钥,一般成对出现,称公钥和私钥。用公钥加密的数据需要用私钥来解密,用私钥来加密的内容需要用公钥来解密。非对称加密的特点是安全性高,缺点是加密效率低,需要进行大量的运算。常见的有RSA算法。
假如http只采用非对称加密的方式进行通信,咋一看是完美的中间人不可能得到私钥所以就无法解密。但是由于http并不能验证通信方的身份,所以就不能保证收到的公钥是真实你想要的通信用户的公钥,一旦是中间人的公钥这样也是不能保证完全的安全。所以就出现了第三方权威认证机构,这样就保证了通信的方身份的确认。
如果全部采用非对称加密的方式那样通信效率是很低的,他需要进行大量的运算。所以是同时采用对称加密和非对称加密的方式进行通信。真正的通信也是首先将对称加密的密钥用非对称加密的方式传输,之后的通信都采用对称加密的方式。
摘要
一段信息或者一个文件通过某个哈希算法(也叫摘要算法)而得到的一串字符。常用的摘要算法有MD5、SHA等。
数字签名
数字签名就是摘要通过私钥加密后的信息。
数字证书
数字证书是一个经证书授权中心生成的文件,数字证书里一般会包含公钥、公钥拥有者名称、CA的数字签名、有效期、授权中心名称、证书序列号等信息。其中CA的数字签名是验证证书是否被篡改的关键,它其实就是对证书里面除了CA的数字签名以外的内容进行摘要算法得到一个摘要,然后CA机构用他自己的私钥对这个摘要进行加密就生成了CA的数字签名,CA机构会公开它的公钥,验证证书时就是用这个公钥解密CA的数字签名,然后用来验证证书是否被篡改。
身份认证
CA机构:第三方身份认证的权威机构。CA认证机构会检验签名会信任一些CA认证证书。它会生成一对公钥和私钥。将公钥给网站证书,把私钥给网站。
浏览器收到证书后去验证,解析证书得到相关信息,然后使用公钥将证书中的数字签名进行解密得到摘要,使用同样的规则将相关进行Hash运算得到的值与摘要进行对比,如果相同就代表验证通过。
HTTPS握手过程
- Client Hello:初次建立握手,发送的数据有tls/ssl版本,Random对称机密算法需要用的随机值,Cipher Suites允许使用的加密算法
- Server Hello:tls版本、Cipher Suites服务端选择的加密方式、Random、Session ID(是否有值可以看出是否请求过该服务)
- Certificate:发送证书
- Server Key Exchange对称加密密钥协商
- Server Hello Done
- Client Key Exchagne, Change Cipher Spec, Encrypted Handshake Message(客户端生成密钥,切换密钥通讯,验证密钥是否正确)
- New Session Ticket(服务器告诉客户端之后要使用这种方式通信)
- Change Cipher Spec(切换密钥通信)
- Encrypted Hanldeshake Message(服务器验证客户端这个消息,双方通过算法产生的密钥是相同的)
- Application Data(http-over-tls,也就是所谓的https协议,唯一不同的就是多了一个Encrypted Application Data加密的数据, 之后的通信都在这里)