SSL协议分析及实现

2022-03-15 08:40:01 | 浏览次数:

摘要:目的:该文主要讨论SSL协议的组成和工作过程,应用SSL实现Internet上的安全。方法:先了解SSL协议的体系结构,并通过SSL通信过程和握手协议的工作过程完全了解SSL协议的工作过程。结果SSL协议是在TCP/IP套接层的安全协议,SSL协议很好的解决了Internet上信息的安全传输,弥补了TCP/IP协议的不足,使得我们在网络上传输数据得到安全保障。结论:该文通过对SSL协议的分析及实现过程的讨论,使得我们对SSL实现Internet上的安全有一个全面的了解,并提出其不足之处并加以完善。

关键词:SSL协议;C/S结构;握手协议;TCP/IP协议

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)29-0304-03

SSL Protocol Analysis and Implementation

HU Xiao-ye1,LI Jun-yi2

(1.Baoji University of Arts and Sciences Equipment Department,Baoji 721007,China; 2.Dept. Comput. Sci. & tech., Shanxi Police Profession College,Xi"an 710043,China)

Abstract: Aim Discuss the configuration and working process of the SSL protocol,apply SSL to achieve internet security.Means First understand the system construction of SSL protocol,then understand the protocol"s working process by SSL communicate and handclasp protocol process.Result SSL protocol is a security protocol base on the TCP/IP,SSL protocol settle the problem of security on internet,make up the shortage of TCP/IP,give us security of data transfer in internet.Conclusion Discussing the configuration and working process of the SSL protocol, make us to understand the SSL protocol all-around, and bring forward it"s shortage and consummate it.

Key words: SSL protocol;C/S configuration;handclasp protocol;TCP/IP protocol

1 引言

目前,随着Internet的快速发展,互联网上的信息安全越来越引起人们的关注。特别是近年来基于互联网的网上银行、电子商务和电子政务的发展,如何保证传输信息,特别是网上交易信息的不可否认性、保密性、完整性已成为急待解决的问题。为此,人们发明了安全套接层SSL协议(Security Socket Layer Protocol,简称SSL),是Internet上使用广泛的保密通信的一种安全协议。

2 概述

SSL协议是由Netscape公司为制定数据安全性所开发的通信协议。1995年,Netscape公司提出了SSL2.0之后,很快就成为一个事实上的标准,并为众多的厂商所采用。1996年,Netscape公司发布了SSL3.0,该版本增加了对除了RSA算法之外的其他算法的支持和一些安全特性,并且修改了前一个版本中一些小的问题,相比SSL2.0更加成熟和稳定。1999年l月EITF基于SSL协议发布了TLS1.0(Transport Layer Security)版本,Netscape公司宣布支持该开放的标准。

SSL协议向基于TCP/护的客户/服务器应用程序提供了客户端和服务器的鉴别、数据完整性、及信息机密性等安全措施。该协议通过在应用程序进行数据交换前交换SSL初始握手信息来实现有关安全特性的审查。在SSL握手信息中采用了DES、MDS等加密技术来实现机密性和数据完整性,并采用X.509的数字证书实现鉴别。该协议已成为事实上的工业标准,并被关泛应用于Internet和Intranet的服务器产品和客户端产品中。如Netscape公司、微软公司、IBM公司等领导Internet/Intranet网络产品的公司已在使用该协议。

3 SSL协议的体系结构

SSL协议主要由两层组成,分别是握手协议层和记录协议层,握手协议建立在记录协议之上,此外还有警告协议、更改密码说明协议和应用数据协议等对话协议和管理提供支持的子协议。其组成如图所示:

握手协议HandshakeProtocol和记录协议Record Protocol是SSL协议的核心组成部分。其上是超文本协议HTTP、文件传输协议FTP和传输控制协议TELNET。它们控制文本的传输。支撑握手、记录协议的低层通信是用户数据报文和TCP/IP协议。

SSL发出消息是将数据分为可管理的块、压缩、使用MAC和加密并发出加密的结果。接受消息需要解密、验证、解压和重组,再把结果发往更高一层的客户。以下是两个主要协议的论述和分析。

1) 记录协议:具体实现压缩/解压缩、加密/解密、计算机MAC等与安全有关的操作。建立之上的还有:

更改密码说明协议:此协议由一条消息组成,可由客户端或服务器发送,通知接收方后面的记录将被新协商的密码说明和密钥保护,接收方得此消息后,立即指示记录层把即将读状态变成当前读状态,发送方发送此消息后,应立即指示记录层把即将写状态变成当前写状态。

警告协议:警告消息传达消息的严重性并描述警告。一个致命的警告将立即终止连接。与其他消息一样,警告消息在当前状态下被加密和压缩。警告消息有以下几种:

关闭通知消息、意外消息、错误记录MAC消息、解压失败消息、握手失败消息、无证书消息、错误证书消息、不支持的证书消息、证书撤回消息、证收过期消息、证书未知和参数非法消息等等。

应用数据协议:将应用数据直接传递给记录协议。

SSL记录协议原理如图2所示。

2) 握手协议:SSL握手协议是用来在客户端和服务器端传输应用数据而建立的安全通信机制。

—算法协商:首次通信时,双方通过握手协议协商密钥加密算法,包括数据加密算法和文摘算法。

—身份验证:在密钥协商完成后,客户端与服务器端通过证书交换,互相验证对方的身份,一般通过目录服务器的L DAP查询完成。

—确定密钥:最后使用协商好的密钥交换算法产生一个只有双方知道的秘密信息,客户端和服务器各自根据这个秘密信息确定数据加密算法的参数(一般是对称密钥)。

由此可见,SSL协议是端对端的通信安全协议,即数字通信安全管道。

4SSL协议的实现工作过程

4.1 SSL通信过程

基于OpenSSL的程序可以被分为两个部分:客户机和服务器,使用SSL协议使通信双方可以相互验证对方身份的真实性,并且能够保证数据的完整性和机密性。建立SSL通信的过程如图3所示。

SSL通信模型采用标准的C/S结构,除了在TCP层上进行传输之外,与普通的网络通信协议没有太大的区别,基于OpenSSL的程序都要遵循以下几个步骤:

1) OpenSSL初始化

在使用OpenSSL之前,必须进行相应的协议初始化工作,这可以通过下面的函数实现:

int SSL_library_int(void);

2) 选择会话协议

在利用OpenSSL开始SSL会话之前,需要为客户端和服务器制定本次会话采用的协议,目前能够使用的协议包括TLSv1.0、SSLv2、SSLv3、SSLv2/v3。

需要注意的是,客户端和服务器必须使用相互兼容的协议,否则SSL会话将无法正常进行。

3) 创建会话环境

在OpenSSL中创建的SSL会话环境称为CTX,使用不同的协议会话,其环境也不一样的。申请SSL会话环境的OpenSSL函数是:

SSL_CTX *SSL_CTX_new(SSL_METHOD * method);

当SSL会话环境申请成功后,还要根据实际的需要设置CTX的属性,通常的设置是指定SSL握手阶段证书的验证方式和加载自己的证书。制定证书验证方式的函数是:

int SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int(*verify_callback),int(X509_STORE_CTX *));

为SSL会话环境加载CA证书的函数是:

SSL_CTX_load_verify_location(SSL_CTX *ctx,const char *Cafile,const char *Capath);

为SSL会话加载用户证书的函数是:

SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file,int type);

为SSL会话加载用户私钥的函数是:

SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx,const char* file,int type);

在将证书和私钥加载到SSL会话环境之后,就可以调用下面的函数来验证私钥和证书是否相符:

int SSL_CTX_check_private_key(SSL_CTX *ctx);

4) 建立SSL套接字

SSL套接字是建立在普通的TCP套接字基础之上,在建立SSL套接字时可以使用下面的一些函数:

SSL *SSl_new(SSL_CTX *ctx);

//申请一个SSL套接字

int SSL_set_fd(SSL *ssl,int fd);)

//绑定读写套接字

int SSL_set_rfd(SSL *ssl,int fd);

//绑定只读套接字

int SSL_set_wfd(SSL *ssl,int fd);

//绑定只写套接字

5) 完成SSL握手

在成功创建SSL套接字后,客户端应使用函数SSL_connect( )替代传统的函数connect( )来完成握手过程:

int SSL_connect(SSL *ssl);

而对服务器来讲,则应使用函数SSL_ accept ( )替代传统的函数accept ( )来完成握手过程:

int SSL_accept(SSL *ssl);

握手过程完成之后,通常需要询问通信双方的证书信息,以便进行相应的验证,这可以借助于下面的函数来实现:

X509 *SSL_get_peer_certificate(SSL *ssl);

该函数可以从SSL套接字中提取对方的证书信息,这些信息已经被SSL验证过了。

X509_NAME *X509_get_subject_name(X509 *a);

该函数得到证书所用者的名字。

6) 进行数据传输

当SSL握手完成之后,就可以进行安全的数据传输了,在数据传输阶段,需要使用SSL_read( )和SSL_write( )来替代传统的read( )和write( )函数,来完成对套接字的读写操作:

int SSL_read(SSL *ssl,void *buf,int num);

int SSL_write(SSL *ssl,const void *buf,int num);

7) 结束SSL通信

当客户端和服务器之间的数据通信完成之后,调用下面的函数来释放已经申请的SSL资源:

int SSL_shutdown(SSL *ssl);

//关闭SSL套接字

void SSl_free(SSL *ssl);

//释放SSL套接字

void SSL_CTX_free(SSL_CTX *ctx);

//释放SSL会话环境

4.2 SSL握手协议的工作过程

SSL协议的工作过程主要就是握手协议的工作过程。下面我们重点讲述握手协议的工作过程。图4是握手协议简化的握手顺序。

SSL协议具体握手过程描述如下:

—客户Client端发送ClientHello信息给服务器Server端,Server回答ServerHello。这个过程建立的安全参数包括协议版本、“佳话”标识、加密算法、压缩方法。另外,还交换两个随机数:ClientHello.Random和ServerHello.Random.用以计算机“会话主密钥”。

—Hello消息发送完后,Server会发送它的证书和密钥交换信息,如果Server端被认证,它就会请求Client端的证书,在验证以后,Server就发送H elloDone消息以示达成了握手协议,即双方握手接通。

—Server请求Client证书时,Client要返回证书或返回“没有证书的指示,这种情况用于单向认证,即客户端没有装证书,然后Client发送密钥交换消息。

—服务器Server此时要回答“握手完成“消息(Finished),以示完整的握手消息交换已经全部完成。

—握手协议完成后,Client端即可与Server端传输应用加密数据,应用数据加密一般是用第②步密钥协商时确定的对称加/解密密钥,如DE S、3DE等等,目前商用加密强度为128位。非对称密钥一般为RAS,商用强度1024位,用于证书的验证。

5 总结

SSL协议很好的解决了Internet上信息的安全传输,弥补了TCP/IP协议的不足,使得我们在网络上传输数据得到安全保障。SSL协议虽然得到了广泛的应用,但是它也存在了很多不足。SSL协议中引入了很多安全机制,如非对称密钥交换、数据加密、消息认证码MAC、身份认证等,因为用以保护数据的所有加密密钥都是通过masterSecret来产生的,故协议的所有安全几乎都依赖于masterSecret的保密,如果某个会话的masetrSecert被攻破的话,这个会话就会完全暴露于攻击之下。而且SSL协议不提供交易的不可抵赖性。对于电子商务应用来说,使用SSL可保证信息的真实性、完整性和保密性。但由于SSL不对应用层的消息进行数字签名,因此不能提供交易的不可否认性,这是 SSL在电子商务中使用的最大不足。有鉴于此,网景公司在从Communicator 4.04版开始的所有浏览器中引入了一种被称作"表单签名(Form Signing)"的功能,在电子商务中,可利用这一功能来对包含购买者的订购信息和付款指令的表单进行数字签名,从而保证交易信息的不可否认性。综上所述,在电子商务中采用单一的SSL协议来保证交易的安全是不够的,但采用"SSL+表单签名"模式能够提供较好的安全性保证。

参考文献:

[1] 顾兵.VPN技术在企业中的应用[J].中国海洋平台,2003(1):44-46.

[2] 懂洪伟,冯斌,杨开荞.VPN关键技术探讨[J].计算机工程,2002(11):159-161,177.

[3] Eric R.SSL and TLS Designing and Building Secure Systems[M].崔凯,译.北京:中国电力出版社,2002.

[4] 李均锐,戴宗坤,李哲,宋成勇.SSL协议及其安全性分析[J].信息安全与通信保密,2004(6):28-30.

[5] 李海成.解析SSL握手协议[J].鞍山师范学院学报,2005(2):64-66.

推荐访问: 协议 分析 SSL