SSL
先了解一下
1.HTTP是什么?
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种协议,所有的www文件都必须遵守这个标准,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。大部分网站都是通过http协议来传输web页面,以及web页面上包含的各种东西(图片,css文件,js脚本)。
一句话描述一下,http就是一个网络协议,专门用来帮助传输web内容的。
2. HTTPS是什么?
https(HyperText Transfer Protocol over Secure Socket Layer),是以安全为目标的http通道。即http下加入ssl层,https的安全基础是ssl,因此加密的详细内容就需要ssl。被用于安全的http数据传输,例如交易支付页面。
一句话描述一下,https就是http安全版(http协议+ssl/tls协议)
补充:
1999年,SSL因为应用广泛,已经成为互联网上的事实标准,IETF就在那年把SSL标准化,标准化之后的名称改为TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。
很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。
3.http和htpps的区别
(1)https协议需要到ca申请证书,一般免费证书很少,需要交费。
(2)http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
(3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443.
(4)http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
SSL是什么?
1.ssl(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层。
2.ssl协议是Web浏览器与Web服务器之间安全交换信息的协议,提供两个基本的安全服务:鉴别与保密。
3.ssl协议的三个特性:
保密:在握手协议中定义了会话密钥后,所有的消息都被加密。
鉴别:可选的客户端认证,和强制的服务器端认证。
完整性:传送的消息包括消息完整性检查(使用MAC)
4.ssl的位置
ssl介于应用层和tcp层之间。应用层数据不再直接传递给传输层,而是传递给ssl层,ssl层对从应用层收到的数据进行加密,并增加自己的ssl头。
6.ssl内容
为什么要有SSL?
1.因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患推出了ssl。
2.为什么不安全?
eg1:我们在购物网站上填写银行卡密码,可能被其他人获取。(防偷听)
eg2:我们在输入的支付金额为10元,该信息传输的过程中,被改为支付1000元。(防篡改)
eg3:我们访问的服务器是正确的服务器而不是冒充的。(防冒充)
SSL是怎样做的?
1.对称加密和非对称加密
1.什么是加密和解密?
加密:明文--->密文
解密:密文--->明文
在这两个过程中都需要'密钥'来参与运算。
2.什么是对称加密?
对称加密就是加密和解密使用相同的密钥。
对称加密是最快速,最简单的一种加密方式。加密(encryption)与解密(decryption)用的是相同的密钥(secret key)。由于它的效率很高,所以被广泛使用在很多加密协议的核心当中。
eg:我们使用7zip创建了一个带密码的加密压缩包,发送给别人,别人要解开这个压缩包就需要输入相同的密码。这个密码就如同刚刚所说的密钥。
3.什么是非对称加密?
非对称加密就是加密和解密使用的不同的密钥。
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key),私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人,非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。
2.SSL工作原理
(1)SSL协议结构
握手协议(Handshake protocol)
记录协议(record protocol)
警报协议(alert protocol)
(2)握手协议
握手协议是客户机和服务器用ssl链接通信时使用的第一个子协议,握手协议包括客户机与服务器间的一系列消息。ssl中最复杂的协议就是握手协议。该协议允许服务器和客户机相互验证,协商加密和MAC算法以及保密密钥,用来保护在ssl记录中发送的数据。握手协议是在应用程序的数据传输之前使用的。
每个握手协议包括以下三个字段:
Type:表示10种消息类型之一
Length:表示消息长度字节数
Content:与消息相关的参数
握手协议的四个阶段:
第一阶段:建立安全能力
ssl握手的第一个阶段启动逻辑连接,建立这个连接的安全能力。首先客户机像服务器发送client hello消息并等待服务器响应,随后服务器向客户机返回server hello消息,对client hello消息中的消息进行确认。
client hello消息包括Version,Random,Session id,Cipher suite,Compression method等消息。
客户发送的client hello信息包含如下内容:
(1)客户端可以支持的SSL最高版本号
(2)一个用于生成主密钥的32字节的随机数(后面会介绍主密钥是什么)
(3)一个确定会话的会话ID.
(4)一个客户端可以支持的密码套件列表。
密码套件格式:每个套件都以ssl开头,紧跟着的是密钥交换算法。用'with'这个词把密钥交换算法,加密算法,散列算法分开。eg:SSL_DHE_RSA_WITH_DES_CBC_SHA,表示把DHE_RSA(带有RSA数字签名的暂时Diffe-HellMan)定义为密钥交换算法;把DES_CBC定义为加密算法;把SHA定义为散列算法。
(5)一个客户端可以支持的压缩算法列表
服务器用于ServerHello信息应答用户,包括下列内容
(1)一个SSL版本号。取客户端支持的最高版本号和服务器端支持的最高版本号中的较低者。
(2)一个用于生成主密钥的32字节的随机数。(客户端一个,服务端一个)
(3)会话ID
(4)从客户端的密码套件列表中选择一个密码套件。
(5)从客户端的压缩方法的列表中选择的压缩方法。
总结:
这个阶段之后,客户端服务端知道了下列内容:
(1)SSL版本 (2)密钥交换,信息验证和加密算法 (3)压缩方法 (4)有关密钥生成的两个随机数
第二阶段:服务器鉴别和密钥交换
服务器启动SSL握手的第二个阶段,是本阶段所有消息的唯一发送方,客户机是所有消息的唯一接收方。该阶段分为4步:
(a)证书:服务器将数据证书和到根CA整个链发给客户端,使客户端能用服务器证书中的服务器公钥认证服务器。
(b)服务器密钥交换(可选):这里视密钥交换算法而定
(c)证书请求:服务端可能会要求客户自身进行验证。
(d)服务器握手完成:第二阶段结束,第三阶段开始的信号。
这里重点介绍一下服务端的验证和密钥交换。这个阶段的前面的(a)证书和(b)服务器密钥交换是基于密钥交换方法的。而在SSL中密钥交换算法有6种:无效(没有密钥交换),RSA,匿名Diffie-Hellman,暂时Diffie-Hellman,固定Diffie-Hellman,Fortezza.
在阶段1过程中确定使用RSA密钥交换,那么过程如下图:
这个方法中,服务器在它的第一个信息中,发送了RSA加密/解密公钥证书。不过,因为预备主密钥是由客户端在下一个阶段生成并发送的,所以第二个信息是空的。注意,公钥证书会进行从服务器到客户端的验证。当服务器收到预备主密钥时,它使用私钥进行解密。服务端拥有私钥是一个证据,可以证明服务器是一个它在第一个信息发送的公钥证书中要求的实体。
第三阶段:客户机鉴别与密钥交换
客户机启动SSL握手第三阶段,是本阶段所有消息的唯一发送方,服务器是所有消息的唯一接收方。该阶段分为三步:
(a)证书(可选):为了对服务器证明自身,客户要发送一个证书信息,这是可选的,在IIS中可以配置强制客户端证书认证。
(b)客户机密钥交换(Pre-master-secret):这里客户端将预备主密钥发送给服务端,注意这里会使用服务端的公钥进行加密。
(c)证书验证(可选),对预备密钥和随机数进行签名,证明拥有(a)证书的公钥。
下面重点介绍一下RSA方式的客户端验证和密钥交换:
如下图
这种情况,除非服务器在阶段II明确请求,否则没有证书信息。客户端密钥交换方式包括第二阶段收到的由RSA公钥加密的预备主密钥。
总结:
在第三阶段之后,客户要有服务器进行验证,客户和服务器都知道预备主密钥。
第四阶段:完成
客户机启动SSL握手第四阶段,使服务器结束。该阶段分为4步,前两个消息来自客户机,后两个消息来自服务器。
客户端发送一个Change Cipher Spec消息,并且把协商得到的CipherSuite拷贝到当前连接的状态之中。然后客户端用心的算法,密钥参数发送一个FInished消息,这条消息可以检查密钥交换和认证过程是否已经成功。其中包括一个校验值,对客户端整个握手过程的消息进行校验。服务器同样发送Change Cipher Spec消息和FInished消息。握手过程完成,客户端和服务器可以交换应用层数据进行通信。
一句话总结一下:SSL握手协议的作用是协调客户和服务器的状态,使双方能够达到状态的同步。
补充:密钥生成过程
这样握手协议完成,下面看看什么是预备主密钥,主密钥时怎么生成的。
为了保证信息的完整性和机密性,SSL需要有六个加密密钥:四个密钥和两个IV。
为了信息的可信性,客户端需要一个密钥(HMAC)
为了加密要有一个密钥,
为了分组加密要一个IV,
服务也是如此。
SSL需要的密钥是单向的,不同于那些在其他方向的密钥。如果在一个方向上有攻击,这种攻击在其他方向是没影响的。
生成过程如下:
(3)记录协议
记录协议的作用是为高层协议提供基本的安全服务。记录协议针对HTTP协议进行了特别的设计,使得超文本传输协议HTTP能够在SSL运行。记录封装各种高层协议,具体实施压缩解压缩,加密解密,计算和校验MAC等与安全有关的操作。
记录协议在客户机和服务器握手成功后使用,即客户机和服务器鉴别对方和确定安全信息交换使用的算法后,进入SSL记录协议,记录向SSL连接提供两个服务:
(1)保密性:使用握手协议定义的私密密钥实现
(2)完整性:握手协议定了MAC,用于保证消息完整性
记录协议过程:
(4)警报协议
客户机和服务器发现错误时,向对方发送一个警报消息。如果是致命错误,则算法立即关闭SSL连接,双方还会先删除相关的会话号,密钥。每个警报共两个字节,第一个字节表示错误类型,如果是警报,则值为1;如果是致命错误,则值为2;第二个字节制定市级错误类型。
补充
- 服务器端发来的证书是正确的吗?
在SSL领域中,存在用于对SSL服务器证书进行签名的中间CA证书,以及对中间CA证书进行签名的根证书,由于采用了这种层级结构,可以用来验证服务器证书是否是正常颁发的。