TLS/SSL协议

本文深入解析SSL和TLS协议,包括身份验证过程、数字证书的作用,以及数字签名确保证书完整性的方法。重点讲解了数字证书的类型(CA与自签名)、验证流程及Wireshark示例,适合了解网络安全协议的读者。

名词说明

  • SSL:Security Socket Layer
  • TLS:Transport Layer Security,TLS是在SSL基础上设计的协议,相当于SSL协议的后续版本(可以理解为SSL改名成了TLS)
  • TLS证书:TLS协议中使用的数字证书

基本思想

  • 使用数字证书验证身份(可以双向认证,一般只需认证服务器)
  • 数字证书添加数字签名防止证书被修改
  • 开始阶段使用非对称加密协商对称加密的秘钥
  • 后续会话采用对称加密传递数据
数字证书
  • 数字证书可分为CA证书和自签名证书。CA证书是由权威机构CA颁发的数字证书,是被浏览器等外界信任的;自签名证书是由自己颁发的数字证书,外界是不信任的,可通过openssl生成。
  • 数字证书一般使用X.509标准,证书文件编码格式分为der(二进制)和pem(ASCII)
  • 数字证书含有证书签发机构、证书所有者的信息、域名相关信息、公钥、使用的加密算法、数字签名等信息
  • 客户端向服务器发送请求,服务器将自己的证书发送给客户端,客户端验证证书的内容和数字签名
数字签名如何防止证书被修改?
  • 生成数字签名:首先对证书的内容通过hash等算法生成数据摘要,对数据摘要使用私钥(由证书颁发机构提供,自签名证书则是自己的私钥)进行非对称加密则得到数字签名,添加在证书上
  • 验证数字签名:客户端收到证书,对证书的内容使用相同的算法生成数据摘要A,再使用证书上的公钥对数字签名进行解密得到数据摘要B,比较数据摘要A和B,若相同则表示证书没有被修改过

协议流程(Wireshark抓包演示)

TCP三次握手
Client Hello
Server Hello
  • 证书
### TLS/SSL协议的基本概念和工作原理 TLS(Transport Layer Security)与SSL(Secure Sockets Layer)是用于保障网络通信安全的加密协议,其核心目标是在客户端与服务器之间建立一个加密通道,以防止数据被窃听或篡改。SSL由网景公司在1990年代中期设计,并在互联网上广泛使用。随后,IETF将其标准化并更名为TLS[^1]。 TLS/SSL的工作机制主要包括两个阶段:握手阶段和数据传输阶段。 #### 握手阶段 握手阶段的主要任务是完成身份验证、密钥协商以及算法选择。在这个过程中,客户端和服务器会交换各自的加密能力信息,并通过非对称加密技术(如RSA或ECDH)来安全地协商出一个共享的会话密钥。例如,在使用ECDH进行密钥交换时,双方各自生成一对公私钥,并通过交换公钥计算出相同的共享密钥,从而避免中间人攻击的风险[^2]。 此外,为了确保公钥的真实性,通常还会引入数字证书机制。服务器向客户端发送其数字证书,该证书包含公钥及其颁发机构的信息,客户端可以验证证书的有效性,从而确认服务器的身份[^4]。 #### 数据传输阶段 一旦握手过程完成,客户端与服务器将使用协商好的对称加密算法(如AES)和共享密钥对数据进行加密和解密。这种方式结合了非对称加密的安全性和对称加密的高效性,实现了既安全又高效的通信方式。 在整个通信过程中,除了加密之外,还使用消息认证码(MAC)或HMAC来确保数据的完整性,防止数据在传输过程中被篡改[^2]。 以下是一个简单的示例代码,展示如何使用Python中的`ssl`模块创建一个基于TLS的加密连接: ```python import ssl import socket # 创建TCP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 包裹为SSL/TLS连接 context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH) secure_sock = context.wrap_socket(sock, server_hostname='example.com') # 连接到服务器 secure_sock.connect(('example.com', 443)) # 发送HTTP请求 secure_sock.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n") # 接收响应 response = secure_sock.recv(4096) print(response.decode()) # 关闭连接 secure_sock.close() ``` 此示例展示了如何使用标准库中的工具来发起一个HTTPS请求,其中包含了TLS握手和加密通信的过程。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值