一.协议的起源
随着计算机网络技术向整个经济社会各层次延伸,整个社会表现对Internet、Intranet
、Extranet等使用的更大的依赖性。随着企业间信息交互的不断增加,任何一种网络应用和增值服务的使用程度将取决于所使用网络的信息安全有无保障,网络安全已成为现代计算机网络应用的最大障碍,也是急需解决的难题之一。
由于Web上有时要传输重要或敏感的数据,因此Netscape公司在推出Web浏览器首版的同时,提出了安全通信协议SSL(Secure Socket Layer),目前已有2.0和3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器和客户机两端同时实现支持。目前,利用公开密钥技术的SSL协议,并已成为Internet上保密通讯的工业标准。现行Web浏览器普遍将HTTP和SSL相结合,从而实现安全通信。
二.协议概述
安全套接层协议(SSL)是在Internet基础上提供的一种保证私密性的安全协议。它能使客户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对客户进行认证。SSL协议要求建立在可靠的传输层协议(例如:TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的。高层的应用层协议(例如:HTTP,FTP,TELNET。。。
。。。)能透明的建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
通过以上叙述,SSL协议提供的安全信道有以下三个特性:
? 私密性。因为在握手协议定义了会话密钥后,所有的消息都被加密。
? 确认性。因为尽管会话的客户端认证是可选的,但是服务器端始终是被认证的。
? 可靠性。因为传送的消息包括消息完整性检查(使用MAC)。
三.协议规范
SSL协议由SSL记录协议和SSL握手协议两部分组成。
1. SSL记录协议:
在SSL协议中,所有的传输数据都被封装在记录中。记录是由记录头和长度不为0的记录数据组成的。所有的SSL通信包括握手消息、安全空白记录和应用数据都使用SSL记录层。SSL记录协议包括了记录头和记录数据格式的规定。
1) SSL记录头格式:
SSL的记录头可以是两个或三个字节长的编码。SSL记录头的包含的信息包括:记录头的
长度、记录数据的长度、记录数据中是否有粘贴数据。其中粘贴数据是在使用块加密算
法时,填充实际数据,使其长度恰好是块的整数倍。最高位为1时,不含有粘贴数据,记
录头的长度为两个字节,记录数据的最大长度为32767个字节;最高位为0时,含有粘贴
数据,记录头的长度为三个字节,记录数据的最大长度为16383个字节。
当数据头长度是三个字节时,次高位有特殊的含义。次高位为1时,标识所传输的记录是
普通的数据记录;次高位为0时,标识所传输的记录是安全空白记录(被保留用于将来协
议的扩展)。
记录头中数据长度编码不包括数据头所占用的字节长度。记录头长度为两个字节的记录长度的计算公式:记录长度=((byte[0] ; 0x7f)
2) SSL记录数据的格式:
SSL的记录数据包含三个部分:MAC数据、实际数据和粘贴数据。
MAC数据用于数据完整性检查。计算MAC所用的散列函数由握手协议中的CIPHER-CHOICE消息确定。若使用MD2和MD5算法,则MAC数据长度是16个字节。MAC的计算公式:MAC数据=HASH[密钥,实际数据,粘贴数据,序号]。当会话的客户端发送数据时,密钥是客户的写密钥(服务器用读密钥来验证MAC数据);而当会话的客户端接收数据时,密钥是客户的读密钥(服务器用写密钥来产生MAC数据)。序号是一个可以被发送和接收双方递增的计数器。每个通信方向都会建立一对计数器,分别被发送者和接收者拥有。计数器有32位,计数值循环使用,每发送一个记录计数值递增一次,序号的初始值为0。
2. SSL握手协议:
SSL握手协议包含两个阶段,第一个阶段用于建立私密性通信信道,第二个阶段用于客户认证。
1) 第一阶段:
第一阶段是通信的初始化阶段,通信双方都发出HELLO消息。当双方都接收到HELLO消息时,就有足够的信息确定是否需要一个新的密钥。若不需要新的密钥,双方立即进入握手协议的第二阶段。否则,此时服务器方的SERVER-HELLO消息将包含足够的信息使客户方产生一个新的密钥。这些信息包括服务器所持有的证书、加密规约和连接标识。若密钥产生成功,客户方发出CLIENT-MASTER-KEY消息,否则发出错误消息。最终当密钥确定以后,服务器方向客户方发出SERVER-VERIFY消息。因为只有拥有合适的公钥的服务器才能解开密钥。下图为第一阶段的流程:
需要注意的一点是每一通信方向上都需要一对密钥,所以一个连接需要四个密钥,分别为客户方的读密钥、客户方的写密钥、服务器方的读密钥、服务器方的写密钥。
2) 第二阶段:
第二阶段的主要任务是对客户进行认证,此时服务器已经被认证了。服务器方向客户发出认证请求消息:REQUEST-CERTIFICATE。当客户收到服务器方的认证请求消息,发出
自己的证书,并且监听对方回送的认证结果。而当服务器收到客户的认证,认证成功返回SERVER-FINISH消息,否则返回错误消息。到此为止,握手协议全部结束。
3. 典型的协议消息流程:
消息名 方向 内容
不需要新密钥
CLIENT-HELLO C-;S challenge, session_id, cipher_specs
SERVER-HELLO S-;C connection-id, session_id_hit
CLIENT-FINISH C-;S Eclient_write_key[connection-id]
SERVER-VERIFY S-;C Eserver_write_key[challenge]
SERVER-FINISH S-;C Eserver_write_key[session_id]
需要新密钥
CLIENT-HELLO C-;S challenge, cipher_specs
SERVER-HELLO S-;C connection-id,server_certificate,cipher_specs
CLIENT-MASTER-KEY C-;S Eserver_public_key[master_key]
CLIENT-FINISH C-;S Eclient_write_key[connection-id]
SERVER-VERIFY S-;C Eserver_write_key[challenge]
SERVER-FINISH S-;C Eserver_write_key[new_session_id]
需要客户认证
CLIENT-HELLO C-;S challenge, session_id, cipher_specs
SERVER-HELLO S-;C connection-id, session_id_hit
CLIENT-FINISH C-;S Eclient_write_key[connection-id]
SERVER-VERIFY S-;C Eserver_write_key[challenge]
REQUEST-CERTIFICATE S-;C Eserver_write_key[auth_type,challenge']
CLIENT-CERTIFICATE C-;S Eclient_write_key[cert_type,client_cert,response_data]
SERVER-FINISH S-;C Eserver_write_key[session_id]
四.相关技术:
1. 加密算法和会话密钥:
如前所述,加密算法和会话密钥是在握手协议中协商并有CIPHER-CHOICE指定的。现有的SSL版本中所用到的加密算法包括:RC4、RC2、IDEA和DES,而加密算法所用的密钥由消息散列函数MD5产生。RC4、RC2是由RSA定义的,其中RC2适用于块加密,RC4适用于流加密。下述为CIPHER-CHIOCE的可能取值和会话密钥的计算:
SSL_CK_RC4_128_WITH_MD5
SSL_CK_RC4_128_EXPORT40_WITH_MD5
SSL_CK_RC2_128_CBC_WITH_MD5
SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5
SSL_CK_IDEA_128_CBC_WITH_MD5
KEY-MATERIAL-0 = MD5[ MASTER-KEY, ";0";, CHALLENGE, CONNECTION-ID ]
KEY-MATERIAL-1 = MD5[ MASTER-KEY, ";1";, CHALLENGE, CONNECTION-ID ]
CLIENT-READ-KEY = KEY-MATERIAL-0[0-15]
CLIENT-WRITE-KEY = KEY-MATERIAL-1[0-15]
SSL_CK_DES_64_CBC_WITH_MD5
KEY-MATERIAL-0 = MD5[ MASTER-KEY, CHALLENGE, CONNECTION-ID ]
CLIENT-READ-KEY = KEY-MATERIAL-0[0-7]
CLIENT-WRITE-KEY = KEY-MATERIAL-0[8-15]
SSL_CK_DES_192_EDE3_CBC_WITH_MD5
KEY-MATERIAL-0 = MD5[ MASTER-KEY, ";0";, CHALLENGE, CONNECTION-ID ]
KEY-MATERIAL-1 = MD5[ MASTER-KEY, ";1";, CHALLENGE, CONNECTION-ID ]
KEY-MATERIAL-2 = MD5[ MASTER-KEY, ";2";, CHALLENGE, CONNECTION-ID ]
CLIENT-READ-KEY-0 = KEY-MATERIAL-0[0-7]
CLIENT-READ-KEY-1 = KEY-MATERIAL-0[8-15]
CLIENT-READ-KEY-2 = KEY-MATERIAL-1[0-7]
CLIENT-WRITE-KEY-0 = KEY-MATERIAL-1[8-15]
CLIENT-WRITE-KEY-1 = KEY-MATERIAL-2[0-7]
CLIENT-WRITE-KEY-2 = KEY-MATERIAL-2[8-15]其中KEY-MATERIAL-0[0-15]表示KEY-MATERIAL-0中的16个字节,KEY-MATERIAL-0[0-7]表示KEY-MATERIAL-0中的头8个字节,KEY-MATERIAL-1[8-15]表示KEY-MATERIAL-0中的第9个字节到第15个字节。其他类似形式有相同的含义。";0";、";1";表示数字0、1的ASCII码0x30、0x31。
2. 认证算法:
认证算法采用X。509电子证书标准,通过使用RSA算法进行数字签名来实现的。
1) 服务器的认证:
在上述的两对密钥中,服务器方的写密钥和客户方的读密钥、客户方的写密钥和服务器方的读密钥分别是一对私有、公有密钥。对服务器进行认证时,只有用正确的服务器方写密钥加密CLIENT-HELLO消息形成的