浅析 TLS(ECDHE)协议的握手流程(图解)

浅析 TLS(ECDHE)协议的握手流程(图解)

通过 wireshark 抓取 HTTPS 包,理解 TLS 1.2 安全通信协议的握手流程。

重点理解几个点:

  1. TLS 握手流程:通过 wireshark 抓取 HTTPS 包理解。
  2. 协商加密:双方通过 ECDHE 椭圆曲线的密钥交换算法,协商出共享的 会话密钥 进行内容对称加密通信,避免传输会话密钥被中间人窃取。
  3. CA 证书:证书用来验证服务端的合法性。证书类似于身份证,可以证明某人是某人,当然身份证可以伪造,一般人可能识别不出来,但是国家相关部门可以验证你的身份合法性。同理,服务端可以通过 CA 证书识别自身身份,客户端接收服务端发送的证书,并通过 证书链 验证该证书,以此确认服务端身份。

  • 1. 概念
    • 1.1. HTTPS
    • 1.2. SSL/TLS
    • 1.3. ECDHE 算法
      • 1.3.1. 概念
      • 1.3.2. 简单数学原理
  • 2. 工作流程
    • 2.1. 主流程
    • 2.2. TLS 握手过程
  • 3. CA 证书
    • 3.1. 概念
    • 3.2. 证书作用
    • 3.3. 证书来源
    • 3.4. 证书工作原理
      • 3.4.1. 证书链路
      • 3.4.2. 证书验证
    • 3.5. HTTPS 服务配置
  • 4. 参考

1. 概念

1.1. HTTPS

HTTPS 协议是一种基于 HTTP 协议的安全通信协议。

它通过使用 TLS/SSL 协议对通信进行加密,确保数据在传输过程中的安全性和完整性。

HTTPS 协议使用了公钥加密和对称加密的组合,可以防止第三方窃听、篡改或伪造数据。通过使用 HTTPS 协议,网站可以保护用户的隐私和敏感信息,提供更安全的网络通信环境。

文字来源:ChatGPT


1.2. SSL/TLS

SSL(Secure Sockets Layer)和 TLS(Transport Layer Security)都是为网络通信提供安全和数据完整性的加密协议。

SSL 是由网景公司在1990年代早期开发。TLS是其后续版本,由互联网工程任务组(IETF)开发。虽然两者在技术上有所不同,但它们的目标和功能基本相同,因此通常一起讨论,并且术语 “SSL/TLS” 常常被用来表示两者。

SSL/TLS 协议主要有两个目的:一是确保数据在传输过程中的隐私,二是确保数据在传输过程中的完整性。这是通过在数据传输开始时进行一次“握手”来实现的,以便服务器和客户端可以就如何加密数据进行协商,并可选地验证对方的身份。

在握手过程中,服务器和客户端会协商一个密钥,然后使用这个密钥对传输的数据进行加密和解密。这样,即使数据在传输过程中被拦截,也无法读取其内容,除非拦截者知道密钥。

此外,SSL/TLS 还可以使用数字证书来验证服务器(或在某些情况下,客户端)的身份。这是通过将服务器的公钥和一些身份信息打包到一个由受信任的第三方(称为证书颁发机构)签名的证书中来实现的。客户端可以验证证书的签名,以确保它是与服务器通信,而不是与冒充服务器的攻击者通信。

总的来说,SSL/TLS是一种重要的安全协议,用于保护网络通信不被窃听或篡改。

文字来源:ChatGPT

图片来源:《图解 TCP_IP》


1.3. ECDHE 算法

1.3.1. 概念

TLS 的 ECDHE 算法是一种基于椭圆曲线的密钥交换算法,全称为 Elliptic Curve Diffie-Hellman Ephemeral。

它的工作流程如下:

  1. 客户端和服务器各自选择一个 椭圆曲线私钥(随机数),并使用椭圆曲线算法生成对应的 椭圆曲线公钥
  2. 在握手阶段,客户端和服务器互相交换 椭圆曲线公钥
  3. 客户端和服务器各自使用 对方的椭圆曲线公钥 和 自己的椭圆曲线私钥,通过椭圆曲线的点运算生成一个 共享密钥。由于椭圆曲线的数学性质,这个共享密钥在双方都知道,但是不能被第三方计算出来。(共享密钥并非通过传输手段获得,避免中间人截取。)
  4. 客户端和服务器使用这个共享密钥进行 对称加密通信

ECDHE 算法的优点是每次握手都会生成一个新的密钥,即使有人能够破解一个会话的密钥,也无法用这个密钥破解其他会话的通信,这就是所谓的前向保密性。

部分文字来源:ChatGPT


1.3.2. 简单数学原理
1.3.2.1. 点运算

椭圆曲线上有两个点:Q,P,以及整数 k;点 P 经过 k 次点运算得到点 Q。

【注意】 给定 k 和 P 很容易获得 Q;但是给定 Q 和 P,却很难得到 k(因为计算量非常大),这就是难以破解的关键。

 
  
<span style="color:#212529"><span style="background-color:#ffffff"><span style="background-color:#ffffdd"><span style="color:#ece7e7"><code>1
</code></span></span></span></span>
Q = kP

详细算法请参考:宸极实验室—『CTF』深入浅出 ECC


1.3.2.2. 协商密钥原理

参考下图,client 和 server 通过椭圆曲线算法协商出来一个共享密钥。

  1. 椭圆曲线 G 点 等一些算法信息是公开的。
  2. server 生成一个随机数 b 作为私钥,通过原理 Q = kP 进行椭圆曲线点运算 B = bG,G 点经过 b 次点运算,获得 B 点,B 点作为 server 的公钥
  3. server 将椭圆曲线公钥 B 发送给 client。
  4. client 生成一个随机数 a 作为私钥,通过原理 Q = kP 进行椭圆曲线点运算 A = aG,G 点经过 a 次点运算,获得 A 点,A 点作为 client 的公钥
  5. client 将 A 点发送给 server。
  6. client 将 自己的私钥 a 和 server 发送的公钥 B 点,进行点运算获得新密钥:新密钥(点)= aB = a(bG)。
  7. server 将自己的私钥 b 和 client 发送的公钥 A 点,进行点运算获得新密钥:新密钥(点)= bA = b(aG)。
  8. 此时双方都生成了会话密钥,根据乘法交换律 a(bG) = b(aG) 推出 aB = bA = 新密钥(点),也就是说双方的新密钥是相同的,这就是协商出来的 共享密钥

在双方协商加密过程中,因为双方发送的是自己的公钥,还有 G 点等公开信息。

回顾上文 Q = kP,知道 Q 点和 P 点,计算出 k 是十分困难的。

换句话说,知道了公钥和椭圆曲线基点等公开信息,要破解出私钥 k 是非常困难的。


2. 工作流程

2.1. 主流程

理解了一些基本概念之后,下面我们将在浏览器访问某些 HTTPS 域名,抓包分析 TLS 的工作流程。

  1. TCP 三次握手:TLS 是应用层协议,使用传输层的 TCP 进行通信,通信双方在进行 TLS 握手前,需要先进行 TCP 三次握手建立链接。
  2. TLS 握手:通信双方通过 ECDHE 算法交换密钥,协商出一个共享的会话密钥,对传输的数据进行加密和解密。
  3. 对称加密通信:因为非对称协商加密性能损耗大,所以通信双方需要通过 TLS 握手协商出对称密钥,使用该密钥进行加密通信,既安全又高效。

2.2. TLS 握手过程

TLS 握手原理是双方互换信息,协商出共享的 会话密钥

 
  
<span style="color:#212529"><span style="background-color:#ffffff"><span style="background-color:#ffffdd"><span style="color:#ece7e7"><code>1
</code></span></span></span></span>
客户端随机数 + 服务端随机数 + 预主密钥 = 主密钥 ==> 会话密钥
  • TLS 握手协议(Wireshark 抓包)。

  • 握手阶段。

序号方向握手协议描述抓包
1C —> S第一次Client Hello客户端发送它支持的 TLS 版本,加密套件列表,客户端随机数 给服务端。

2S —> C第二次Server Hello服务端发送它选择的 TLS 版本,加密套件,服务端随机数 给客户端。

 

3S —> C第二次Certificate服务端发送 CA 证书(公钥 + 证书持有者等信息)给客户端。

4S —> C第二次Server Key Exchange1. 服务端生成 椭圆曲线私钥 ==> 生成 椭圆曲线公钥 ==> 服务端的 RSA 私钥实现 椭圆曲线公钥签名
2. 服务端发送:椭圆曲线算法信息,(服务端的)椭圆曲线公钥(服务端的)椭圆曲线公钥签名 给客户端。

5S —> C第二次Server Hello Done服务端发送确认给客户端,已完成 Hello 阶段流程。

6C —> S第三次Client Key Exchange客户端生成 椭圆曲线公钥,并将其发送给服务端。
1. 客户端接收到证书后,通过本地系统的 证书链 验证该证书是否合法。
2. 客户端通过证书公钥解签 (服务端的)椭圆曲线公钥,确认该数据的完整性和安全性。
3. 客户端生成 椭圆曲线私钥 ==> 生成 椭圆曲线公钥
4. 客户端使用服务端的 RSA 公钥加密客户端的 椭圆曲线公钥,并将其发送给服务端。

7C —> S第三次Change Cipher Spec客户端通知服务端,确认握手过程中的加密算法和密钥已经生效,表示之后的消息都将使用新的密钥。
1.(客户端的)椭圆曲线私钥 和 (服务端的)椭圆曲线公钥 通过点运算计算出新的点 (x,y),取 x 作为 预主密钥
2. 客户端随机数 + 服务端随机数 + 预主密钥 = 主密钥 ==> 会话密钥
3. 客户端的会话密钥已协商出来,客户端发送确认给服务端。

8C —> S第三次Encrypted Handshake Message客户端将之前的握手数据(发送和接收)做一个摘要,再用会话密钥(对称密钥)加密摘要数据,将密文发送给服务端。作用:
1. 服务端解密密文以此验证双方协商出来的密钥是否一致。
2. 服务端还可以验证确认握手数据的安全性和完整性,保证不被中间人篡改。

9S —> C第四次New Session Ticket服务器发送该消息给客户端,包含一个新的会话票据,用于快速恢复会话,避免重复握手。

10S —> C第四次Change Cipher Spec服务端接收到客户端生成的 椭圆曲线公钥,也协商出共享的 会话秘钥,并通知客户端表示之后的消息都将使用新的密钥。
1.(服务端的)椭圆曲线私钥 和 (客户端的)椭圆曲线公钥 通过点运算计算出新的点 (x,y),取 x 作为 预主密钥
2. 客户端随机数 + 服务端随机数 + 预主密钥 = 主密钥 ==> 会话密钥
3. 服务端的会话密钥已协商出来,服务端发送确认给客户端。

11S —> C第四次Encrypted Handshake Message服务端将之前的握手数据(发送和接收)做一个摘要,再用会话密钥(对称密钥)加密摘要数据,将密文发送给客户端,确认握手过程的完成。


3. CA 证书

3.1. 概念

CA证书 是由权威的证书颁发机构(Certificate Authority)签发的数字证书。


3.2. 证书作用

  1. 验证网站的身份:CA证书 包含了网站的公钥和其他相关信息,由权威的证书颁发机构签发。当用户访问一个网站时,浏览器会检查网站的证书是否由可信的 CA机构 签发,以验证网站的身份是否可信。

  2. 加密通信数据:CA证书 使用了公钥加密和对称加密的组合,可以加密传输的数据。这样可以防止第三方窃听、篡改或伪造数据,确保通信的安全性和完整性。

  3. 建立信任关系:由于 CA证书 是由可信的证书颁发机构签发的,浏览器会预先内置一些受信任的CA机构的根证书。当浏览器检查到网站的证书由受信任的 CA机构 签发时,会建立起对该网站的信任关系,显示安全的锁标志。

文字来源:ChatGPT


3.3. 证书来源

CA 证书由权威的证书颁发机构 CA(Certificate Authority)签发,个人或公司要申请证书,可以通过相关平台付费购买或者免费申请获得。


3.4. 证书工作原理

3.4.1. 证书链路

  1. 首先证书颁发机构(CA)会颁发 根证书。
  2. 用户的计算机系统或浏览器会从 CA 获取根证书,并预装根证书。
  3. 根证书机构创建 中间证书 授权给 中间证书颁发机构 颁发 SSL证书。
  4. 个人或公司向 中间证书颁发机构 申请一个 服务器证书,中间颁发证书机构 接受申请,创建证书文件:包含 RSA公钥 的服务器证书文件和 RSA私钥 文件;有些 PERM 证书文件会将 中间证书 和 服务器证书 打包在一起。
  5. 中间颁发证书机构 创建对应的证书文件后,个人或公司可以从证书签发平台下载下来。
  6. 服务器启动服程序,并加载:服务器证书文件 和 RSA私钥。
  7. 用户通过 HTTPS 访问服务程序,进入 TLS 握手环节。
  8. 服务程序会给客户端发送 服务器证书。
  9. 客户端获得服务器证书后,通过 证书链 对该服务器证书进行校验。因为之前用户的计算机系统或浏览器已经预装了根证书,那么证书链验证:根证书验证中间证书合法,中间证书验证服务器证书合法。
  10. 客户端获得的服务器证书里包含了 RSA 的公钥,这个是公开的。RSA 私钥仍然在服务端,那么 RSA 私钥加密的数据(签名数据),公钥可以解密;反过来,RSA 公钥加密的密文,只有私钥可以解密。
  11. TLS 的握手的其它环节请参考上文。

3.4.2. 证书验证

  1. 首先,客户端会从服务器获取证书链。证书链通常包括服务器证书、一个或多个中间证书。
  2. 客户端首先会检查服务器证书的有效性,包括证书的有效期、证书的颁发机构等。
  3. 然后,客户端会使用 中间证书的公钥 来验证服务器证书的签名(如上图:证书签名验证)。
  4. 接着,客户端会检查中间证书的有效性,并使用根证书的公钥来验证中间证书的签名。
  5. 最后,客户端会检查根证书的有效性。由于根证书是自我签名的,所以客户端会使用根证书的公钥来验证根证书的签名。
  6. 如果所有的证书都通过了验证,那么证书链就被认为是有效的。如果任何一个证书没有通过验证,那么证书链就被认为是无效的。

部分文字来源:ChatGPT


3.5. HTTPS 服务配置

  • 例如 nginx 服务端 https 通信配置。
 
  
<span style="color:#212529"><span style="background-color:#ffffff"><span style="background-color:#ffffdd"><span style="color:#ece7e7"><code>1
2
3
4
5
6
7
8
9
10
11
</code></span></span></span></span>
# /etc/nginx/vhost/blog.conf
server {
    listen       443 ssl; # 监听 HTTPS 443 端口。
    server_name  xxx.com www.xxx.com;
    ssl_certificate /usr/local/nginx/ssl/blog/3513736_xxx.com.pem;
    ssl_certificate_key /usr/local/nginx/ssl/blog/3513736_xxx.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
    ssl_prefer_server_ciphers on;
}
配置项描述
ssl_certificate指定服务器证书的路径。服务器证书是由 CA 机构签发的,用于 验证服务器的身份。它包含了服务器的公钥和其他相关信息。
ssl_certificate_key指定服务器证书的私钥的路径。私钥用于对传输的数据进行加密和解密。
ssl_session_timeout指定 SSL 会话的超时时间。SSL 会话是在客户端和服务器之间建立的安全连接,超过超时时间后会自动关闭。
ssl_protocols指定支持的 SSL/TLS 协议版本。常见的协议版本包括 SSLv2、SSLv3、TLSv1.0、TLSv1.1 和 TLSv1.2。
ssl_ciphers指定支持的加密算法和密钥长度。常见的加密算法包括 AES、DES 和 RC4,密钥长度包括 128 位和 256 位。
ssl_prefer_server_ciphers指定是否优先使用服务器端的加密算法和密钥长度。如果设置为 “on”,则服务器端的加密算法和密钥长度优先级高于客户端。

文字来源:ChatGPT


  • 使用 openssl 客户端测试某宝域名。有兴趣的朋友可以结合上文去理解下面客户端与服务端交互的详细信息。
 
  
<span style="color:#212529"><span style="background-color:#ffffff"><span style="background-color:#ffffdd"><span style="color:#ece7e7"><code>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
</code></span></span></span></span>
# 源码编译 openssl 配置:
# ./config enable-ssl-trace --prefix=/Users/xxx/openssl -openssldir=/Users/xxx/openssl/build
# 客户端执行命令:
# openssl s_client -connect taobao.com:443 -state -showcerts
# 客户端打印内容:
CONNECTED(00000006)
# 握手流程
SSL_connect:before SSL initialization
SSL_connect:SSLv3/TLS write client hello
SSL_connect:SSLv3/TLS write client hello
SSL_connect:SSLv3/TLS read server hello
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3
verify return:1
depth=0 C = CN, ST = ZheJiang, L = HangZhou, O = "Alibaba (China) Technology Co., Ltd.", CN = taobao.com
verify return:1
SSL_connect:SSLv3/TLS read server certificate
SSL_connect:SSLv3/TLS read server key exchange
SSL_connect:SSLv3/TLS read server done
SSL_connect:SSLv3/TLS write client key exchange
SSL_connect:SSLv3/TLS write change cipher spec
SSL_connect:SSLv3/TLS write finished # Encrypted Handshake Message
SSL_connect:SSLv3/TLS write finished # Encrypted Handshake Message
SSL_connect:SSLv3/TLS read server session ticket
SSL_connect:SSLv3/TLS read change cipher spec
SSL_connect:SSLv3/TLS read finished # Encrypted Handshake Message
---
# 证书链
Certificate chain
 0 s:C = CN, ST = ZheJiang, L = HangZhou, O = "Alibaba (China) Technology Co., Ltd.", CN = taobao.com
   i:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
   v:NotBefore: Mar 20 04:06:03 2023 GMT; NotAfter: Apr 20 04:06:02 2024 GMT
-----BEGIN CERTIFICATE-----
MIIG3j... # 删减
-----END CERTIFICATE-----
 1 s:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3
   i:C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
   v:NotBefore: Sep  4 00:00:00 2015 GMT; NotAfter: Sep  4 00:00:00 2025 GMT
-----BEGIN CERTIFICATE-----
MIIEiz... # 删减
-----END CERTIFICATE-----
---
Server certificate
subject=C = CN, ST = ZheJiang, L = HangZhou, O = "Alibaba (China) Technology Co., Ltd.", CN = taobao.com
issuer=C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 3577 bytes and written 405 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: D416F803F9E5E1BA04E98CA7A23014A8B5A6459C47FA2C1E30B144B8BA756F51
    Session-ID-ctx: 
    Master-Key: 095368226B46D96CAABCF5F311C398279B89E1D10A896BC34F49FDC4CC64C30BAE2310412284BE2D913D53ED1571FD9A
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - 60 82 b6 11 a6 b3 fb 36-5e cc a5 be b7 4a 09 db   `......6^....J..
    0010 - 11 2d d9 b7 46 84 21 59-95 16 a3 7a 07 3f 20 ed   .-..F.!Y...z.? .
    ***

    Start Time: 1697593108
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: yes
---

4. 参考

  • 《半小时漫画计算机》
  • HTTPS RSA 握手解析
  • HTTPS ECDHE 握手解析
  • TLS/1.2和TLS/1.3的核心区别 | HTTPS有哪些不安全因素
  • HTTPS是什么?加密原理和证书。SSL/TLS握手过程
  • 测试成长之根证书,怎么保障了HTTPS的安全
  • matter协议椭圆曲线密码学(ECC)原理详解
  • 【深度知识】RSA加密、解密、签名、验签的原理及方法
  • HTTPS(三):使用 ECDHE 加密算法的 TLS 握手流程
  • 宸极实验室—『CTF』深入浅出 ECC
  • 公钥加密技术ECC椭圆曲线
  • 看得到的TCP/IP: Wireshark抓包 tcp三次握手四次挥手
  • TLS1.2 PreMasterSecret And MasterSecret

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/211753.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

经典文献阅读之--Traversability Analysis for Autonomous Driving...(Lidar复杂环境中的可通行分析)

0. 简介 对于自动驾驶来说&#xff0c;复杂环境的可通行是最需要关注的任务。《Traversability Analysis for Autonomous Driving in Complex Environment: A LiDAR-based Terrain Modeling Approach》一文提出了用激光雷达完成建图的工作&#xff0c;其可以输出稳定、完整和精…

RHEL8更新安全补丁,删除旧内核

# 查看高危漏洞公告 dnf updateinfo list# 对高危漏洞公告的某一项进行单独升级 dnf update --advisoryFEDORA-EPEL-2022-3c43a57d41# 检查安全更新 dnf --security check-update# 只安装最安全的安全更新&#xff0c;忽略所有可能包含不安全新功能的包 dnf --security update-…

大文件分片上传、分片进度、断点续传的原理(一)

大文件分片上传 效果展示 前端 思路 前端的思路&#xff1a;将大文件切分成多个小文件&#xff0c;然后并发给后端。 页面构建 先在页面上写几个组件用来获取文件。 <body><input type"file" id"file" /><button id"uploadButton…

古琴零基础自学考级入门,从初级到高级古琴教学全集

一、教程描述 本套教程是古琴的组合教程&#xff0c;内容是超级齐全的&#xff0c;包括了很多套完整的古琴教程&#xff0c;来自国内知名的古琴教师、专家&#xff0c;教授等&#xff0c;都是从零基础开始讲起的&#xff0c;而且理论与实践相结合&#xff0c;对于刚学古琴入门…

【WPF.NET开发】WPF.NET桌面应用开发概述

本文内容 为何从 .NET Framework 升级使用 WPF 进行编程标记和代码隐藏输入和命令控件布局数据绑定图形和动画文本和版式自定义 WPF 应用 Windows Presentation Foundation (WPF) 是一个与分辨率无关的 UI 框架&#xff0c;使用基于矢量的呈现引擎&#xff0c;构建用于利用现…

SHAP(六):使用 XGBoost 和 HyperOpt 进行信用卡欺诈检测

SHAP&#xff08;六&#xff09;&#xff1a;使用 XGBoost 和 HyperOpt 进行信用卡欺诈检测 本笔记本介绍了 XGBoost Classifier 在金融行业中的实现&#xff0c;特别是在信用卡欺诈检测方面。 构建 XGBoost 分类器后&#xff0c;它将使用 HyperOpt 库&#xff08;sklearn 的 …

26. 深度学习进阶 - 深度学习的优化方法

Hi, 你好。我是茶桁。 上一节课中我们预告了&#xff0c;本节课是一个难点&#xff0c;同时也是一个重点&#xff0c;大家要理解清楚。 我们在做机器学习的时候&#xff0c;会用不同的优化方法。 SGD 上图中左边就是Batch Gradient Descent&#xff0c;中间是Mini-Batch Gra…

【Linux】Ubuntu添加root用户

在Ubuntu中&#xff0c;默认情况下是禁用了root用户的登录。如果仍然想要启用root用户&#xff0c;并设置root用户的密码&#xff0c;应按照以下步骤进行操作&#xff1a; 一、输入sudo passwd root设置root用户密码 二、切换root用户 sudo -i su root 这两条命令均可却换至…

python+pytest接口自动化(6)-请求参数格式的确定

我们在做接口测试之前&#xff0c;先需要根据接口文档或抓包接口数据&#xff0c;搞清楚被测接口的详细内容&#xff0c;其中就包含请求参数的编码格式&#xff0c;从而使用对应的参数格式发送请求。例如某个接口规定的请求主体的编码方式为 application/json&#xff0c;那么在…

在linux服上部署vue+springboot+nginx项目

一、环境准备 1、安装winscp便于可视化操作linux&#xff1a;winscp安装及关联putty使用_putty.exe没有找到_cherishSpring的博客-CSDN博客 2、安装jdk&#xff1a;linux系统安装jdk-CSDN博客 3、安装mysql&#xff1a;Linux7安装mysql数据库以及navicat远程连接mysql-CSDN博…

K8S客户端二 使用Rancher部署服务

Rancher容器云管理平台 本博客中使用了四台服务器&#xff0c;如下 rancher服务器k8s-masterk8s-worker01k8s-worker02 一、主机硬件说明 序号硬件操作及内核1CPU 4 Memory 4G Disk 100GCentOS72CPU 4 Memory 4G Disk 100GCentOS73CPU 4 Memory 4G Disk 100GCentOS74CPU 4 …

剑指 Offer(第2版)面试题 15:二进制中1的个数

剑指 Offer&#xff08;第2版&#xff09;面试题 15&#xff1a;二进制中1的个数 剑指 Offer&#xff08;第2版&#xff09;面试题 15&#xff1a;二进制中1的个数解法1&#xff1a;位运算解法2&#xff1a;n & (n - 1)相关题目 剑指 Offer&#xff08;第2版&#xff09;面…

Java数据结构之《希尔排序》题目

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题只要我写完…

最小生成树算法

文章目录 最小生成树概述 P r i m Prim Prim 算法 - 稠密图 - O ( n 2 ) O(n^2) O(n2)思路概述时间复杂度分析AcWing 858. Prim算法求最小生成树CODE K r u s k a l Kruskal Kruskal 算法 - 稀疏图 - O ( m l o g m ) O(mlogm) O(mlogm)思路解析时间复杂度分析AcWing 859. Kr…

Raft 算法

Raft 算法 1 背景 当今的数据中心和应用程序在高度动态的环境中运行&#xff0c;为了应对高度动态的环境&#xff0c;它们通过额外的服务器进行横向扩展&#xff0c;并且根据需求进行扩展和收缩。同时&#xff0c;服务器和网络故障也很常见。 因此&#xff0c;系统必须在正常…

Flask使用线程异步执行耗时任务

1 问题说明 1.1 任务简述 在开发Flask应用中一定会遇到执行耗时任务&#xff0c;但是Flask是轻量级的同步框架&#xff0c;即在单个请求时服务会阻被塞&#xff0c;直到任务完成&#xff08;注意&#xff1a;当前请求被阻塞不会影响到其他请求&#xff09;。 解决异步问题有…

已解决AttributeError: module ‘gradio‘ has no attribute ‘outputs‘

问题描述 Traceback (most recent call last): File "/media/visionx/monica/project/ResShift/app.py", line 118, in <module> gr.outputs.File(label"Download the output")AttributeError: module gradio has no attribute outputs 解决办…

vscode 调试jlink

文章目录 软件使用说明1、启动GDB Server2、下载gdb3、vscode配置4、调试 软件 vscodejlink - (JLinkGDBServer.exe)gcc-arm-none-eabi-10-2020-q4-major (arm-none-eabi-gdb.exe) 使用说明 vscode通过TCP端口调用JLinkGDBServer通过jlink连接和操作设备&#xff0c;vscode不…

创建腾讯云存储桶---上传图片--使用cos-sdk完成上传

创建腾讯云存储桶—上传图片 注册腾讯云账号https://cloud.tencent.com/login 登录成功&#xff0c;选择右边的控制台 点击云产品&#xff0c;选择对象存储 创建存储桶 填写名称&#xff0c;选择公有读&#xff0c;私有写一直下一步&#xff0c;到创建 选择安全管理&#…

无人机助力电力设备螺母缺销智能检测识别,python基于YOLOv7开发构建电力设备螺母缺销小目标检测识别系统

传统作业场景下电力设备的运维和维护都是人工来完成的&#xff0c;随着现代技术科技手段的不断发展&#xff0c;基于无人机航拍飞行的自动智能化电力设备问题检测成为了一种可行的手段&#xff0c;本文的核心内容就是基于YOLOv7来开发构建电力设备螺母缺销检测识别系统&#xf…