HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。HTTPS协议是在HTTP的基础上加上了一个协议。
- SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
- TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。
SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。
HTTPS 中使用到了对称加密和非对称加密,在不同的阶段使用。
加密算法
哈希算法:哈希函数:echo xxx|md5sum (输入值不一样,输出值也不一样,但是密码长度都是一样的)将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。
例如:MD5、SHA-1、SHA-2、SHA-256 等
非对称加密
HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段。
HTTPS的整体过程分为证书验证和数据传输阶段,具体的交互过程如下:
1、证书验证阶段
- 浏览器发起 HTTPS 请求
- 服务端返回 HTTPS 证书
- 客户端验证证书是否合法,如果不合法则提示告警
2、数据传输阶段
- 当证书验证合法后,在本地生成随机数
- 通过公钥加密随机数,并把加密后的随机数传输到服务端
- 服务端通过私钥对随机数进行解密
- 服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输
①客户端向服务端发送访问(通过域名访问或者ip地址访问)请求。
② CA数字证书加密环节:CA证书使用自己的私钥对证书进行加密。
③ 服务器响应客户端的请求,并携带着数字证书(证书包含公钥A)发送给客户端。私钥B自己留着
④ 客户端进行证书验证环节:客户端对证书进行解析,验证公钥的合法性。
公钥不合法:提示http警告。
非对称加密:
公钥合法:取出公钥A并生成随机字符串KEY。使用公钥A加密随机字符串 KEY
⑤客户端把加密后的随机字符串发送给服务器,作为接下来对称加密的密钥。
对称加密:
⑥ 服务端使用私钥B解密随机字符串KEY,获取随机字符串KEY,使用随机字符串KEY,对传输数据进行对称加密。
⑦服务端传输对称加密的内容。
客户端使用之前生成的随机字符串 KEY解密数据。
⑧ 客户端和服务端通过对称加密传输所有内容。
中间人攻击
为了解决中间人攻击于是引入了数字签名。
CA证书如何使用:证书需要购买,CA机构购买,然后安装
3、密钥
公钥和私钥是一对加密使用的密钥(字符串)---可以自己产生也可以向CA申请。CA也有公钥和私钥。
CA:第三方认证 担保 、公证。CA有自己的私钥和公钥。以下是客户端和服务端公私钥认证过程
假如:A客户端 B:服务端
当用户通过浏览器(客户端)去访问B服务端的时候,服务端会去CA那里购买一个证书,CA会使用自己的私钥对证书进行加密然后给B服务端,然后B服务端就会将自己的公钥和认证过的证书发送给A客户端,A客户端内部会与CA进行合作,CA会之前给服务器端认证过的公钥发给A客户端,A客户端就会拿着这CA给的这个公钥认证服务器端发送过来的证书是否合法,如果合法的话就验证通过,然后客户端就使用自己的公钥对服务端发送过来的公钥进行加密,生成一个随机字符串。
然后再发送给服务端,服务端再使用自己的私钥对客户端传过来的公钥进行解密,解密获取到一个随机字符串(公钥加密的密文只有私钥可以解密,私钥加密的内容,也只有公钥可以解密)然后使用随机字符串对传输数据进行对称加密,然后将对称加密后的内容传输给客户端,然后客户端使用之前生成的随机字符串进程解密数据,最后就是双方通过对称加密传输所有的内容。
CA会给A一个身份证明(A上面也有公钥和私钥),里面携带的是CA的公钥。
浏览器内部会去找CA进行认证,如果是不安全的连接会发出警告(提醒),
B(含有公钥和私钥)拿到A的公钥之后会去找CA去做身份识别。
4、HTTPS的四次握手过程
客户端发起HTTPS请求
服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以是自己制作或者CA证书。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用CA证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。公钥给别人加密使用,私钥给自己解密使用。
传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等。
客户端解析证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随随机值,然后用证书对该随机值进行加密。
传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
传输加密后的信息
这部分信息是服务端用私钥加密后的信息,可以在客户端被还原。
客户端解密信息
客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容。
整个握手过程第三方即使监听到了数据,也束手无 策。