linux openssl基础介绍

 更新时间:2008年03月15日 18:45:07   作者:  
随着计算机网络技术的发展,方便快捷的互连网使人们渐渐习惯了从Web页上收发E-mail、购物和交易,这时Web页面上需要传输重要或敏感的数据,例如用户的银行帐户、密码等,所以网络安全就成为现代计算机网络应用急需解决的问题。

    现行网上银行和电子商务等大型的网上交易系统普遍采用HTTP和SSL相结合的方式。服务器端采用支持SSL的Web服务器,用户端采用支持SSL的浏览器实现安全通信。 
    SSL是Secure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准,目前已有3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。目前,利用公开密钥技术的SSL协议,已成为Internet上保密通讯的工业标准。本文着重在SSL协议和SSL程序设计两方面谈谈作者对SSL的理解。 
SSL协议初步介绍 
    安全套接层协议能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。 
通过以上叙述,SSL协议提供的安全信道有以下三个特性: 
1.数据的保密性 
信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密匙来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密匙要用一个安全的方法传送。加密过的数据可以公开地传送。 
2.数据的一致性 
加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。 
3.安全验证 
加密的另外一个用途是用来作为个人的标识,用户的密匙可以作为他的安全验证的标识。 
    SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。目前,大部分的Web 服务器及浏览器都广泛支持SSL 技术。当浏览器试图连接一个具有SSL认证加密的服务器时,就会唤醒一个SSL会话,浏览器检查认证,必须具备下面三个条件: 
1)有一个权威机构发放证书,当然可以创建自我签订的证书(x509 结构)。 
2)证书不能过期。 
3)证书是属于它所连接的服务器的。 
    只有全部具备了这三个条件,浏览器才能成功完成认证。通过这三个条件,用户能确认其浏览器连接到正确的服务器,而不是连接到一些想盗取用户密码等重要信息的虚假的服务器上。 
    在当今的电子商务中还有一项被广泛使用的安全协议是SET协议。SET(Secure Electronic Transaction,安全电子交易)协议是由VISA和MasterCard两大信用卡公司于1997年5月联合推出的规范。SET能在电子交易环节上提供更大的信任度、更完整的交易信息、更高的安全性和更少受欺诈的可能性。SET交易分三个阶段进行:用户向商家购物并确定支付;商家与银行核实;银行向商家支付货款。每个阶段都涉及到RSA对数据加密,以及RSA数字签名。使用SET协议,在一次交易中,要完成多次加密与解密操作,故有很高的安全性,但SET协议比SSL协议复杂,商家和银行都需要改造系统以实现互操作。 
在Linux 下,比较流行支持SSL认证的是OpenSSL服务器。OpenSSL项目是一个合作的项目,开发一个健壮的、商业等级的、完整的开放源代码的工具包,用强大的加密算法来实现安全的Socket层(Secure Sockets Layer,SSL v2/v3)和传输层的安全性(Transport Layer Security,TLS v1)。这个项目是由全世界的志愿者管理和开发OpenSSL工具包和相关文档。 
     如何在Linux下配置OpenSSL服务器,首先从OpenSSL的主页()上下载openssl-version.tar.gz软件包来编译安装,与Apache服务器配合可以建立支持SSL的Web服务器,并可以使用自我签订的证书做认证,关于如何编译、安装OpenSSL服务器,可以参考一下OpenSSL HOWTO文档。 
SSL 程序设计初步介绍 
    SSL 通讯模型为标准的C/S 结构,除了在 TCP 层之上进行传输之外,与一般的通讯没有什么明显的区别。在这里,我们主要介绍如何使用OpenSSL进行安全通讯的程序设计。关于OpenSSL 的一些详细的信息请参考OpenSSL的官方主页 。 
在使用OpenSSL前,必须先对OpenSSL 进行初始化,以下的三个函数任选其一: 
SSL_library_init(void); 
OpenSSL_add_ssl_algorithms(); 
SSLeay_add_ssl_algorithms(); 
事实上 后面的两个函数只是第一个函数的宏。 
如果要使用OpenSSL的出错信息,使用SSL_load_error_strings (void)进行错误信息的初始化。以后可以使用void ERR_print_errors_fp(FILE *fp) 打印SSL的错误信息。 
一次SSL连接会话一般要先申请一个SSL 环境,基本的过程是: 
1. SSL_METHOD* meth = TLSv1_client_method(); 创建本次会话连接所使用的协议,如果是客户端可以使用 
SSL_METHOD* TLSv1_client_method(void); TLSv1.0 协议 
SSL_METHOD* SSLv2_client_method(void); SSLv2 协议 
SSL_METHOD* SSLv3_client_method(void); SSLv3 协议 
SSL_METHOD* SSLv23_client_method(void); SSLv2/v3 协议 
服务器同样需要创建本次会话所使用的协议: 
SSL_METHOD *TLSv1_server_method(void); 
SSL_METHOD *SSLv2_server_method(void); 
SSL_METHOD *SSLv3_server_method(void); 
SSL_METHOD *SSLv23_server_method(void); 
需要注意的是客户端和服务器需要使用相同的协议。 
2.申请SSL会话的环境 CTX,使用不同的协议进行会话,其环境也是不同的。申请SSL会话环境的OpenSSL函数是 
SSLK_CTX* SSL_CTX_new (SSL_METHOD*); 参数就是前面我们申请的 SSL通讯方式。返回当前的SSL 连接环境的指针。 
然后根据自己的需要设置CTX的属性,典型的是设置SSL 握手阶段证书的验证方式和加载自己的证书。 
void SSL_CTX_set_verify (SSL_CTX* , int , int* (int, X509_STORE_CTX*) ) 
设置证书验证的方式。 
第一个参数是当前的CTX 指针,第二个是验证方式,如果是要验证对方的话,就使用 SSL_VERIFY_PEER。不需要的话,使用SSL_VERIFY_NONE.一般情况下,客户端需要验证对方,而服务器不需要。第三个参数是处理验证的回调函数,如果没有特殊的需要,使用空指针就可以了。 
void SSL_CTX_load_verify_locations(SSL_CTX*, const char* , const char*); 
加载证书; 
第一个参数同上,参数二是证书文件的名称,参数三是证书文件的路径; 
int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); 
加载本地的证书;type 指明证书文件的结构类型;失败返回-1 
int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); 
加载自己的私钥;type 参数指明私钥文件的结构类型;失败返回-1 
加载了证书和文件之后,就可以验证私钥和证书是否相符: 
BOOl SSL_CTX_check_private_key (SSL_CTX*); 
3.既然SSL 使用TCP 协议,当然需要把SSL attach 到已经连接的套接字上了: 
SSL* SSL_new (SSL_CTX*); 申请一个SSL 套节字; 
int SSL_set_rfd (SSL*); 绑定只读套接字 
int SSL_set_wfd (SSL*); 绑定只写套接字 
int SSL_set_fd ( SSL*); 绑定读写套接字 
绑定成功返回 1, 失败返回0; 
4. 接下来就是SSL 握手的动作了 
int SSL_connect (SSL*); 失败返回 -1 
5. 握手成功之后,就可以进行通讯了,使用SSL_read 和SS_write 读写SSL 套接字代替传统的read 、write 
int SSL_read (SSL *ssl, char *buf, int num ); 
int SSL_write (SSL *ssl, char *buf, int num); 
如果是服务器,则使用 SSL_accept 代替传统的 accept 调用 
int SSL_accept(SSL *ssl); 
6. 通讯结束,需要释放前面申请的 SSL资源 
int SSL_shutdown(SSL *ssl); 关闭SSL套接字; 
void SSL_free (ssl); 释放SSL套接字; 
void SSL_CTX_free (ctx); 释放SSL环境; 
    OpenSSL 虽然已经发展到了0.9.96版本,但是它的文档还很少,甚至连最基本的man 函数手册都没有完成。所以,本文紧紧是讲述了使用OpenSSL 进行程序设计的框架。更加详细的资料可以参考OpenSSL 的文档或者 Apache mod_ssl 的文档。 
    通过以上的介绍,我想读者对SSL协议已经有了一定的了解,作者有机会将会继续给大家介绍SSL协议的其他方面的内容。 
(作者:张云帆)

相关文章

  • some new eigrp feature

    some new eigrp feature

    some new eigrp feature...
    2007-04-04
  • win2003 iis6 Rewrite权限设置问题 解决了 大家共享 2003NTFS用户 你不看肯定开不开

    win2003 iis6 Rewrite权限设置问题 解决了 大家共享 2003NTFS用户 你不看肯定开不开

    win2003 iis6 Rewrite权限设置问题 解决了 大家共享 2003NTFS用户 你不看肯定开不开...
    2007-07-07
  • Web服务器日志统计分析完全解决方案

    Web服务器日志统计分析完全解决方案

    请注意本文已刊载在《开放系统世界》2003年第二期,该文章版权属于该杂志所有,请勿随意转载,转载请保留该声明摘要:对于所有的ICP来说,除了保证网站稳定正常运行以外,一个重要的问题就是网站访问量的统计和分析报表,这对于了解和监控网站的运行状态,对提高各个网站的服务能力和服务水平是必不可少的。通过对Web服务器的日志文件进行分析和统计,能够有效掌握系统运行情况以及网站内容的受访问情况、加强对整个网站及其内容的维护与管理。本文对Web服务器日志分析的原理和技术进行讨论。
    2008-03-03
  • Apache服务器配置全攻略

    Apache服务器配置全攻略

      Apache服务器的设置文件位于/usr/local/apache/conf/目录下,传统上使用三个配置文件httpd.conf,access.conf和srm.conf,来配置Apache服务器的行为。httpd.conf提供了最基本的服务器配置,是对守护程序httpd如何运行的技术描述;srm.conf是服务器的资源映射文件,告诉服务器各种文件的MIME类型,以及如何支持这些文件;access.conf用于配置服务器的访问权限,控制不同用户和计算机的访问限制;这三
    2008-03-03
  • IIS配置文件后门的方法

    IIS配置文件后门的方法

    IIS配置文件后门的方法...
    2007-06-06
  • ISA Server 的故障排除工具(3)

    ISA Server 的故障排除工具(3)

    ISA Server 的故障排除工具(3)...
    2007-01-01
  • Windows 2003 IIS 6.0 搭建可建虚拟机的asp+.net+php+jsp+mysql+mssql

    Windows 2003 IIS 6.0 搭建可建虚拟机的asp+.net+php+jsp+mysql+mssql

    Windows 2003 IIS 6.0 搭建可建虚拟机的asp+.net+php+jsp+mysql+mssql...
    2007-05-05
  • Linux Apache Web 服务器(续三)

    Linux Apache Web 服务器(续三)

    八、建立Apache站点的基本安全机制 对于WWW服务来说,在WWW服务器和WWW浏览器之间并不始终维持对话过程。办要WWW服务器完成对一个URL请求的服务,连接就断开了
    2008-03-03
  • 用IIS建立高安全性Web服务器的方法

    用IIS建立高安全性Web服务器的方法

    用IIS建立高安全性Web服务器的方法...
    2007-03-03
  • Exchange2000系统建设及规划

    Exchange2000系统建设及规划

    Exchange2000系统建设及规划...
    2006-10-10

最新评论