参考资料: https://blog.csdn.net/sessos/article/details/87785044
https://www.cnblogs.com/liyuhui-Z/p/7844880.html
https://www.jianshu.com/p/0e153f62fe32
HTTPS的建立连接的流程
- 在使用HTTPS是需要保证服务端配置正确了对应的安全证书
- 客户端发送请求到服务端
- 服务端返回公钥和证书到客户端
- 客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数,用公钥对其加密,发送到服务端
- 服务端接受到这个加密后的随机数后会用私钥对其解密得到真正的随机数,随后用这个随机数当做私钥对需要发送的数据进行对称加密
- 客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户
- SSL加密建立
Md5加密:最大特点是不可逆,想要验证是否正确只能拿加密的后的密文做对比.
非对称加密:有一个公钥 和 私钥,使用私钥加密,所有的公钥都可以解密,使用公钥加密只有私钥才能解密 局限性:不能加密太长的数据
对称加密:使用密钥可以对数据进行加密,也可以解密,加密的数据长度不限制. 局限性:不够安全
权威机构生成证书的流程:
- 使用非对称加密算法加密 服务端的密钥,服务端域名
- 将加密后的数据存到证书中
- 浏览器,操作系统会内置权威机构的信息,持有权威机构非对称加密的公钥,使用公钥就可以得到 服务端的密钥和服务端的域名
这里的权威机构我摘录了参考资料中的一段话,再来正式解释一下:
所谓的公证人,其实就是CA啦,全名为“数字证书认证机构”,英文全称叫做“Certificate Authority”。 就是它来充当这个“公证人”的角色。
一般的网站运营商,都会提前向CA申请一个电子证书。CA会通过自己的私钥将网站的公钥和网站的各种相关信息,比如域名等等进行加密。加密后形成电子证书,颁发给申请者。申请者,会把这个电子证书部署到服务器上。
对于权威的CA来说,他们的公钥,都会由操作系统内置。比如微软的windows就内置了几十个不同的CA的公钥。客户端收到服务器发来的电子证书以后,会对通过内置的CA公钥,对证书进行认证(私钥加密,公钥认证)。若认证成功,则代表是本次来自服务器的响应,是可信的。
https建立连接的流程:
- 服务端会向权威机构申请证书,
-
- 权威机构使用非对称加密后的密钥
- 证书对应的域名(权威机构会为域名生成一个唯一的证书)
-
- 服务端向客户端发送证书
- 客户端拿到证书获取密钥
-
- 使用权威机构的公钥进行解密,得到私钥和域名
- 比较域名是否是想要访问的域名,若是正确,建立连接成功
-
Eg: A是用户,B是百度,C是腾讯. D是权威机构(颁发电子签名的机构)
- 用户访问百度建立连接,百度会去权威机构申请一个证书,这个证书中包含了通讯的密钥(百度和用户通讯的密钥)和访问的域名baidu.com ,然后把这个证书返回给用户,用户的浏览器或者操作系统注册有权威机构的认证,持有权威机构加密的公钥,可以解密这个证书.这个时候解密成功,得到密钥,验证域名是想要访问的百度域名.建立连接成功.
- 如果腾讯从中拦截,把百度的证书替换成了腾讯的证书,这个证书也是由权威机构颁发的,所以用户还是能够正确的解密证书,拿到密钥和域名,但是在校验域名的时候发现这个域名不是想要访问的域名,就会认为这个是伪造的证书.
- 那么腾讯能不能把证书的中域名也替换成baoidu.com,但是密钥是腾讯的密钥呢? 答案是不能的,因为证书的生成只能是权威机构生成证书,生成证书是用的非对称加密,腾讯没有加密的私钥,不能生成.