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

 

  二、证书文件生成
 
  除将程序编译成功外,还需生成必要的证书和私钥文件使双方能够成功验证对方,步骤如下:
 
  1. 首先要生成服务器端的私钥(key文件):

  openssl genrsa -des3 -out server.key 1024

  运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文 件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!

  去除key文件口令的命令:

  openssl rsa -in server.key -out server.key
 
  2. openssl req -new -key server.key -out server.csr

  生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其指示一步一步输入要 求的个人信息即可.
 
  3. 对客户端也作同样的命令生成key及csr文件:

  openssl genrsa -des3 -out client.key 1024
  openssl req -new -key client.key -out client.csr

 
  4. CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.

  首先生成CA的key文件:

  openssl -des3 -out ca.key 1024

  在生成CA自签名的证书:

  openssl req -new -x509 -key ca.key -out ca.crt

  如果想让此证书有个期限,如一年,则加上"-days 365".
  ("如果非要为这个证书加上一个期限,我情愿是..一万年")
 
  5.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:

  可以用openssl中CA系列命令,但不是很好用(也不是多难,唉,一言难尽),一篇文章中推荐用mod_ssl中的sign.sh脚本,试了一下,确实方便了不 少,如果ca.csr存在的话,只需:

  ./sigh.sh server.csr
  ./sign.sh client.csr

  相应的证书便生成了(后缀.crt).
 
  现在我们所需的全部文件便生成了.
 
  其实openssl中还附带了一个叫CA.pl的文件(在安装目录中的misc子目录下),可用其生成以上的文件,使用也比较方便,但此处就不作介绍了.
 
  三、需要了解的一些函数
 
  1. int SSL_CTX_set_cipher_list(SSL_CTX *,const char *str);

  根据SSL/TLS规范,在ClientHello中,客户端会提交一份自己能够支持的加密方法的列表,由服务端选择一种方法后在ServerHello中通知服务端, 从而完成加密算法的协商.
 
  可用的算法为:

  EDH-RSA-DES-CBC3-SHA
  EDH-DSS-DES-CBC3-SHA
  DES-CBC3-SHA
  DHE-DSS-RC4-SHA
  IDEA-CBC-SHA
  RC4-SHA
  RC4-MD5
  EXP1024-DHE-DSS-RC4-SHA
  EXP1024-RC4-SHA
  EXP1024-DHE-DSS-DES-CBC-SHA
  EXP1024-DES-CBC-SHA
  EXP1024-RC2-CBC-MD5
  EXP1024-RC4-MD5
  EDH-RSA-DES-CBC-SHA
  EDH-DSS-DES-CBC-SHA
  DES-CBC-SHA
  EXP-EDH-RSA-DES-CBC-SHA
  EXP-EDH-DSS-DES-CBC-SHA
  EXP-DES-CBC-SHA
  EXP-RC2-CBC-MD5
  EXP-RC4-MD5

  这些算法按一定优先级排列,如果不作任何指定,将选用DES-CBC3-SHA.用SSL_CTX_set_cipher_list可以指定自己希望用的算法(实际上只是 提高其优先级,是否能使用还要看对方是否支持).
 
  我们在程序中选用了RC4做加密,MD5做消息摘要(先进行MD5运算,后进行RC4加密).即

  SSL_CTX_set_cipher_list(ctx,"RC4-MD5");
 
  在消息传输过程中采用对称加密(比公钥加密在速度上有极大的提高),其所用秘钥(shared secret)在握手过程中中协商(每次对话过程均不同, 在一次对话中都有可能有几次改变),并通过公钥加密的手段由客户端提交服务端.

--
※ 链接: http://www.sqlite.com.cn/POParticle/16/169.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 进行
·使用 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 $