HTTPS加密流程

HTTPS是互联网上应用最为广泛的一种安全协议,它结合了HTTP与SSL/TLS,为浏览器和服务器之间的通信提供了加密和身份验证。HTTPS的主要流程包括:1) 建立TCP连接;2) 客户端发送Hello消息,包含支持的TLS版本和加密套件;3) 服务器回应Hello消息,选择最高的TLS版本和一个加密套件,并发送证书;4) 客户端验证服务器证书并生成随机数,用于密钥交换;5) 客户端发送ChangeCipherSpec和Finished消息,使用预主密钥加密;6) 服务器同样发送ChangeCipherSpec和Finished消息;7) 之后所有数据都将加密传输。


1、客户端发起https请求首先向服务端发送客户端SSL/TLS协议版本号支持的加密算法种类(如:RSA加密算法,DES对称加密算法,SHA1摘要算法)、产生随机数等信息

2、服务端向浏览器回传SSL/TLS 协议版本号、选择一种客户端浏览器支持的加密算法和HASH算法、随机数、服务端证书等信息,证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息;证书中的私钥只能用于服务器端进行解密,在握手的整个过程中,都用到了证书中的公钥和浏览器发送给服务器的随机密码以及对称加密算法

3、客户端浏览器利用服务端回传的信息验证服务端的合法性;合法性包括:证书是否过期、发行服务器证书的CA是否可靠、证书的公钥能否正确解开服务端证书的“数字签名(使用私钥加密,只有公钥能解密)”、服务端证书上的域名和服务端实际域名是否匹配;合法则继续(浏览器栏里面会显示一个小锁头),否则断开连接;

4、客户端浏览器随机产生一个随机数(对称密码),然后用服务端证书的公钥对随机“对称密码”加密;
     根据服务端指定的HASH算法(如SHA1)对握手消息进行加密,并使用生成的“对称密码”对握手消息进行对称加密
     最后将对称密码、加密的握手消息、hash后的握手消息发送给服务端、

5、服务端使用私钥解密获得随机“对称密码”,然后使用随机“对称密码”解密客户端浏览器发送的握手消息,并验证hash与浏览器发送过来的是否一样;

6、服务端使用随机“对称密码”加密握手信息,发送给客户端浏览器

7、客户端浏览器使用随机“对称密码”解密握手消息并比较服务端发送的hash是否一致
一致此时握手结束,以后的通讯都是使用这个随机“密码”加密;

使用抓包工具相当于客户端请求抓包工具,抓包工具再请求服务器

### HTTPS加密的工作原理 HTTPS通过SSL/TLS协议实现了数据的加密传输,其核心在于结合了非对称加密和对称加密的优点来完成通信的安全性[^1]。在建立连接的过程中,客户端与服务器之间会经历一系列复杂的握手操作以协商加密算法、交换密钥以及验证身份。 #### 一、TLS/SSL握手阶段 当浏览器访问一个基于HTTPS的网页时,它首先向目标站点发起TCP三次握手请求建立基础链接之后进入真正的TLS/SSL握手环节: 1. **Client Hello**: 客户端发送一条消息给服务端表明支持哪些版本号(如TLSv1.2)、密码套件列表以及其他参数。 2. **Server Hello and Certificate Exchange**: 接收到客户端的消息后,服务器回应自己的首选配置,并附带一份由可信CA签发的数字证书用于证明身份合法性的同时也包含了公钥信息供后续使用[^2]. 3. **Key Exchange (Ephemeral Diffie-Hellman or RSA)**: 此步涉及到了如何生成共享秘密的过程。如果是DHE/ECDHE模式,则双方各自计算临时私钥并通过公开部分传递给对方;若是传统的RSA方式,则客户机会随机产生一段预主秘钥(pre-master secret),再利用之前获取的服务端公钥对其进行封装后再传回后者那里解锁得到原始内容[^3]. 4. **Finished Messages Verification**: 经过以上几步处理完毕后,两端分别独立推导出会话所需的最终实际使用的对称密钥材料(即master-secret), 并互相告知已完成准备状态以便正式开启受保护的数据交互活动. #### 二、应用层数据传输阶段 一旦完成了初始设置动作,在接下来的应用过程中所有的HTTP报文都将被事先商定好的方法予以编码转换成不可读形式然后再经网络通道送达目的地解析还原出来显示给接收方查看[^1]. ```python import ssl context = ssl.create_default_context() with socket.create_connection(("www.example.com", 443)) as sock: with context.wrap_socket(sock, server_hostname="www.example.com") as ssock: print(ssock.version()) ``` 此代码片段展示了Python中创建一个简单的SSL上下文环境并与远程主机建立安全连接的例子[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值