| 
		      
                         
  一、简介 
  SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是IETF的TLS 工作组在SSL3.0基础之上提出的安全通信标准,目前版本是1.0,即RFC2246.SSL/TLS提供的安全机制可以保证应用层数据在互联网络传输不 被监听,伪造和窜改.     openssl(www.openssl.org)是sslv2,sslv3,tlsv1的一份完整实现,内部包含了大量加密算法程序.其命令行提供了丰富的加密,验证,证书生成等功 能,甚至可以用其建立一个完整的CA.与其同时,它也提供了一套完整的库函数,可用开发用SSL/TLS的通信程序. Apache的https两种版本 mod_ssl和apachessl均基于它实现的.openssl继承于ssleay,并做了一定的扩展,当前的版本是0.9.5a.     openssl的缺点是文档太少,连一份完整的函数说明都没有,man page也至今没做完整:-(,如果想用它编程序,除了熟悉已有的文档(包括 ssleay,mod_ssl,apachessl的文档)外,可以到它的maillist上找相关的帖子,许多问题可以在以前的文章中找到答案.     编程: 
  程序分为两部分,客户端和服务器端,我们的目的是利用SSL/TLS的特性保证通信双方能够互相验证对方身份(真实性),并保证数据的完整性, 私密性.     1. 客户端程序的框架为: 
  /*生成一个SSL结构*/   meth = SSLv23_client_method();   ctx = SSL_CTX_new (meth);    ssl = SSL_new(ctx);     /*下面是正常的socket过程*/   fd = socket();   connect();     /*把建立好的socket和SSL结构联系起来*/   SSL_set_fd(ssl,fd);     /*SSL的握手过程*/   SSL_connect(ssl);     /*接下来用SSL_write(), SSL_read()代替原有的write(),read()即可*/   SSL_write(ssl,"Hello world",strlen("Hello World!"));     2. 服务端程序的框架为: 
  /*生成一个SSL结构*/   meth = SSLv23_server_method();   ctx = SSL_CTX_new (meth);    ssl = SSL_new(ctx);     /*下面是正常的socket过程*/   fd = socket();   bind();   listen();   accept();     /*把建立好的socket和SSL结构联系起来*/   SSL_set_fd(ssl,fd);     /*SSL的握手过程*/   SSL_connect(ssl);     /*接下来用SSL_write(), SSL_read()代替原有的write(),read()即可*/   SSL_read (ssl, buf, sizeof(buf));     根据RFC2246(TLS1.0)整个TLS(SSL)的流程如下: 
  Client                                                Server      ClientHello                   -------->                                                    ServerHello                                                   Certificate*                                             ServerKeyExchange*                                            CertificateRequest*                                <--------       ServerHelloDone   Certificate*   ClientKeyExchange   CertificateVerify*   [ChangeCipherSpec]   Finished                      -------->                                             [ChangeCipherSpec]                                <--------              Finished   Application Data              <------->      Application Data      对程序来说,openssl将整个握手过程用一对函数体现,即客户端的SSL_connect和服务端的SSL_accept.而后的应用层数据交换则用SSL_read和 SSL_write来完成. 
-- ※ 链接: http://www.sqlite.com.cn/POParticle/16/168.Html 
		      
		      
		      
		      
		      
		      
                      
		      
		        
		      
		     |