TCP / IP 协议栈
简介
SSL(安全套接字层,Secure Socket Layer)协议是网景(Netscape)公司提出的基于WEB应用的安全协议,是一种用于传输层安全的协议。传输层安全协议的目的是为了保护传输层的安全,并在传输层上提供实现保密、认证和完整性的方法。
SSL指定了一种在应用程序协议(例如http、telnet、NNTP、FTP)和TCP/IP之间提供数据安全性分层的机制。它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。
SSL 的体系结构
- SSL连接:连接是提供恰当类型服务的传输。SSL连接是点对点的关系,每一个连接与一个会话相联系。
- SSL会话:SSL会话是客户和服务器之间的关联,会话通过握手协议(在SSL协议的高层)来创建。会话定义了加密安全参数的一个集合,该集合可以被多个连接所共享。会话可以用来避免为每个连接进行昂贵的新安全参数的协商。
SSL工作流程
- 先握手(基于公钥密码体制)
• 单向身份认证(必须对服务器的身份认证)
• 双向身份认证(可选)
• 协商SSL会话的密钥,加密算法等参数。 - SSL记录协议(基于对称密码体制)
• 加密会话数据
• 提供完整性、保密性支持
SSL握手协议
SSL握手协议用于鉴别初始化和传输密钥,它使得服务器和客户能相互鉴别对方的身份,并保护在SSL记录中发送的数据。因此在传输任何应用数据前,都必须使用握手协议。
SSL握手过程
- 客户发出一个带有客户HELLO信息的连接请求。这信息包括:
①想要使用的SSL版本号。
②时间信息,以标准的UNIX32位格式标识的现时和日期。
③会话标识ID(可选),如果没有指定的话,则服务器便重用上一次的会话标识或返回一个错误信息
④密文组(客户方所支持的各种加密算法选项清单。包括认证码、密钥交换方法、加密和MAC算法)。
⑤客户方所支持的压缩算法(为了减少带宽)。
⑥随机数。 - 服务器评估客户方发来的HELLO信息中的各项参数,并且返回一个服务器方的HELLO信息,其中含有服务器选来用于SSL会话的各项参数 (版本号、时间信息、以标准的UNIX32位格式标识的现时和日期、会话标识、密文组、压缩方法、随机数)。
在服务器HELLO信息之后,服务器发出如下信息:
①服务器证书,如果服务器需要被鉴别的话。
②服务器密钥交换信息,如果得不到证书或证书仅仅用作签名的话。
③证书请求,如果客户要求被鉴别的话。
最后,服务器发出一个服务器HELLO DONE信息(server用自己的私钥对随机数签名发给客户机),开始等待客户的回音。 - 第三步:客户发送下列信息:
①如果服务器发出了一个证书请求,那么客户方必须发送一个证书或非证书信息。
•②如果服务器发送了一个服务器密钥交换信息,那么客户方就发送一个基于公钥算法的由HELLO信息决定的密钥交换信息。
③如果客户方已经发送了一个证书,那么客户方就需验证服务器方的证书并且发出一个证书验证信息指明结果。(采用自己的私钥加密服务器发至客户机的随机数,发至服务器待检验)
然后,客户方发出一个结束信息,指出协商过程已经完成。客户方还发送一个修改密文规约信息来产生共享的常规密钥。应该注意这部分工作不是由握手协议控制,是由修改密文规约协议管理的。 - 服务器发出一个结束信息指出协商协商阶段完成。然后服务器发出一个密文修改规约信息。
- 会话双方分别产生一个加密密钥,然后他们再根据这些密钥导出会话主密钥。握手协议改变状
态至连接状态。所有从应用层的来的数据传输作为特定信息传输给对方
SSL记录协议
SSL协议位于传输层上面,为了实现机密性(使用对称加密算法)和消息完整性(使用MAC算法)服务。它从应用层取得的数据需要重定格式(分片、可选的压缩、应用MAC、加密等)后才能传给传输层进行发送。同样,当SSL协议从传输层接收到数据后需要对其进行解密等操作后才能交给上层的应用层。这个工作是由SSL记录协议完成的。
- SSL记录协议中发送方执行的操作步骤:
①从上层接受传输的应用报文;
②分片:将数据分片成可管理的块,每个上层报文被分成16KB或更小的数据块;
③进行数据压缩(可选):压缩是可选的,压缩的前提是不能失信息,并且增加的内容长度不能超过1024字节,缺省的压缩算法为空;
④应用MAC:加入信息认证码(MAC),这一步需要用到共享的密钥;
⑤加密:利用IDEA、DES、3DES或其他加密算法对压缩报文和MAC码进行数据加密;
⑥增加SSL首部:增加由内容类型、主要版本、次要版本和压缩长度组成的首部。
⑦将结果传输到下层 - SSL记录协议中接收方接收数据的工作过程
①从低层接受报文;
②解密;
③用事先商定的MAC码校验数据;
④如果是压缩的数据,则解压缩;
⑤重装配数据;
⑥传输信息到上层。
SSL的其他协议
SSL修改密文规约协议
SSL修改密文规约协议用来发送修改密文规约协议信息。任何时候客户都能请求修改密码参数,比如握手密钥交换。在修改密文规约的通告发出以后,客户方就发出一个握手密钥交换信息(如果可得到的话),鉴定认证信息,服务器则在处理了密钥交换信息之后发送一个修改密文规约信息。此后,新的双方约定的密钥就将一直使用到下次提出修改密钥规约请求为止
SSL警告协议
SSL告警协议是用来将SSL有关的告警传送给对方实体的。和其他使用SSL的情况一样,告警报文按照当前状态说明被压缩和加密。
SSL告警协议的每个报文由两个字节组成。第一个字节的值用来表明警告的的级别,第二个字节表示特定告警的代码。如果在通信过程中某一方发现任何异常,就需要给对方发送一条警示消息通告。
警示消息有两种:
- 一种是 Fatal错误,如传递数据过程中,发现错误的MAC,双方就需要立即中断会话,同时消除自己缓冲区相应的会话记录;
- 第二种是Warning消息,这种情况,通信双方通常都只是记录日志,而对通信过程不造成任何影响。
总结
SSL协议的优点
- 机密性
即连接是私有的。在初始握手阶段,双方建立对称密钥后,信息即用该密钥加密。 - 完整性
在信息中嵌入信息鉴别码(MAC)来保证信息的完整性。其中使用了安全哈希函数(例如SHA和MD5)来进行MAC计算。 - 鉴别
在握手阶段,客户鉴别服务器用不对称密钥或公开密钥。
SSL协议的不足
- SSL要求对每个数据进行加密和解密操作,因而在带来高性能的同时,对系统也要求高资源开销。
- SSL协议主要是使用公开密钥体制和X.509数字证书技术保护信息传输的机密性和完整性,它不能保证信息的不可抵赖性,主要适用于点对点之间的信息传输,常用Web Server方式。
- SSL为带有安全功能的TCP/IP套接字应用程序接口提供了一个替代的方法,理论上,在SSL之上可以安全方式运行任何原有TCP/IP应用程序而不需修改,但实际上,SSL目前还只是用在HTTP连接上