E.TLS协议

1 网络分层协议栈

网络可以按4层分,由下往上分别为:

  • L2:数据链路层,常见协议为ethernet
  • L3:网络层,常见协议为IPv4/IPv6
  • L4:传输层,常见协议为TCP/UDP/SCTP
  • L5:应用层,常见协议为DNS/HTTP/TLS/SSL

4层网络视图如下:

L5
L4
L3
L2

2 TLS

2.1 TLS协议

2.1.1 概述

TLS,即Transport Layer Security,是当今使用最为广泛的安全加密协议

TLS,为IETF的标准协议,可为2个通信的计算机应用提供认证、加密、数据完整性的服务。

TLS,保证应用(如浏览器)与网络之间进行安全的数据交换,因为交换的数据全部被TLS加密难以破解/监听

  • 加密的网络浏览,如https
  • 加密的文件传输
  • VPN连接
  • 加密的VoIP
  • 加密的mail
  • 加密的RAN-5GC通信

2.1.2 TLS协议的组成

TLS协议可分为2大部分:

  1. TLS Record Protocol:提供加密、可靠的安全信道
  2. TLS Handshake Protocol:提供通信双方认证、交换加密算法、交换加密密钥的服务

2.1.3 TLS协议的版本情况

TLS协议的版本如下:

  • TLS 1.0:替代SSL3.0,等价于SSL3.1
  • TLS 1.1
  • TLS 1.2
  • TLS 1.3:最新版本

2.2 TLS协议的识别

TLS协议一般承载于传输层即L4,比如TCP

TLS协议,通常用传输层端口识别,比如tcp.port为443

4层网络视图如下:

L5:TLS
L4:TCP.port=443
L3
L2

2.3 TLS协议在TCP/IP协议栈的位置

参考https://zhuanlan.zhihu.com/p/575773514,TLS在TCP层上面提供加密的可靠信道,在HTTP层之下封装HTTP数据保证不被监听。

下图绿色框图为TLS协议:包含TLS Record Protocol/TLS Handshake Protocol等

TLS再TCP/IP协议栈的位置

2.4 TLS协议文档

TLS协议文档,参考:

2.5 TLS报文格式

根据rfc2246TLS报文分为TLS Record报文TLS Handshake报文

  • TLS Record 报文是最底层,封装来自上层应用的数据
    • TLS Handshake 报文
    • HTTP 报文,属于 TLS.application_data
  • TLS Handshake 报文承载于 TLS Record 报文,具体分为3类报文
    • Change cipher spec 报文
    • Alert 报文
    • Handshake 报文

TLS报文之间的封装关系如下:

TLS报文封装关系

2.5.1 TLS Record报文的生成

TLS Record报文的生成如下:

  1. 从上层应用获取明文数据:TLSPlaintext
  2. 对明文数据进行压缩:TLSCompressed
  3. 根据TLS握手期间协商的加密套件完成压缩后的明文数据的加密:TLSCiphertext

2.5.2 TLS Record报文格式

TLS Record报文格式如下:

typeversionlengthencrypted data
1 byte2 bytes2 byteslength bytes

TLS Record报文,参考数据结构如下:

struct {
   ContentType type;
   ProtocolVersion version;
   uint16 length;
   select (CipherSpec.cipher_type) {
       case stream: GenericStreamCipher;
       case block: GenericBlockCipher;
   } fragment;
} TLSCiphertext;

2.5.3 TLS Handshake报文格式

TLS Handshake报文,具体分为3种报文:

  • change cipher spec 报文
  • alert 报文
  • handshake 报文
2.5.3.1 change cipher spec报文格式

change cipher spec报文格式如下:

type
1 byte

change cipher spec报文,参考数据结构如下:

struct {
   enum { change_cipher_spec(1), (255) } type;
} ChangeCipherSpec;
2.5.3.2 alert报文格式

alert报文格式如下:

leveldescription
1 byte1 byte

alert 报文,参考数据结构如下:

enum { warning(1), fatal(2), (255) } AlertLevel;

enum {
	close_notify(0),
	unexpected_message(10),
	bad_record_mac(20),
	decryption_failed(21),
	record_overflow(22),decompression_failure(30),
	handshake_failure(40),
	bad_certificate(42),
	unsupported_certificate(43),
	certificate_revoked(44),
	certificate_expired(45),
	certificate_unknown(46),
	illegal_parameter(47),
	unknown_ca(48),
	access_denied(49),
	decode_error(50),
	decrypt_error(51),
	export_restriction(60),
	protocol_version(70),
	insufficient_security(71),
	internal_error(80),
	user_canceled(90),
	no_renegotiation(100),
	(255)
} AlertDescription;

struct {
   AlertLevel level;
   AlertDescription description;
} Alert;
2.5.3.3 handshake报文格式

handshake报文格式如下:

msg_typelengthmsg_data
1 byte3 byteslength bytes

handshake报文,参考数据结构如下:

struct {
	HandshakeType msg_type;    /* handshake type */
	uint24 length;             /* bytes in message */
	select (HandshakeType) {
		case hello_request:       HelloRequest;
		case client_hello:        ClientHello;
		case server_hello:        ServerHello;
		case certificate:         Certificate;
		case server_key_exchange: ServerKeyExchange;
		case certificate_request: CertificateRequest;
		case server_hello_done:   ServerHelloDone;
		case certificate_verify:  CertificateVerify;
		case client_key_exchange: ClientKeyExchange;
		case finished:            Finished;
	} body;
} Handshake;

2.6 TLS交互流程

TLS交互流程,参考TCP交互流程,可以分为4部分:

  • TCP握手:建立TCP信道 非加密
  • TLS握手协商:协商加密套件 加密密钥 证书认证
  • TLS加密通信:使用协商的通信密钥,加密通信 加密
  • TCP挥手:通信完成,释放TCP信道

上述4部分里,TLS握手协商是最重要的。

TLS握手协商流程,参考rfc2246,分为全协商、快速协商2种:

  1. 全协商TLS握手流程
    全协商TLS握手流程2. 快速TLS握手流程
    快速TLS握手流程

2.7 TLS与SSL

TLS的前身为SSL,因此TLS是基于SSL演进的新版本并最终取代SSL。

  • SSL最早由网景netscape开发,仅有SSL2.0/SSL3.0 2个版本
  • SSL除了在旧系统上仍有使用外,新系统出于安全考虑已经不再使用
  • TLS由IETF对SSL进行规范后产生,如今取代SSL,主流版本为TLS1.2
    • TLS1.0存在一种降级机制,使TLS1.0降级到SSL3.0以便兼容旧系统

TLS由SSL演进的路线:

SSL2.0->SSL3.0->TLS1.0->TLS1.1->TLS1.2->TLS1.3

在没有特别说明的情况下,TLS/SSL可以互换,指代同一种含义

若有特别说明,那么SSL专指旧版本的协议即SSL2.0/SSL3.0,TLS专指新版本协议即TLS1.0-TLS1.3

2.8 TLS版本的差异

TLS 版本也在不断升级,升级的效果基本为"更快更安全":

  • 修复发现的漏洞,如TLS1.2发现的heartbeat漏洞在TLS1.3修复
  • 加快握手的过程,如TLS1.3比TLS1.2握手少了1次TTL,合并其中操作
  • 加快加密解密,如使用新的加密算法
  • 废弃不安全的加密算法,如MD5/RC4算法

2.9 TLS与DTLS

TLS 一般承载于TCP,而DTLS 一般承载于UDP

DTLS 基于TLS协议标准进行开发与实现。

参考DTLS文档,http://tools.ietf.org/html/4347

2.10 OpenSsl

OpenSsl 是一个开源库,实现SSL/TLS/DTLS协议。

OpenSsl 为C库,提供很多其他语言的api,方便其他语言调用。

OpenSsl 官网,https://www.openssl.org/

2.11 TLS示例报文

可以自行配置wireshark(设置个人的密钥),之后https访问百度并同时wireshark抓包就能得到TLS报文。

这里可以参考已经内嵌密钥的TLS报文,直接完成TLS解密方便分析。 内嵌解密密钥

  • https://gitlab.com/wireshark/wireshark/-/blob/master/test/captures/tls12-dsb.pcapng

2.12 参考资料

这里可以参考已经内嵌密钥的TLS报文,直接完成TLS解密方便分析。 内嵌解密密钥

  • https://gitlab.com/wireshark/wireshark/-/blob/master/test/captures/tls12-dsb.pcapng

2.12 参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值