HTTPS加密流程

HTTPS加密流程

对称性加密

流程

  • Client和Server拥有相同的秘钥文件
  • Client用秘钥文件加密请求发送给server
  • server也用秘钥文件加密response发回给Client

特点

优势

  1. 双方不用在网络中传输秘钥文件

  2. 加解密速度快

劣势

  1. 无法多client,只能用少数几个信任的client
  2. server更新秘钥文件就得更新client端,不方便

非对成型加密

流程

  • Serve拥有公钥和私钥,Server在三次握手最后一个Ack包里将公钥明文传输给client
  • Client在本地生成一个秘钥,用server的公钥加密传给Server
  • server用私钥解开秘钥,之后双方就可以用秘钥加解密来传输数据

特点

优势

  1. 可以不用事先约定好的秘钥,动态生成

劣势

  1. 加解密耗时耗资源

TLS加解密过程

对称 + 非对称加解密

流程:

  • server有公钥A和私钥B
  • 服务器将公钥A明文传给client
  • client生成一个用于数据加密的秘钥X,并用公钥A发回给Server
  • server用私钥B解开加密数据得到秘钥X
  • 之后Server和client用秘钥X来加解密数据

CA证书

为了表示server发过来的公钥是可信的,所以需要对公钥进行验证

  • server发送CA证书给client

    里面包括两端内容:

    • 公钥A和server信息组成的大数据段C(域名,运行商信息等)
    • 数字签名:
      • 对数据C进行hash变成hash值T,在用私钥BB(另一对公钥AA和私钥BB)对T进行加密变成数字签名
  • Client收到CA证书后用浏览器内置的公钥AA对数字签名进行解密和反Hash,得到结果后与数据段C进行匹配

    • 匹配则数据段C里的公钥A可信任
    • 不匹配则数据段C里的公钥A不可信任

证书生成步骤

自签名和本地签名两种方式

# 1. 生成 2048 位 的 RSA 密钥
openssl genrsa -out server.key 2048
# 2. 通过第一步编写的配置文件,生成证书签名请求(公钥+申请者信息)
openssl req -new -key server.key -out server.csr -config csr.conf
# 3. 生成最终的证书,这里指定证书有效期 3650 天
## 3.1 方法一(自签名):使用 server.key 进行自签名。这种方式得到的证书不包含 SAN!不支持多域名!
openssl req -x509 -sha256 -days 3650 -key server.key -in server.csr -out server.crt
## 3.2 方法二(本地签名):生成 ca 证书,并且使用 CA 证书、CA 密钥对 `csr` 文件进行签名
### 3.2.1 ca 私钥
openssl genrsa -out ca.key 2048
### 3.2.2 ca 证书,ca 证书的有效期尽量设长一点,因为不方便更新换代。
openssl req -x509 -new -nodes -key ca.key -subj "/CN=MyLocalRootCA" -days 10000 -out ca.crt
### 3.2.3 签名,得到最终的 TLS 证书,它包含四部分内容:公钥+申请者信息 + 颁发者(CA)的信息+签名(使用 CA 私钥加密)
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \
  -CAcreateserial -out server.crt -days 3650 \
  -extensions v3_ext -extfile csr.conf
posted @ 2021-11-29 18:14  无知是恶  阅读(518)  评论(0编辑  收藏  举报