SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是用于在网络通信中提供安全性的加密协议。TLS是SSL的后继版本,目前广泛使用的主要是TLS协议。它们的主要功能包括加密通信、身份验证和数据完整性检查,确保数据在传输过程中不被窃听、篡改或伪造。
HTTPS就是基于SSL/TLS实现的加密传输。
主要功能:
1、加密:确保数据在传输过程中不被窃听。
2、身份验证:通过数字证书验证服务器的身份,防止中间人攻击。
3、完整性检查:通过消息认证码(MAC)确保数据未被篡改。
SSL(Secure Sockets Layer):
TLS(Transport Layer Security):
SSL/TLS握手是客户端和服务器之间建立安全连接的过程。握手的目标是生成一个共享的秘密密钥(会话密钥),用于后续的加密通信。
具体步骤:
(1)、客户端发起请求
客户端向服务器发送一个“Client Hello”消息,包含以下信息:
示例:
Client Hello:
Version: TLS 1.2
Cipher Suites: [TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, ...]
Client Random: <random bytes>
Extensions: SNI (Server Name Indication)
(2)、服务器响应
服务器回应一个“Server Hello”消息,包含以下信息:
示例:
Server Hello:
Version: TLS 1.2
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
Server Random: <random bytes>
Certificate: <server certificate with public key>
(3)、客户端验证证书
客户端验证服务器提供的数字证书,确保其真实性。验证步骤包括:
如果验证失败,握手终止;如果验证成功,继续下一步。
(4)、生成预主密钥
客户端生成一个预主密钥(Pre-Master Secret),并使用服务器的公钥对其进行加密,然后发送给服务器。
示例:
Client Key Exchange:
Encrypted Pre-Master Secret: <encrypted pre-master secret>
(5)、计算会话密钥
双方计算出的会话密钥相同,用于后续的加密通信。
(6)、完成握手
客户端和服务器交换“Finished”消息,确认握手成功。这些消息使用会话密钥进行加密,确保握手过程的完整性。
示例:
Client Finished:
Encrypted Message: <encrypted finished message>
Server Finished:
Encrypted Message: <encrypted finished message>
加密套件定义了在SSL/TLS握手中使用的具体加密算法。
每个加密套件由以下部分组成:
常见的加密套件示例:
数字证书是由可信的第三方机构(CA,Certificate Authority)签发的电子文档,用于验证服务器的身份。
(1)、证书包含以下信息
客户端在握手过程中会验证服务器的数字证书,确保其由可信的CA签发,并且未被篡改。
(2)、证书链
为了提高效率和安全性,CA通常会签发中间证书。客户端验证证书时,需要沿着证书链追溯到根证书。例如:
命令示例:
openssl req -new -x509 -days 365 -nodes -out ca.pem -keyout ca-key.pem
作用解释:
命令参数解释:
简单理解下:
需要实现SSL(即网络加密通信),就需要在服务端和客户端都配置相关的证书。如果想要两个证书之间彼此能够信任,就要求两个证书都必须使用同一个CA证书进行签发。这样两个证书就可以彼此信任,两台机器就可以正常建立SSL连接了。
第一步:生成服务器的私钥和证书签名请求(CSR)
命令示例:
openssl req -newkey rsa:2048 -days 365 -nodes -keyout server-key.pem -out server-req.pem
作用:
参数解释:
第二步:使用CA证书签发服务器证书
命令示例:
openssl x509 -req -in server-req.pem -days 365 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
作用:
解释:
第一步:生成客户端的私钥和证书签名请求(CSR)
示例:
openssl req -newkey rsa:2048 -days 365 -nodes -keyout client-key.pem -out client-req.pem
作用:
解释:
第二步:使用CA证书签发客户端证书
示例:
openssl x509 -req -in client-req.pem -days 365 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
作用:
从上面配置服务器的过程可以看出,签发服务器的过程都是一样的。
第一步都是先生成机器的私钥和CSR的请求文件(请求文件主要用于第二步配置CA证书)。
第二步,使用上一步的请求文件,生成正式的服务器证书。
两步执行后,最终给我们提供了适用于SSL连接的秘钥和客户端证书文件。
注意:
除了上诉手动创建和配置证书外,你也可以从商业证书颁发机构(如Let’s Encrypt、DigiCert)购买SSL证书,以获得更高的信任度。
TLS 1.3是TLS协议的最新版本,带来了多项改进,主要包括:
(1)、简化握手过程
TLS 1.3将握手过程简化为两个往返(2-RTT),而在某些情况下(如会话恢复)可以减少到一次往返(1-RTT)。这显著减少了握手延迟,特别是在高延迟网络中。
(2)、更强的加密算法
TLS 1.3强制要求使用现代加密算法,如AES-GCM、ChaCha20-Poly1305和SHA-256。它还禁止使用弱加密算法(如RC4、MD5)。
(3)、前向保密(Forward Secrecy)
TLS 1.3要求所有密钥交换算法必须支持前向保密,这意味着即使攻击者获得了服务器的长期私钥,也无法解密过去的通信记录。常用的前向保密算法包括ECDHE和DHE。
(4)、零往返时间(0-RTT)
TLS 1.3引入了0-RTT功能,允许客户端在第一次握手时缓存会话密钥,并在后续连接中直接使用该密钥发送数据,从而减少握手延迟。然而,0-RTT存在重放攻击的风险,因此仅适用于幂等操作(如GET请求)。
(1)、中间人攻击(Man-in-the-Middle Attack, MITM)
中间人攻击是指攻击者拦截并篡改客户端和服务器之间的通信。防御措施包括:
(2)、降级攻击(Downgrade Attack)
降级攻击是指攻击者迫使客户端和服务器协商使用较弱的加密套件。TLS 1.3通过强制要求使用强加密算法,有效防御了此类攻击。
(3)、心脏出血漏洞(Heartbleed Bug)
心脏出血漏洞是OpenSSL实现中的一个严重漏洞,允许攻击者读取服务器内存中的敏感数据。该漏洞已在后续版本中修复。
(4)、POODLE攻击
POODLE攻击针对SSL 3.0的CBC模式加密,允许攻击者解密部分加密数据。建议禁用SSL 3.0,使用更安全的TLS版本。
逆风翻盘,Dare To Be!!!