tangyuxian
文章47
标签21
分类4
算法-TLS/SSL介绍及加解密过程

算法-TLS/SSL介绍及加解密过程

简单了解TLS/SSL加解密过程

1. TLS\SSL基本介绍

SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层应用层之间对网络连接进行加密,SSL与TLS是一个东西。

无论是HTTPS(http传输加密)、WSS(websocket:ws传输加密)、还是其它应用程序之间的TLS传输,都与应用层协议无关,只是在TCP基础之上增加了一个加密过程。

TLS加密原理图:

img

2. 安装抓包工具

A. 官方下载地址

https://www.wireshark.org/download.html

安装完成后打开软件,可以看到本机网卡列表,后续我们通过它抓包来学习TLS.

img

B. 配置解密TSL数据

https://liuhuaqiang.blog.csdn.net/article/details/80887436(配置教程)

配置系统环境变量,SSLKEYLOGFILE = C:\ssl_key\sslog.log(注意后缀名一定用log不然不好使,不知道为啥),这样浏览器和WEB服务器协商的TLS秘钥信息会存储到文件中,我们就可以利用Wireshark解密了。注意:C:\ssl_key文件夹需要手动创建。

img

img

C. 抓取本机地址数据包

如果服务器与客户端都在同一台机器,正常客户端数据包是不走网卡的,所以正常情况抓不到,需要配置路由表,强制本机数据包也走网卡:

1.以管理员身份运行cmd

2.route add 本机ip mask 255.255.255.255 网关ip

如:route add 172.16.51.115 mask 255.255.255.255 172.16.1.1

使用完毕后用route delete 172.16.51.115 mask 255.255.255.255 172.16.1.1删除,否则所有本机报文都经过网卡出去走一圈回来很耗性能。

3. 配置Nginx-Https

nginx配置https需要用到私钥和证书,把前面生成好的直接拿来用(private_key_pkcs1.pem cert_x509.crt)。

安装nginx

yum install epel-release

yum update

yum install nginx

sudo nginx -v

nginx version: nginx/1.6.3

配置Https

使用我们前面创建的pkcs#1格式的私钥和X509格式的证书。

 server {

  listen    443 ssl;

  server_name  test_https;

    root     /usr/share/nginx/html;

 

    ssl_certificate "/etc/nginx/certs/cert_x509.crt";

    ssl_certificate_key "/etc/nginx/certs/private_key_pkcs1.pem";

    ssl_session_cache shared:SSL:1m;

    ssl_session_timeout  10m;

    ssl_ciphers HIGH:!aNULL:!MD5;

    ssl_prefer_server_ciphers on;

 

    location / {

    }

 

    error_page 404 /404.html;

    location = /404.html {

    }

 

    error_page 500 502 503 504 /50x.html;

    location = /50x.html {

    }

  }

启动Nginx

systemctl start nginx

systemctl enable nginx

image-20210518154028092

查看抓包效果,看到浏览器与Nginx通讯的数据已经全部抓到。

image-20210518154015760

4. TLS\SSL加解密过程

我们首选使用普通socket明文传输,然后抓包,可以看到TCP三次握手以后就开始发数据了,数据是明文的,很容易被第三方窃。

img

我们查看数据包,通过wireshark可以抓取到明文内容helloAlice,数据是没有被加密的。

img

接下来我们来看看使用TLS以后的传输过程,除了TCP的三次握手以外,还多了SSL握手的数据包,握手的过程就是协商对称加密的秘钥,然后再发送数据。

img

我们打开ApplicationData查看TCP报文,数据被加密,已经看不到明文信息了。

img

SSL属于应用层协议,在普通Socket传输基础之上增加了一个TLS层,负责加密与解密数据,加密解密使用对称加密算法完成,客户端与服务器端使用相同的秘钥。由于交换秘钥算法比较复杂,一般高级语言都提供了相应类库,屏蔽了底层的细节,我们直接使用即可。

img

本文作者:温故而知新666
文章来源:https://liuhuaqiang.blog.csdn.net/
本文链接:https://www.tangyuxian.com/2021/05/18/%E5%90%8E%E7%AB%AF/%E7%AE%97%E6%B3%95/%E7%AE%97%E6%B3%95-TLS-SSL%E4%BB%8B%E7%BB%8D%E5%8F%8A%E5%8A%A0%E8%A7%A3%E5%AF%86%E8%BF%87%E7%A8%8B/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可