美文网首页
HTTPS 小记

HTTPS 小记

作者: zhanghTK | 来源:发表于2018-07-01 17:29 被阅读0次

title: HTTPS小记
date: 2016-10-24 23:58:06
tags: daily
categories: 其它


背景

最近好像跟HTTPS较上劲了,连续碰到与之相关问题。自己对HTTPS了解的并不多,今天简单了解了一下,在此做个记录。

首先有几个基本概念,TCP/IP协议,HTTP一些,对称/非对称加密,证书,公钥/私钥。

TCP/TP:

  • 传输层协议,主要解决数据如何在网络中传输

HTTP:

  • 应用层协议,主要解决如何包装数据,依赖TCP/IP协议

对称加密:

  • 加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来

非对称加密:

  • 加密和解密过程使用了不同的密钥。分为公钥和私钥,它们可以互相解密。
  • 公钥加密,私钥解密
  • 私钥数字签名,公钥验证

证书:

  • 我理解主要是两个作用:验证证书持有者身份、提供证书持有者公钥

为什么用HTTPS

因为HTTP不安全。

  1. HTTP使用的是明文传输,容易被窃取
  2. 无法验证报文完整性,可能被篡改
  3. 无法验证通信双方的身份

为了对HTTP提供安全保障,就依赖:

SSL与TLS

SSL(Secure Socket Layer,安全套接字层)

TLS(Transport Layer Security,传输层安全协议)

TLS可以理解为SSL的增强版。

HTTP直接与TCP通信,而在HTTPS中首先与SSL通信,SSL再与TCP通信。我觉得可以理解成HTTPS = HTTP + SSL。

不论HTTP还是HTTPS,所有的通信、加解密都是最终都是建立在TCP/IP之上的。

加密思路

  1. 客户端向服务器端索要并验证公钥;
  2. 双方协商生成"对话密钥";
  3. 双方采用"对话密钥"进行加密通信;

在通信过程中其实双方使用的还是对称的加密算法,但是为了让这个对称的加密算法足够安全。首先使用非对称的算法来获取对话密钥,之后再用对话密钥来对通信的内容加密解密。

所以关键问题就变成了:

对话密钥的创建

我没有仔细阅读相关协议,在网上查了一些资料,下面的内容是根据自己的理解写的。

简单描述一次对话密钥的获取过程:

C:我想跟服务器A说悄悄话,我支持1,2,3版本的协议。我先跟你说个秘密X。

S:我是服务器A。我们用3版本的协议说话吧,我也给你说个秘密Y。我再给你个公钥,使用它加密后的信息就只有我能听懂了。

C:让我先看看你是不是服务器A。(确认是服务器A)那我再给你说个秘密Z,这次用你给我的公钥对Z加密,确保其他人都不知道。以后我们用X,Y,Z这三个秘密来验证彼此的消息。我要跟你确认的就这些。

S:好的,以后我们用X,Y,Z这三个秘密来验证彼此的消息。我要确认的也就这些内容。网上把上面四个步骤描述

网上把上述的四个步骤描述为:

  • 客户端发出请求
    • 支持的协议版本,比如TLS 1.0版
    • 一个随机数
    • 支持的加密方法,比如RSA公钥加密
    • 支持的压缩方法
  • 服务器回应
    • 协议的版本
    • 加密的算法
    • 生成随机数
    • 服务器证书
  • 客户端回应
    • 对服务器下发的证书进行验证
    • 再次产生一个随机数(第三个随机数)
    • 使用服务器证书中的公钥进行加密
    • 发送编码改变的消息
    • 发送整个前面所有消息的hash值
    • 根据三个随机数生成对话密钥
  • 服务器最终回应
    • 使用私钥解密接收到第三个随机数
    • 验证数据完整性
    • 使用跟客户端同样的方式生成对话密钥
    • 告知客户端已经切换到协商过的加密套件状态
    • 服务端发送消息验证加解密是否成功

如果服务器需要对客户端的身份进行认证,那么在第一次服务器回应中可以向客户端索取证书。客户端提供证书后,服务器通过验证客户端证书,从而验证客户端的身份。

相关文章

网友评论

      本文标题:HTTPS 小记

      本文链接:https://www.haomeiwen.com/subject/fbdseftx.html