HTTP&HTTPS

从输入url到数据接受的过程
  1. 首先在浏览器中输入url地址
  2. 通过域名解析(DNS)解析出需要访问的服务器IP地址
  3. 建立TCP的三次握手链接
  4. 发起http请求
  5. 服务器响应接收到对应的请求并返回
  6. 通过返回数据客户端进行处理
那么存在问题是http中的数据安全不能保证,缺点主要有
  1. 数据为明文,容易非法获取,例如账号密码等
  2. 通信双方的身份没有确认,无法保证返回的数据是从理想的服务器中返回,中间可能有伪装成源服务器进行数据返回(DOS攻击 大量无意义的请求)
  3. 无法确认数据内容的完整性,可能被篡改

那么针对这些,出现了基于http的外层加上了ssl的外壳,通过这个外壳,有了上面基于http请求缺点的优化, 1.数据加密 2.身份验证 3.内容完整性确认

HTTP + 加密 + 认证 + 完整性保护 = HTTPS HTTP + SSL = HTTPS

数据加密

概念:

  1. 公开密钥 ---- 任何人可以获取的密钥。
  2. 私有密钥 ---- 只有自己知道保存的密钥
  3. 对称密钥(共享密钥) ----通过使用同一密钥进行加密解密.
  4. 非对称密钥 ----通过公钥加密,解密时通过私有密钥进行解密.

v1.1 使用对称密钥 ---- 首先通过服务器将共享密钥发送给客户端,客户端将这个密钥接收后进行加密发送给服务器进行解密处理

  • 存在问题: 不能确保密钥发送中不被攻击者获取,换句话说 如果能够确保密钥能被安全传送,那么数据也能被安全传输,也就不用加密方式了.

v1.2 使用公开密钥加密 ---- 首先通过服务器发送给客户端一个(单向)公开密钥(这个公开密钥可以被任何人知晓),但是解密必须需要服务器中存在的私有密钥才可以解密,这样就算攻击者获取了公开密钥,但是发送者的信息也是不能解密的.这也称作公开密钥的非对称加密.

  • 但是公开密钥加密的处理速度是非常慢的,为了优化https使用了混合

即将v1.1 + v1.2混合 首先通过v1.2公开密钥加密(非对称加密)将v1.1共享(对称)密钥加密进行传输给客户端,之后通信通过对称密钥加密进行传输,简而言之就是通过公开密钥加密的方式确保在发送对称(共享)密钥时是安全的.

存在疑惑: 初始服务器存有私有密钥,客户端通过公开密钥加密发送请求后服务器通过私有密钥解密,将共享密钥如何加密发送给客户端?客户端也有存在私有密钥进行解密吗?如果不是,那么服务器发送的单向公开密钥加密,客户端是如何解密的?

在混合v1.1 + v1.2之后还存在安全问题,攻击者对于客户端伪装成服务器,对于服务器伪装成客户端,对客户端生成攻击者的密钥进行传输通信,而对于服务器伪装成客户端进行数据请求。

针对于这个,出现了证书认证以及数字签名,服务器注册时将公钥和服务器信息上传在某机构中,在客户端请求时将(无法判断真假的)服务器返回的密钥在此机构中查询,判断密钥是否匹配.由此可以判断服务器的真假。

如果攻击者伪装公钥和真正服务器公钥相同呢?这时虽然解不了密,但是可以起到捣乱的作用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值