在说HTTPS以前先说说什么是HTTP,HTTP就是咱们平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的,也就是明文的,所以使用HTTP协议传输隐私信息很是不安全。为了保证这些隐私数据能加密传输,因而网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定义在RFC 6101中,以后IETF对SSL 3.0进行了升级,因而出现了TLS(Transport Layer Security) 1.0,定义在RFC 2246。实际上咱们如今的HTTPS都是用的TLS协议,可是因为SSL出现的时间比较早,而且依旧被如今浏览器所支持,所以SSL依然是HTTPS的代名词,但不管是TLS仍是SSL都是上个世纪的事情,SSL最后一个版本是3.0,从此TLS将会继承SSL优良血统继续为咱们进行加密服务。目前TLS的版本是1.2,定义在RFC 5246中,暂时尚未被普遍的使用 ()html
概念可参考百科web
Https在真正请求数据前,先会与服务有几回握手验证,以证实相互的身份,如下图为例windows
2.1 验证流程浏览器
注:文中所写的序号与图不对应但流程是对应的安全
1 客户端发起一个https的请求,把自身支持的一系列Cipher Suite(密钥算法套件,简称Cipher)发送给服务端服务器
2 服务端,接收到客户端全部的Cipher后与自身支持的对比,若是不支持则链接断开,反之则会从中选出一种加密算法和HASH算法网络
以证书的形式返回给客户端 证书中还包含了 公钥 颁证机构 网址 失效日期等等。post
3 客户端收到服务端响应后会作如下几件事网站
3.1 验证证书的合法性
颁发证书的机构是否合法与是否过时,证书中包含的网站地址是否与正在访问的地址一致等
证书验证经过后,在浏览器的地址栏会加上一把小锁(每家浏览器验证经过后的提示不同 不作讨论)
3.2 生成随机密码
若是证书验证经过,或者用户接受了不授信的证书,此时浏览器会生成一串随机数,而后用证书中的公钥加密。
3.3 HASH握手信息
用最开始约定好的HASH方式,把握手消息取HASH值, 而后用 随机数加密 “握手消息+握手消息HASH值(签名)” 并一块儿发送给服务端
在这里之因此要取握手消息的HASH值,主要是把握手消息作一个签名,用于验证握手消息在传输过程当中没有被篡改过。
4 服务端拿到客户端传来的密文,用本身的私钥来解密握手消息取出随机数密码,再用随机数密码 解密 握手消息与HASH值,并与传过来的HASH值作对比确认是否一致。
而后用随机密码加密一段握手消息(握手消息+握手消息的HASH值 )给客户端
5 客户端用随机数解密并计算握手消息的HASH,若是与服务端发来的HASH一致,此时握手过程结束,以后全部的通讯数据将由以前浏览器生成的随机密码并利用对称加密算法进行加密
由于这串密钥只有客户端和服务端知道,因此即便中间请求被拦截也是无法解密数据的,以此保证了通讯的安全
非对称加密算法:RSA,DSA/DSS 在客户端与服务端相互验证的过程当中用的是对称加密
对称加密算法:AES,RC4,3DES 客户端与服务端相互验证经过后,以随机数做为密钥时,就是对称加密
HASH算法:MD5,SHA1,SHA256 在确认握手消息没有被篡改时
2.2 客户端如何验证 证书的合法性?
1. 验证证书是否在有效期内。
在服务端面返回的证书中会包含证书的有效期,能够经过失效日期来验证 证书是否过时
2. 验证证书是否被吊销了。
被吊销后的证书是无效的。验证吊销有CRL(证书吊销列表)和OCSP(在线证书检查)两种方法。
证书被吊销后会被记录在CRL中,CA会按期发布CRL。应用程序能够依靠CRL来检查证书是否被吊销了。
CRL有两个缺点,一是有可能会很大,下载很麻烦。针对这种状况有增量CRL这种方案。二是有滞后性,就算证书被吊销了,应用也只能等到发布最新的CRL后才能知道。
增量CRL也能解决一部分问题,但没有完全解决。OCSP是在线证书状态检查协议。应用按照标准发送一个请求,对某张证书进行查询,以后服务器返回证书状态。
OCSP能够认为是即时的(实际实现中可能会有必定延迟),因此没有CRL的缺点。
3. 验证证书是不是上级CA签发的。
若是您以为本文让您有所收获,不妨点下赞,为个人付出,给一点点回报!
若是您以为本人也有点意思,不妨点个观注,你们一块儿谈技术,谈人生!
如下为参考资料