)
HTTPS到底如何加密数据AESRSA混合加密方案一次讲透实战验证【免费下载链接】http_studyfollow me to study http项目地址: https://gitcode.com/gh_mirrors/ht/http_studyHTTPS 加密的核心秘密其实就藏在AES 对称加密与RSA 非对称加密的组合拳里。开源项目 http_study 基于 Nginx/OpenResty 搭建了一个完整的 HTTPS 实验环境用 Lua 脚本回显服务器协商出的加密套件再配合 Wireshark 抓包把「TLS 握手到底交换了什么」这件事看得清清楚楚——本文带你完整走一遍这套验证过程。先搞懂一个矛盾为什么两种加密都不能单打独斗加密方式代表算法优点致命短板对称加密AES速度极快适合加密大量数据双方必须共享同一把密钥怎么安全地递钥匙是难题非对称加密RSA / ECDHE公钥可公开解决密钥分发问题计算开销大速度慢只适合加密小东西于是 HTTPSTLS采用了混合加密方案 用RSA / ECDHE 非对称加密——只用来安全地传递会话密钥⚡ 用AES 对称加密——真正加密往来的 HTTP 请求和响应一句话总结非对称加密保安全对称加密保速度。TLS 握手的 4 个关键步骤TLS 1.2 视角ClientHello浏览器发起连接告诉服务器我支持的 TLS 版本、加密套件列表、一个随机数ServerHello 证书服务器选定一套加密算法比如ECDHE-RSA-AES256-GCM-SHA384回发自己的 RSA 签名证书Pre-Master Secret 交换浏览器验证证书后用 RSA 公钥加密一个预主密钥发给服务器ECDHE 模式下则是双方各算一个临时密钥更抗存了私钥也能解密历史流量的攻击建立会话密钥双方用预主密钥 之前的随机数各自算出同一把AES 会话密钥此后所有数据都用 AES-GCM 加密传输握手结束浏览器地址栏的小锁就亮了。用 http_study 实战服务器到底选了哪套加密第一步配置 HTTPS 服务器项目里 www/conf/http/servers/https.conf 就是一个教学级 HTTPS 配置几个关键行值得注意ssl_certificate ssl/chrono.crt; # RSA 2048 位证书 ssl_certificate_key ssl/chrono.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ecdh_curve X25519:P-256; # ECDHE 使用的椭圆曲线 ssl_ciphers AES128-GCM-SHA256:AES256-GCM-SHA384; # 440 端口的纯 RSA 套件配置中准备了多种剧本443 端口支持 TLS 1.2/1.3ECDHERSA 密钥交换AES-GCM 加密440 端口只允许 TLS 1.2 的纯RSA AES-GCM套件最适合抓包观察经典 RSA 混合加密全过程441/442 端口会话恢复Session Resumption与 Session Ticket用于观察跳过完整握手的复用流程第二步用 Lua 回显协商结果OpenResty 的ngx.ssl库可以直接读出握手结果。访问/26-1会执行 www/lua/26-1.lualocal str ssl handshake with .. ngx.var.ssl_cipher .. \n页面会直接告诉你类似ssl handshake with ECDHE-RSA-AES256-GCM-SHA384的结果——一眼就能确认密钥交换是 ECDHE/RSA体数据加密是AES-256-GCM。www/lua/27-1.lua 则专门打印协商出的 TLS 版本ssl.get_tls1_version_str()而 www/lua/30-1.lua 把 TLS 版本、加密套件、HTTP 版本一次性全部回显是排查我到底跑在哪个协议组合上的万能脚本。第三步Wireshark 抓包验证项目 wireshark/ 目录下提供了配套的抓包文件重点看wireshark/26-1.pcapng、wireshark/26-2.pcapngTLS 1.2 握手与 RSA 密钥交换的完整报文wireshark/27-1.pcapngTLS 1.3 握手注意它只用了 1-RTT加密套件里已看不到 RSA 密钥交换wireshark/31-1.pcapng会话恢复流程在 Wireshark 里过滤tls.handshake.type 11能看到服务器发来的 Finished 报文——它之前的所有握手消息恰恰就是双方计算 AES 会话密钥的全部输入。一键跑起来git clone https://gitcode.com/gh_mirrors/ht/http_study docker pull chronolaw/http_study docker run -it --rm chronolaw/http_study bash进入容器后按 README.md 的指引配置 hosts 并信任示例证书然后cd ~/http_study/www ./run.sh start curl https://127.0.0.1:440/ # 纯 RSA AES 握手 curl https://127.0.0.1/26-1 # 查看实际协商出的套件TLS 1.3 时代RSA 被 ECDHE 取代了验证时你可能会发现浏览器几乎总会协商出 TLS 1.3如TLS_AES_256_GCM_SHA384。这里有几个值得注意的变化✅RSA 只保留签名证书的职责不再参与密钥交换——前向保密成为默认✅ 握手从 2-RTT 压缩到 1-RTT甚至支持 0-RTT 早期数据✅ 弱算法如 AES-CBC被移除只保留AES-GCM和 ChaCha20-Poly1305 这类 AEAD 算法用 440 端口的纯 RSA 配置 TLS 1.2 抓包仍然是理解混合加密原理的最佳实验场景而 443 端口的默认配置则代表当下生产环境的真实面貌。总结问题答案HTTPS 用什么加密数据AES对称加密AES-GCM 模式AES 密钥怎么安全送达RSA或 ECDHE 非对称机制怎么验证自己服务器用的什么查ssl_cipher变量 / 浏览器锁图标详情 / Wireshark 抓包最佳实践是什么优先 ECDHE 密钥交换 TLS 1.3 AES-GCM开启 HSTShttp_study 用 443/440/441/442 四个端口分别演示了标准握手、纯 RSA 混合加密、会话恢复和 Ticket 复用配合 Lua 回显脚本与 Wireshark 抓包文件是一套难得的看得见、摸得着的 HTTPS 加密教学环境。建议从 440 端口的抓包开始亲手把 ClientHello 到 Finished 的每一步对照着看一遍混合加密的全部细节就再也藏不住了。【免费下载链接】http_studyfollow me to study http项目地址: https://gitcode.com/gh_mirrors/ht/http_study创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考