【阿里】简述下 TLS 握手过程

心已入冬 提交于 2021-02-16 21:47:17
从亨茨梅萨俯瞰纪念碑谷,亚利桑那州与犹他州之间纳瓦霍族保留地
(© AWL Images/Danita Delimont)

本题摘自于我 github 上的面试每日一题:https://github.com/shfshanyue/Daily-Question,并有大厂面经及内推信息,可「在左下角打开本题原文链接」

TLS 握手的详细过程可参考下图:

TLS handshake

以上图片来自 high-performance-browser

wireshark 抓包,也可以看到握手的详细流程,建议抓包加强理解,以下是抓包 https://q.shanyue.tech 时的握手流程

通过 curl -vvv --head 来查看握手信息:

$ curl -vvv --head  https://q.shanyue.tech
*   Trying 111.6.180.235...
* TCP_NODELAY set
* Connected to q.shanyue.tech (111.6.180.235) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=q.shanyue.tech
*  start date: Dec  2 00:00:00 2019 GMT
*  expire date: Dec  1 12:00:00 2020 GMT
*  subjectAltName: host "q.shanyue.tech" matched cert's "q.shanyue.tech"
*  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=Encryption Everywhere DV TLS CA - G1
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7f95ba80dc00)

握手过程

  1. [OUT] Client Hello,客户端选出自己支持的 TLS 版本号、 cipher suites 以及一个随机数给服务器端
  2. [IN] Server Hello,服务器端选出双方都支持的 TLS 版本, cipher suite 以及一个随机数给服务端
  3. [IN] Certificate,服务器端给客户端发送证书,用以验证合法性及提供公钥
  4. [IN] Server Key Exchange,服务器端给客户端发送 DH 秘钥交换算法的一些参数
  5. [IN] Server Finished
  6. [OUT] Client Key Exchange,客户端给服务器端发送 DH 公钥,并计算出对称加密中的公钥
  7. [OUT] Change Cipher Spec,告知对方以后的消息将要使用TLS记录层协议进行加密
  8. [OUT] Finished,发送第一条加密的消息
  9. [IN] Change Cipher Spec,告知以后的消息将要使用TLS记录层协议进行加密
  10. [IN] Finished,发送第一条加密的消息

相关链接

  • https握手流程详解
  • Chapter 4. Transport Layer Security (TLS)

更多面试

【字节-视频架构组-前端】头条架构组招人了内含自测题
【美团】什么是防抖和节流,他们的应用场景有哪些
【美团】如何获取一个进程的内存并监控

关注我

我是山月,正致力于「每天用五分钟能够看完的简短答案回答一个大厂高频面试题」。扫码添加我的微信,备注进群,加入高级前端进阶群.

加我微信拉你进入面试交流群

欢迎关注公众号【互联网大厂招聘】,定时推送大厂内推信息及面试题简答,每天学习五分钟,半年进入大厂中

每天五分钟,半年大厂中

本文分享自微信公众号 - 互联网大厂招聘(gh_5f162937a2ad)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!