SSL协议位于TCP/IP协议与各类应用层协议之间,为数据通信提供安全支持。SSL协议可分为两层:php
SSL记录协议(SSL Record Protocol):它创建在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。算法
SSL握手协议(SSL Handshake Protocol):它创建在SSL记录协议之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。浏览器
目的是在两个通讯应用程序之间提供私密信和可靠性。这个过程经过3个元素来完成:安全
一、握手协议。这个协议负责协商被用于客户机和服务器之间会话的加密参数。当一个SSL客户机和服务器第一次开始通讯时,它们在一个协议版本上达成一致,选择加密算法,选择相互认证,并使用公钥技术来生成共享密钥。服务器
二、记录协议。这个协议用于交换应用层数据。应用程序消息被分割成可管理的数据块,还能够压缩,并应用一个MAC(消息认证代码);而后结果被加密并传输。接受方接受数据并对它解密,校验MAC,解压缩并从新组合它,并把结果提交给应用程序协议。网络
三、警告协议。这个协议用于指示在何时发生了错误或两个主机之间的会话在何时终止。session
握手的目的app
1. 客户端与服务器须要就一组用于保护数据的算法达成一致;
2. 它们须要确立一组由那些算法所使用的加密密钥;
3. 握手还能够选择对客户端进行认证。dom
服务器认证阶段:ide
1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话链接;
【协商用于加密的消息加密算法和用于完整性检查的哈希函数。一般由客户机提供它支持的全部算法列表,而后由服务器选择最强健的加密算法。】
2)服务器根据客户的信息肯定是否须要生成新的主密钥,如须要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;
3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;
4)服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段:
在此以前,服务器已经经过了客户认证,这一阶段主要完成对客户的认证。
经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
详细步骤:
1. 用户浏览器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送到服务器。(协商用于加密的消息加密算法和用于完整性检查的哈希函数。一般由客户机提供它支持的全部算法列表,而后由服务器选择最强健的加密算法)
2. 服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。若是配置服务器的SSL须要验证用户身份,还要发出请求要求浏览器提供用户证书。
3. 客户端检查服务器证书,若是检查失败,提示不能创建SSL链接。若是成功,那么继续。
4. 客户端浏览器为本次会话生成pre-master secret(好比随机数),并将其用服务器公钥加密后发送给服务器。
5. 若是服务器要求鉴别客户身份,客户端还要再对另一些数据签名后并将其与客户端证书一块儿发送给服务器。
6. 若是服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。若是不在信任列表中,结束本次会话。若是检查经过,服务器用本身的私钥解密收到的pre-master secret,并用它经过某些算法生成本次会话的master secret。
7. 客户端与服务器均使用此master secret生成本次会话的会话密钥(对称密钥)。在双方SSL握手结束后传递任何消息均使用此会话密钥。这样作的主要缘由是对称加密比非对称加密的运算量低一个数量级以上,可以显著提升双方会话时的运算速度。
8. 客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次SSL握手。
9. 服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次SSL握手。
10. 本次握手过程结束,会话已经创建。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。
SSL协议的优势是它提供了链接安全,具备3个基本属性:
l 链接是私有的。在初始握手定义了一个密钥以后,将使用加密算法。对于数据加密使用了对称加密(例如DES和RC4)。
l 可使用非对称加密或公钥加密(例如RSA和DSS)来验证对等实体的身份。
l 链接时可靠的。消息传输使用一个密钥的MAC,包括了消息完整性检查。其中使用了安全哈希函数(例如SHA和MD5)来进行MAC计算。
对于SSL的接受程度仅仅限于HTTP内。它在其余协议中已被代表可使用,但尚未被普遍应用。
TLS:安全传输层协议
(TLS:Transport Layer Security Protocol)
安全传输层协议(TLS)用于在两个通讯应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。 TLS 记录协议提供的链接安全性具备两个基本特性:
私有――对称加密用以数据加密(DES 、RC4 等)。对称加密所产生的密钥对每一个链接都是惟一的,且此密钥基于另外一个协议(如握手协议)协商。记录协议也能够不加密使用。
可靠――信息传输包括使用密钥的 MAC 进行信息完整性检查。安全哈希功能( SHA、MD5 等)用于 MAC 计算。记录协议在没有 MAC 的状况下也能操做,但通常只能用于这种模式,即有另外一个协议正在使用记录协议传输协商安全参数。
TLS 记录协议用于封装各类高层协议。做为这种封装协议之一的握手协议容许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间相互认证,协商加密算法和加密密钥。 TLS 握手协议提供的链接安全具备三个基本属性:
可使用非对称的,或公共密钥的密码术来认证对等方的身份。该认证是可选的,但至少须要一个结点方。
共享加密密钥的协商是安全的。对偷窃者来讲协商加密是难以得到的。此外通过认证过的链接不能得到加密,即便是进入链接中间的攻击者也不能。
协商是可靠的。没有通过通讯方成员的检测,任何攻击者都不能修改通讯协商。
TLS 的最大优点就在于:TLS 是独立于应用协议。高层协议能够透明地分布在 TLS 协议上面。然而, TLS 标准并无规定应用程序如何在 TLS 上增长安全性;它把如何启动 TLS 握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。
协议结构
TLS 协议包括两个协议组―― TLS 记录协议和 TLS 握手协议――每组具备不少不一样格式的信息。在此文件中咱们只列出协议摘要并不做具体解析。具体内容可参照相关文档。
TLS 记录协议是一种分层协议。每一层中的信息可能包含长度、描述和内容等字段。记录协议支持信息传输、将数据分段到可处理块、压缩数据、应用 MAC 、加密以及传输结果等。对接收到的数据进行解密、校验、解压缩、重组等,而后将它们传送到高层客户机。
TLS 链接状态指的是 TLS 记录协议的操做环境。它规定了压缩算法、加密算法和 MAC 算法。
TLS 记录层从高层接收任意大小无空块的连续数据。密钥计算:记录协议经过算法从握手协议提供的安全参数中产生密钥、 IV 和 MAC 密钥。 TLS 握手协议由三个子协议组构成,容许对等双方在记录层的安全参数上达成一致、自我认证、例示协商安全参数、互相报告出错条件。
A simple connection example follows, illustrating a handshake where the server (but not the client) is authenticated by its certificate:
交换key:
所有流程
最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它创建在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差异,主要是它们所支持的加密算法不一样,因此TLS与SSL3.0不能互操做。
1.TLS与SSL的差别
1)版本号:TLS记录格式与SSL记录格式相同,但版本号的值不一样,TLS的版本1.0使用的版本号为SSLv3.1。
2)报文鉴别码:SSLv3.0和TLS的MAC算法及MAC计算的范围不一样。TLS使用了RFC-2104定义的HMAC算法。SSLv3.0使用了类似的算法,二者差异在于SSLv3.0中,填充字节与密钥之间采用的是链接运算,而HMAC算法采用的是异或运算。可是二者的安全程度是相同的。
3)伪随机函数:TLS使用了称为PRF的伪随机函数来将密钥扩展成数据块,是更安全的方式。
4)报警代码:TLS支持几乎全部的SSLv3.0报警代码,并且TLS还补充定义了不少报警代码,如解密失败(decryption_failed)、记录溢出(record_overflow)、未知CA(unknown_ca)、拒绝访问(access_denied)等。
5)密文族和客户证书:SSLv3.0和TLS存在少许差异,即TLS不支持Fortezza密钥交换、加密算法和客户证书。
6)certificate_verify和finished消息:SSLv3.0和TLS在用certificate_verify和finished消息计算MD5和SHA-1散列码时,计算的输入有少量差异,但安全性至关。
7)加密计算:TLS与SSLv3.0在计算主密值(master secret)时采用的方式不一样。
8)填充:用户数据加密以前须要增长的填充字节。在SSL中,填充后的数据长度要达到密文块长度的最小整数倍。而在TLS中,填充后的数据长度能够是密文块长度的任意整数倍(但填充的最大长度为255字节),这种方式能够防止基于对报文长度进行分析的攻击。
2.TLS的主要加强内容
TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。TLS 在SSL v3.0 的基础上,提供了如下加强内容:
1)更安全的MAC算法;
2)更严密的警报;
3)“灰色区域”规范的更明确的定义;
3.TLS对于安全性的改进
1)对于消息认证使用密钥散列法:TLS 使用“消息认证代码的密钥散列法”(HMAC),当记录在开放的网络(如因特网)上传送时,该代码确保记录不会被变动。SSLv3.0还提供键控消息认证,但HMAC比SSLv3.0使用的(消息认证代码)MAC 功能更安全。
2)加强的伪随机功能(PRF):PRF生成密钥数据。在TLS中,HMAC定义PRF。PRF使用两种散列算法保证其安全性。若是任一算法暴露了,只要第二种算法未暴露,则数据仍然是安全的。
3)改进的已完成消息验证:TLS和SSLv3.0都对两个端点提供已完成的消息,该消息认证交换的消息没有被变动。然而,TLS将此已完成消息基于PRF和HMAC值之上,这也比SSLv3.0更安全。
4)一致证书处理:与SSLv3.0不一样,TLS试图指定必须在TLS之间实现交换的证书类型。
5)特定警报消息:TLS提供更多的特定和附加警报,以指示任一会话端点检测到的问题。TLS还对什么时候应该发送某些警报进行记录。
用于对数据进行压缩和解压操做,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的彻底套接字层(SSL)做为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通讯。)SSL使用40 位关键字做为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,若是须要的话用户能够确认发送者是谁。。
HTTPS的主要思想是在不安全的网络上建立一安全信道,并可在使用适当的加密套件和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的保护。
HTTPS的信任继承基于预先安装在浏览器中的证书颁发机构(如VeriSign、Microsoft等)(意即“我信任证书颁发机构告诉我应该信任的”)。所以,一个到某网站的HTTPS链接可被信任,当且仅当:
https://example
时收到了给“Example Inc.”而不是其它组织的证书);与HTTP的URL由“http://
”起始且默认使用端口80不一样,HTTPS的URL由“https://
”起始且默认使用端口443。
HTTP是不安全的,且攻击者经过监听和中间人攻击等手段,能够获取网站账户和敏感信息等。HTTPS被设计为可防止前述攻击,并(在没有使用旧版本的SSL时)被认为是安全的。
HTTP工做在应用层(OSI模型的最高层),但安全协议工做在一个较低的子层:在HTTP报文传输前对其加密,并在到达时对其解密。严格地讲,HTTPS并非一个单独的协议,而是对工做在一加密链接(TLS或SSL)上的常规HTTP协议的称呼。
HTTPS报文中的任何东西都被加密,包括全部报头和荷载。除了可能的CCA(参见限制小节)以外,一个攻击者所能知道的只有在二者之间有一链接这一事实。
要使一网络服务器准备好接受HTTPS链接,管理员必须建立一数字证书,并交由证书颁发机构签名以使浏览器接受。证书颁发机构会验证数字证书持有人和其声明的为同一人。浏览器一般都预装了证书颁发机构的证书,因此他们能够验证该签名。
由证书颁发机构签发的证书有免费的[3][4],也有每一年收费13美圆[5]到1500美圆[6]不等的。
一个组织也可能有本身的证书颁发机构,尤为是当设置浏览器来访问他们本身的网站时(如,运行在公司局域网内的网站,或大学的)。他们能够容易地将本身的证书加入浏览器中。
此外,还存在一我的到人的证书颁发机构,CAcert。
HTTPS也可被用做客户端认证手段来将一些信息限制给合法的用户。要作到这样,管理员一般会给每一个用户建立证书(一般包含了用户的名字和电子邮件地址)。这个证书会被放置在浏览器中,并在每次链接到服务器时由服务器检查。
证书可在其过时前被吊销,一般状况是该证书的私钥已经失密。较新的浏览器如Google Chrome、Firefox[7]、Opera[8]和运行在Windows Vista上的Internet Explorer[9]都实现了在线证书状态协议
TLS有两种策略:简单策略和交互策略。交互策略更为安全,但须要用户在他们的浏览器中安装個人的证书来进行认证。
无论使用了哪一种策略,协议所能提供的保护总强烈地依赖于浏览器的实现和服务器软件所支持的加密算法。
HTTPS并不能防止站点被网络蜘蛛抓取。在某些情形中,被加密资源的URL可仅经过截获请求和响应的大小推得,[11]这就可以使攻击者同时知道明文(公开的静态内容)和密文(被加密过的明文),从而使选择密文攻击成为可能。
由于SSL在HTTP之下工做,对上层协议一无所知,因此SSL服务器只能为一个IP地址/端口组合提供一个证书。[12]这就意味着在大部分状况下,使用HTTPS的同时支持基于名字的虚拟主机是不很现实的。一种叫Server Name Indication