1.Http与Https
1、HTTPS是加密传输协议,HTTP是名文传输协议;
2、HTTPS需要用到SSL证书,而HTTP不用;
3、HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
2.Https协议基础
Https叫做安全超文本传输协议,基于http开发,用于在客户端和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版,是使用TLS/SSL加密的HTTP协议。这种加密方式是在通信线路上加密,用ssl建立安全通信线路。
HTTP+ 加密 + 认证 + 完整性保护 =HTTPS
https协议中使用的三种加密算法:
非对称加密算法 RSA/ECC/DH 用于在握手过层中加密密码,密钥成对出现,一个公钥一个私钥。公钥加密的信息只能用私钥解开,私钥加密的信息只能用公钥解开,客户端掌握公钥,服务器掌握私钥,服务器用私钥解密客户端发送的密码,客户端用公钥解密服务器发送的密码,验证服务器身份。服务器和客户端可以实现一对多通信。
对称加密算法 AES/DES/RC4 相同的密钥可以用于信息的加密和解密,掌握密钥才能获取信息,能够防止信息窃听,通信方式是1对1。用于对传输的数据进行加密。
HASH算法 MD5 用于验证数据的完整性。单向不可逆,已知密码无法推测出明文,生成的所有密码长度相等,但是可以用暴力破解的方法,匹配生成的密码在数据库中查找对应的明文。
https请求的过程:
请求过程非常复杂,我只是简单描述一下大致的过程。
1.客户端向服务器发送明文请求,相当于告诉服务器:你好,我是客户端。同时发送了自己支持的一套加密规则和一个随机数random_c。
2.服务器向客户端发出响应并发送自己的证书。同时发送了选择使用的加密规则,一个随机数random_s。
3.客户端对服务器发来的证书进行校验, 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等)。
校验如果失败,连接终止,如果校验成功,客户端生成一个随机数字Pre-master用服务器发来的公钥进行加密,生成enc_pre_master。
此时客户端计算协商密钥,enc_key=Fuc(random_C, random_S, Pre-Master)
生成握手信息:使用约定好的HASH计算握手消息,并使用协商密钥enc_key及约定好的算法对消息进行加密。
4.客户端把之前生成的数据发送给服务器,包括公钥加密随机数得到的enc_pre_master,握手信息,以及通知。
5.客户端收到用户发来的en_pre_master,用自己的私钥解密,得到Pre_master。根据Pre_master、random_S和random_C计算出协商密钥enc_key=Fuc(random_C, random_S, Pre-Master)。
使用协商密钥enc_key解密客户端发来的握手信息,并检验hash是不是客户端发来的。
生成握手消息使用协商密钥enc_key及约定好的算法加密一段握手消息,发送给客户端。
6.服务器把握手消息发给客户端。
7.客户端拿到握手消息并计算hash,如果hash与服务器发来的一致握手成功。
8.开始数据传输,传输的数据使用对称加密算法加密。