网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | 防火墙 | IDS/IPS | VPN | PKI | Honeypot | Hacker/Intruder | 黑客技术 | 破解技术 | 加密技术 | 病毒防护 | 木马 | 反垃圾邮件 | 反流氓软件 | 漏洞 | 无线安全 | UNIX | Windows | 安全编程 | 安全软件 | TPM/TCG | 数据恢复 | 企业信息安全 | 个人信息安全
 当前位置: Home > 安全编程 > 文章  
用OpenSSL编写SSL,TLS程序(1)
文章来源: www.sqlite.com.cn 文章作者: tamsyn 发布时间: 2006-07-06   字体: [ ]
 

 

  一、简介

  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

 
推荐文章
·洪水攻击原理及代码实现全攻略(
·原始套接字透析之综合实例:网络
·原始套接字透析之实现IP地址欺骗
·原始套接字透析之ARP欺骗
·原始套接字透析之实现包分析
·原始套接字透析之实现sniffer
·原始套接字透析之实现路由欺骗
·原始套接字透析之ICMP拒绝服务攻
·原始套接字透析之实现Ping
·原始套接字透析之Raw Socket基础
·黑客之旅 -- 原始套接字透析之前
·QQ尾巴病毒的Visual C++实现探讨
·安全编程: 安全地调用组件
·安全编程: 验证输入
 
 
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
热点文章
·原始套接字透析之Raw So
·原始套接字透析之ARP欺
·洪水攻击原理及代码实现
·原始套接字透析之综合实
·原始套接字透析之实现Pi
·黑客之旅 -- 原始套接字
·使用 OpenSSL API 进行
·安全编程: 警惕输入
相关分类
相关文章
·用OpenSSL编写SSL,TLS程
·用OpenSSL编写SSL,TLS程
·用OpenSSL编写SSL,TLS程
·用OpenSSL编写SSL,TLS程
·使用 OpenSSL API 进行
·安全编程: 开发安全的程
·安全编程: 最小化特权
·安全编程: 警惕输入
更多...
 
 

Copyright(c) 2001-2008 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统
$Id: article_article.html,v 1.3 2007/02/10 12:00:37 yjs Exp $