HTTPS 协议是由 HTTP 加上 TLS/SSL协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。设计目标主要有三个。
(1)数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么
(2)数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收
(3)身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方
TLS/SSL:
不同于HTTP数据传输,在HTTPS真正的B/S数据传输前,都会进行一次TLS/SSL握手,而后双方发送的消息都会有包含已完成SSL握手的状态,即以后的数据传输都会进行TLS/SSL加密!
TLS/SSL协议包含:握手协议(简单/完全)和记录协议两部分;
采用Https协议的服务端必须要有一套数字证书(公/私钥),客户端可有可无!服务端分发公钥,无数量限制!
TLS/SSL解析验证服务端传送过来的包含公钥的数字证书;
可是一个服务器应用只有一套证书,也就是说只有一对公/私钥,对于每次Https连接,都需要进行加/解密,这是非对称加密,非对称加密的作用是传输客户端生成的私钥(随机值),让客户端生成的私钥通过非对称加密(服务端返回的公钥数字证书)的方式返回给服务端,在利用此私钥(随机值)对传输的数据进行对称加密!
以下简述单双向认证的流程:
单向认证流程:
1.客户端say hello 服务端
2.服务端将证书、公钥等发给客户端
3.客户端CA验证证书,成功继续、不成功弹出选择页面
4.客户端告知服务端所支持的加密算法
5.服务端选择最高级别加密算法明文通知客户端
6.客户端生成随机对称密匙key,使用服务端公钥加密发送给服务端
7.服务端使用私钥解密,获取对称密匙key
8.后续客户端与服务端使用该密匙key进行加密通信
双向认证流程:
1.客户端say hello 服务端
2.服务端将证书、公钥等发给客户端
3.客户端CA验证证书,成功继续、不成功弹出选择页面
4.客户端将自己的证书和公钥发送给服务端
5.服务端验证客户端证书,如不通过直接断开连接
6.客户端告知服务端所支持的加密算法
7.服务端选择最高级别加密算法使用客户端公钥加密后发送给客户端
8.客户端收到后使用私钥解密并生成随机对称密匙key,使用服务端公钥加密发送给服务端
9.服务端使用私钥解密,获取对称密匙key
10.后续客户端与服务端使用该密匙key进行加密通信
CA证书认证概述:
每个证书都是基于某一个根证书颁发的,我们系统只需要存储好授信的根证书,那么基于此被授信的根证书所颁发的合法的证书在验证的时候都是可以验证通过的
问题:
1、客户端具体是怎么验证证书的?
答:首先我们的电脑系统有一个证书池,系统会去维护和更新;证书池中存 有受信任的根证书!
2、证书分哪两种?
答:一种是花钱向认证机构购买的证书,服务端如果使用的是这类证书,那一般客户端都不需要做什么,直接用https请求就行了,因为客户端(Android/IOS/PC)都有内置那些受信任的根证书;另一种是自己制作的证书,使用这类证书虽然是免费的但同时也是不受信任的,因此需要在代码中将该证书设置为受信任的证书。
3、什么是根证书?
用户所用的证书都是基于某一根证书签发的,如果客户端或者服务端下载有根证书,则表示您对该根证书下所签发的证书都是信任的;单向认证和双向认证都是验证的所使用的证书和其根证书的关系;
单向认证:客户端验证其下载的根证书和服务端所使用的证书;
双向认证:客户端验证其下载的根证书和服务端所使用的证书;服务端验证其下载的根证书和客户端所使用的证书;
4、证书的产生?
每一个有效的签名证书B,都需要另一个证书A对其进行签名。而验证B证书的有效性,就是验证B证书的签名是否有效,而签名一般都是私钥签名公钥验证,其中此公钥是存在与A证书中的;但是也需要验证A证书真伪,故而有需要签发A证书的证书来验证,这样就构成了一条证书链的关系,证书链的终结就是根证书,由于根证书的签发者是它自己本身,所以根证书可以自验证,下载根证书,则表示您对该根证书下所签发的证书都是信任的。所以用户在使用自己的数字证书之前,也必须先下载根证书,已验证其数字证书的真伪;、
CA认证中心,在调用签发其他用户证书时调用根证书的签名私钥对其进行数字签名。
5、自签根证书:
安装openSSL,用以完成自签CA根证书的生成;
分发根证书:
a、一般通过邮件服务商或者存储下载供应商;
b、不建议直接通过http连接分发出去,这样是不安全的
网友评论