博客
关于我
HTTPS连接过程以及数字证书的理解
阅读量:511 次
发布时间:2019-03-07

本文共 1684 字,大约阅读时间需要 5 分钟。

HTTPS比HTTP协议多了加密的过程,因为HTTP在网络上传输是明文传输,明文数据会经过中间代理服务器、路由器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了,因此需要HTTPS协议进行加密。

加密算法总体来说可以分为对称加密和非对称加密

对称加密

对称加密意思就是 客户端与服务器段拥有相同的密钥K,客户端发送时用K加密,服务器端用K解密。如果由服务器生成一个密钥并传输给浏览器,那在这个传输过程中密钥被别人劫持到手了,之后他就能用密钥解开双方传输的任何内容了。因此对称加密不行。

非对称加密

简单说就是有两把密钥,通常一把叫做公钥、一把叫私钥,用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开。

1、服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,这条数据的安全似乎可以保障了!因为只有服务器有相应的私钥能解开公钥加密的数据。但是这种方式只是看起来安全(后文解释中间人攻击),也就是只能保证客户端向服务器段发送的内容不会被窃取,因为公钥加密的内容只有私钥可以解密,而私钥只有服务器端才有。

对称加密+非对称加密

  1. 某服务器拥有用于非对称加密的公钥A、私钥A’。
  2. 浏览器向服务器请求,服务器把公钥A明文给传输浏览器。
  3. 浏览器随机生成一个用于对称加密的密钥X,用公钥A加密后传给服务器。
  4. 服务器拿到后用私钥A’解密得到密钥X。
  5. 这样双方就都拥有密钥X了,且别人无法知道它。之后双方所有数据都通过密钥X加密解密即可。

但是也存在中间人攻击

中间人攻击

也就是说有一个中间人替换了公钥A,用自己的公钥B发给客户端,这时候客户端是用B来加密对称密钥X的,这时候中间人有私钥B可以解密获得X,此时再将X用公钥A加密发送给服务器,这时候客户端和服务器发送的内容就都被中间人解密看到了,而客户端和服务器都不知道中间人的存在

分析:造成中间人攻击的原因是因为客户端分不清接收到的公钥到底是不是由服务器发送来的,因此这时候就引入了数字证书。

数字证书的作用就是保证客户端收到的公钥是服务器端的公钥

 

数字证书

数字证书是Https实现安全传输的基础,它是由权威的CA机构颁发的,数字证书的内容主要有:

  1. 公钥:指向CA机构申请证书的服务器公钥
  2. ISSUER(证书的发布机构):CA
  3. Subject(证书持有者):服务器
  4. 证书有效期
  5. 签名算法
  6. 指纹算法,用该算法对整个证书的内容进行hash,得到下面的指纹
  7. 指纹

证书的签名:数字证书在发布的时候,CA机构将证书的指纹和指纹算法通过CA私钥加密得到的就是证书的签名了

所以当客户端向服务器端请求建立连接时,服务器端首先回发送数字证书+数字签名给客户端,数字签名附在电子证书后

有了证书后的通信过程

1、客户端请求建立HTTPS连接 ,2、服务器端发送数字证书给客户端,3、客户端验证数字证书确定这是正确服务器端的,并拿到服务器端的公钥,4、客户端生成一个随机数作为对称加密密钥X,5、客户端用服务器的公钥加密X发送给服务器,6、服务器接收到报文,用私钥解密报文获得对称密钥X,7、从此客户端与服务器端快乐的使用X来加密报文交流

问题1、如何防止数字证书被中间人修改

电子签名可以防止证书被修改,因为中间人修改了证书内容后,客户端接收到数字证书后,会首先使用CA的公钥来解密电子签名,从而获得指纹的指纹算法,之后使用指纹算法再将电子证书的内容计算一次hash值h1,从而和指纹对比。如果中间人修改了证书内容,那么客户端计算的h1与指纹不一致,就会连接失败。 中间人有没有可能在修改证书内容的同时将电子签名给修改了,答案是不可能,因为电子签名是用CA的私钥加密的,中间人不可能有CA的私钥,如果强行使用自己的私钥重新得到电子签名,那么客户端使用CA公钥是无法解密电子签名的。

问题2、如何防止数字证书被中间人替换

不可能,因为电子证书中是有证书的持有者的通过对比证书上的URL和我们请求的URL是否相同,我们还是可以判断当前证书是不是服务器发的证书

 

参考文献:

转载地址:http://gdejz.baihongyu.com/

你可能感兴趣的文章
Nginx:NginxConfig可视化配置工具安装
查看>>
ngModelController
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
ngrok内网穿透可以实现资源共享吗?快解析更加简洁
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>