SSL/TLS概述

参考文章: http://drops.xmd5.com/static/drops/tips-6002.html

                  http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

                  https://www.jianshu.com/p/46e48bc517d0

                  https://blog.csdn.net/tterminator/article/details/50675540

一、SSL/TLS的简述

SSL全称是Secure Sockets Layer,安全套接字层,它是由网景公司(Netscape)设计的主要用于Web的安全传输协议,SSL的主要目标是:

  • 认证性——借助数字证书认证服务器端和客户端身份,防止身份伪造
  • 机密性——借助加密防止第三方窃听
  • 完整性——借助消息认证码(MAC)保障数据完整性,防止消息篡改

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.0和TLS1.1都存在安全风险,一般只是为了兼容性才开启TLS1.0和TLS1.1。

二、TLS证书

一般TLS证书会包含三个文件:CA证书、公钥、私钥。

公钥和私钥是成对的,主要是利用非对称加密算法进行加解密,由于非对称加密算法的复杂度很高,我们一般不会直接利用公私钥对对数据进行加解密,而是利用公私钥对来协商对称加密的秘钥。

CA证书的作用是来确认对端数字证书的真实性。数字证书 = encrypt(公钥等信息,CA的私钥),如下图。所以当TLS交换数字证书的过程中,我们就可以使用本端的CA证书(即CA的公钥)进行解密,再hash公钥,比较hash值与证书中是否相等,来确认对端证书的真实性和有效性。

 图1 签名过程

 图2 认证过程

数字证书一般包括以下信息,这里以X.509证书为例,包括版本号(大多数在用的SSL证书都是V3版本,V1版本存在安全问题)、序列号、签名算法、发行方(指颁发证书的CA机构)、有效期、主体名称、主体公钥和算法、扩展和签名。


图3 X509证书格式

下面重点介绍下证书链的概念,我理解的是证书链的目的是为了确保root certificates的绝对安全性,所以增加中间层,来完全隔离端证书和根证书。

在Chrome上任意打开一个支持HTTPS的网站,例如 https://im.qq.com/ ,我们会发现在地址栏的左侧有个绿色的小锁,点击这个小锁,然后就可以查看这个网站的证书信息:


图4 证书链

证书有3类:

  • end-user :wkd.qq.com证书,包含用来加密传输数据的公钥的证书,是HTTPS中使用的证书
  • intermediates: GlobalSign Organization Validation CA - SHA256 - G2证书, CA用来认证公钥持有者身份的证书,即确认HTTPS使用的end-user证书是属于baidu.com的证书。这类intermediates证书甚至可以有很多级。
  • root:GlobalSign Root CA证书,用来认证intermediates证书是合法证书的证书。
    我们使用end-user certificates来确保加密传输数据的公钥(public key)的合法性,而又如何确保end-user certificates的合法性呢?这个认证过程跟公钥的认证过程类似,首先获取颁布end-user certificates的CA的证书,然后验证end-user certificates的signature。一般来说,root CAs不会直接颁布end-user certificates的,而是授权给多个二级CA,而二级CA又可以授权给多个三级CA,这些中间的CA就是intermediates CAs,它们才会颁布end-user certificates。

三、协议介绍

1、SSL/TLS协议架构

SSL/TLS协议位于传输层和应用层之间,其承载在TCP上。


图5 SSL/TLS协议架构

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

2、协议流程

一个典型的TLS 1.0协议交互流程如下图所示:


图6 SSL/TLS协议流程

ClientHello:ClientHello通常是握手过程中的第一条消息,用于告知服务器客户端所支持的密码套件种类、最高SSL/TLS协议版本以及压缩算法。

ClientHello中还包含一个随机数,这个随机数由4个字节的当前GMT UNIX时间以及28个随机选择的字节组成,共32字节。该随机数会在密钥生成过程中被使用。

另外,ClientHello中还可能包含客户端支持的TLS扩展。(TLS扩展可以被用来丰富TLS协议的功能或者增强协议的安全性)

ServerHello:服务器接受到ClientHello后,会返回ServerHello。服务器从客户端在ClientHello中提供的密码套件、SSL/TLS版本、压缩算法列表里选择它所支持的项,并把它的选择包含在ServerHello中告知客户端。Session ID和Client Hello保持一致。ServerHello中同样会包含一个随机数,同样4+28 字节类型,由服务器生成

Certificate:服务器一般在ServerHello后会接一条Certificate消息,Certificate消息中会包含一条证书链,如下图所示
ServerKeyExchange:该消息仅当以下密钥交换算法被使用时由服务器发出:RSA_EXPORT(仅当服务器的公钥大于512bit时)、DHE_DSS、DHE_DSS_EXPORT、DHE_RSA、DHE_RSA_EXPORT、DH_anon 。前面可以看到协商的秘钥交换算法是ECDHE_RSA,所以这次TLS协商中包含 ServerkeyExchange消息。

ServerkeyExchange消息会携带这些密钥交换算法所需要的额外参数,以在后续步骤中协商PreMasterSecret。这些参数需要被签过名。


CertificateRequest:这个消息通常在要求认证客户端身份时才会有。消息中包含了证书类型以及可接受的CA列表。本次TLS协商不涉及该消息。

ServerHelloDone:服务器发送这条消息表明服务器部分的密钥交换信息已经发送完了,等待客户端的消息以继续接下来的步骤。这条消息只用作提醒,不包含数据域。


ClientKeyExchange:这条消息包含的数据与所选用的密钥交换算法有关。

如果选择的密钥交换算法是RSA,那么消息包含的参数为用服务器RSA公钥(包含在之前证书中的或者是ServerKeyExchange中的)加密过的PreMasterSecret,它有48个字节,前2个字节表示客户端支持的最高协议版本,后46个字节是随机选择的。

如果选择的密钥交换算法是DH或者DHE,则可能有两种情况:

  • 隐式DH公开值:包含在Certificate消息里;

  • 显示DH公开值:公开值是本消息的一部分。(本次协商选择显示DH方式)


CertificateVerify:这条消息用来证明客户端拥有之前提交的客户端证书的私钥

ChangeCipherSpec:指示从现在开始发送的消息都是加密过的


Finished:表明握手阶段结束。这是第一条用协商的算法和密钥保护的消息。其包含了前面所有握手消息的hash,可以让接收方验证握手过程是否被第三方篡改





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值