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

  2. void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*callback)(int, X509_STORE_CTX *));

  缺省mode是SSL_VERIFY_NONE,如果想要验证对方的话,便要将此项变成SSL_VERIFY_PEER.SSL/TLS中缺省只验证server,如果没有设置 SSL_VERIFY_PEER的话,客户端连证书都不会发过来.

  3. int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,const char *CApath);

  要验证对方的话,当然装要有CA的证书了,此函数用来便是加载CA的证书文件的.

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

  加载自己的证书文件.

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

  加载自己的私钥,以用于签名.

  6. int SSL_CTX_check_private_key(SSL_CTX *ctx);

  调用了以上两个函数后,自己检验一下证书与私钥是否配对.

  7. void RAND_seed(const void *buf,int num);

  在win32的环境中client程序运行时出错(SSL_connect返回-1)的一个主要机制便是与UNIX平台下的随机数生成机制不同(握手的时候用的到). 具体描述可见mod_ssl的FAQ.解决办法就是调用此函数,其中buf应该为一随机的字符串,作为"seed".

  还可以采用一下两个函数:

  void RAND_screen(void);
  int RAND_event(UINT, WPARAM, LPARAM);

  其中RAND_screen()以屏幕内容作为"seed"产生随机数,RAND_event可以捕获windows中的事件(event),以此为基础产生随机数.如果一直有 用户干预的话,用这种办法产生的随机数能够"更加随机",但如果机器一直没人理(如总停在登录画面),则每次都将产生同样的数字.

  这几个函数都只在WIN32环境下编译时有用,各种UNIX下就不必调了.
  大量其他的相关函数原型,见crypto\rand\rand.h.

  8. OpenSSL_add_ssl_algorithms()或SSLeay_add_ssl_algorithms()

  其实都是调用int SSL_library_init(void)
  进行一些必要的初始化工作,用openssl编写SSL/TLS程序的话第一句便应是它.

  9. void SSL_load_error_strings(void );

  如果想打印出一些方便阅读的调试信息的话,便要在一开始调用此函数.

  10.void ERR_print_errors_fp(FILE *fp);

  如果调用了SSL_load_error_strings()后,便可以随时用ERR_print_errors_fp()来打印错误信息了.

  11.X509 *SSL_get_peer_certificate(SSL *s);

  握手完成后,便可以用此函数从SSL结构中提取出对方的证书(此时证书得到且已经验证过了)整理成X509结构.

  12.X509_NAME *X509_get_subject_name(X509 *a);

  得到证书所有者的名字,参数可用通过SSL_get_peer_certificate()得到的X509对象.

  13.X509_NAME *X509_get_issuer_name(X509 *a)

  得到证书签署者(往往是CA)的名字,参数可用通过SSL_get_peer_certificate()得到的X509对象.

  14.char *X509_NAME_oneline(X509_NAME *a,char *buf,int size);

  将以上两个函数得到的对象变成字符型,以便打印出来.

  15.SSL_METHOD的构造函数,包括

  SSL_METHOD *TLSv1_server_method(void);    /* TLSv1.0 */
  SSL_METHOD *TLSv1_client_method(void);    /* TLSv1.0 */

  SSL_METHOD *SSLv2_server_method(void);    /* SSLv2 */
  SSL_METHOD *SSLv2_client_method(void);    /* SSLv2 */

  SSL_METHOD *SSLv3_server_method(void);    /* SSLv3 */
  SSL_METHOD *SSLv3_client_method(void);    /* SSLv3 */

  SSL_METHOD *SSLv23_server_method(void);    /* SSLv3 but can rollback to v2 */
  SSL_METHOD *SSLv23_client_method(void);    /* SSLv3 but can rollback to v2 */

  在程序中究竟采用哪一种协议(TLSv1/SSLv2/SSLv3),就看调哪一组构造函数了.

--
※ 链接: http://www.sqlite.com.cn/POParticle/16/170.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 $