HTTPS加密流程
HTTPS加密流程
对称性加密
流程
- Client和Server拥有相同的秘钥文件
- Client用秘钥文件加密请求发送给server
- server也用秘钥文件加密response发回给Client
特点
优势
-
双方不用在网络中传输秘钥文件
-
加解密速度快
劣势
- 无法多client,只能用少数几个信任的client
- server更新秘钥文件就得更新client端,不方便
非对成型加密
流程
- Serve拥有公钥和私钥,Server在三次握手最后一个Ack包里将公钥明文传输给client
- Client在本地生成一个秘钥,用server的公钥加密传给Server
- server用私钥解开秘钥,之后双方就可以用秘钥加解密来传输数据
特点
优势
- 可以不用事先约定好的秘钥,动态生成
劣势
- 加解密耗时耗资源
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