TLS 基本概念 原理1

  了解一下TLS概念

2.9.1. 简介

SSL全称是Secure Sockets Layer,安全套接字层,它是由网景公司(Netscape)在1994年时设计,主要用于Web的安全传输协议,目的是为网络通信提供机密性、认证性及数据完整性保障。如今,SSL已经成为互联网保密通信的工业标准。

SSL最初的几个版本(SSL 1.0、SSL2.0、SSL 3.0)由网景公司设计和维护,从3.1版本开始,SSL协议由因特网工程任务小组(IETF)正式接管,并更名为TLS(Transport Layer Security),发展至今已有TLS 1.0、TLS1.1、TLS1.2、TLS1.3这几个版本。

如TLS名字所说,SSL/TLS协议仅保障传输层安全。同时,由于协议自身特性(数字证书机制),SSL/TLS不能被用于保护多跳(multi-hop)端到端通信,而只能保护点到点通信。

SSL/TLS协议能够提供的安全目标主要包括如下几个:

  • 认证性
    • 借助数字证书认证服务端端和客户端身份,防止身份伪造
  • 机密性
    • 借助加密防止第三方窃听
  • 完整性
    • 借助消息认证码(MAC)保障数据完整性,防止消息篡改
  • 重放保护
    • 通过使用隐式序列号防止重放攻击

为了实现这些安全目标,SSL/TLS协议被设计为一个两阶段协议,分为握手阶段和应用阶段:

握手阶段也称协商阶段,在这一阶段,客户端和服务端端会认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及MasterSecret。后续通信使用的所有密钥都是通过MasterSecret生成。 在握手阶段完成后,进入应用阶段。在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信。

2.9.2. 协议

TLS 包含几个子协议,比较常用的有记录协议、警报协议、握手协议、变更密码规范协议等。

2.9.2.1. 记录协议

记录协议(Record Protocol)规定了 TLS 收发数据的基本单位记录(record)。

2.9.2.2. 警报协议

警报协议(Alert Protocol)用于提示协议交互过程出现错误。

2.9.2.3. 握手协议

握手协议(Handshake Protocol)是 TLS 里最复杂的子协议,在握手过程中协商 TLS 版本号、随机数、密码套件等信息,然后交换证书和密钥参数,最终双方协商得到会话密钥,用于后续的混合加密系统。

2.9.2.4. 变更密码规范协议

变更密码规范协议(Change Cipher Spec Protocol)是一个“通知”,告诉对方,后续的数据都将使用加密保护。

2.9.3. 交互过程

2.9.3.1. Client Hello

Client Hello 由客户端发送,内容包括客户端的一个Unix时间戳(GMT Unix Time)、一些随机的字节(Random Bytes),还包括了客户端接受的算法类型(Cipher Suites)。

2.9.3.2. Server Hello

Server Hello 由服务端发送,内容包括服务端支持的算法类型、GMT Unix Time以及Random Bytes。

2.9.3.3. Certificate

由服务端或者客户端发送,发送方会会将自己的数字证书发送给接收方,由接收方进行证书验证,如果不通过的话,接收方会中断握手的过程。一般跟在Client / Server Hello报文之后。

2.9.3.4. Server Key Exchange

由服务端发送,将自己的公钥参数传输给了客户端,一般也和Server Hello与Certificate在一个TCP报文中。

2.9.3.5. Server Hello Done

服务端发送,一般也和Server Hello、Certificate和Server Key Exchange在一个TCP报文中。

2.9.3.6. Client Key Exchange

客户端发送,向服务端发送自己的公钥参数,与服务端协商密钥。

2.9.3.7. Change Cipher Spec

客户端或者服务端发送,紧跟着Key Exchange发送,代表自己生成了新的密钥,通知对方以后将更换密钥,使用新的密钥进行通信。

2.9.3.8. Encrypted Handshake Message

客户端或者服务端发送,紧跟着Key Exchange发送。进行测试,一方用自己的刚刚生成的密钥加密一段固定的消息发送给对方,如果密钥协商正确无误的话,对方可以正确解密。

2.9.3.9. New Session Ticket

服务端发送,表示发起会话,在一段时间之内(超时时间到来之前),双方都以刚刚交换的密钥进行通信。从这以后,加密通信正式开始。

2.9.3.10. Application Data

使用密钥交换协议协商出来的密钥加密的应用层的数据。

2.9.3.11. Encrypted Alert

客户端或服务端发送,意味着加密通信因为某些原因需要中断,警告对方不要再发送敏感的数据。

2.9.4. 版本更新内容

2.9.4.1. TLS 1.3

  • 引入了PSK作为新的密钥协商机制
  • 支持 0-RTT 模式,以安全性降低为代价,在建立连接时节省了往返时间
  • ServerHello 之后的所有握手消息采取了加密操作,可见明文减少
  • 不再允许对加密报文进行压缩、不再允许双方发起重协商
  • DSA 证书不再允许在 TLS 1.3 中使用
  • 删除不安全的密码算法
    • RSA 密钥传输 - 不支持前向安全性
    • CBC 模式密码 - 易受 BEAST 和 Lucky 13 攻击
    • RC4 流密码 - 在 HTTPS 中使用并不安全
    • SHA-1 哈希函数 - 建议以 SHA-2 取而代之
    • 任意 Diffie-Hellman 组- CVE-2016-0701 漏洞
    • 输出密码 - 易受 FREAK 和 LogJam 攻击

2.9.5. 子协议

SSL/TLS协议有一个高度模块化的架构,分为很多子协议,主要是:

  • Handshake 协议
    • 包括协商安全参数和密码套件、服务端身份认证(客户端身份认证可选)、密钥交换
  • ChangeCipherSpec 协议
    • 一条消息表明握手协议已经完成
  • Alert 协议
    • 对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型的错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
  • Record 协议
    • 包括对消息的分段、压缩、消息认证和完整性保护、加密等

2.9.6. 参考链接

2.9.6.1. RFC

 

x509证书一般会用到三类文,key,csr,crt

Key 是私用密钥openssl格,通常是rsa算法。

Csr 是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥。

crt是CA认证后的证书文,(windows下面的,其实是crt),签署人用自己的key给你签署的凭证。 

1.key的生成 

  1. openssl genrsa -des3 -out server.key 2048

这样是生成rsa私钥,des3算法,openssl格式,2048位强度。server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。可以通过以下方法生成没有密码的key:

  1. openssl rsa -in server.key -out server.key

server.key就是没有密码的版本了。

2. 生成CA的crt

  1. openssl req -new -x509 -key server.key -out ca.crt -days 3650

生成的ca.crt文件是用来签署下面的server.csr文件。

3. csr的生成方法

  1. openssl req -new -key server.key -out server.csr

需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书。

4. crt生成方法

CSR文件必须有CA的签名才可形成证书,可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢。

  1. openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt

输入key的密钥后,完成证书生成。-CA选项指明用于签名的证书,-CAkey选项指明用于签名的密钥,-CAserial指明序列号文件,而-CAcreateserial指明文件不存在时自动生成。

最后生成了私用密钥:server.key和自己认证的SSL证书:server.crt

证书合并:

  1. cat server.key server.crt > server.pem
posted @ 2022-05-17 15:52  codestacklinuxer  阅读(100)  评论(0编辑  收藏  举报