openssl怪现象揭秘

来源:互联网 发布:防蓝光 知乎 编辑:程序博客网 时间:2024/04/28 14:01
被一个破问题折腾了2天后,于昨晚终于找出了元凶,然后遂有撞死的想法。

环境:Red Hat Enterprise Linux Server release 5.4 
Linux 2.6.18-164.11.1.el5 #1 SMP Wed Jan 6 13:26:04 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
openssl-0.9.8e-12.el5
openssl-devel-0.9.8e-12.el5

epoll水平触发模型,non-blocking socket,没有用BIO

用openssl做实现ssl加密传输功能,证书,私钥及密码都初始化好了,就是在SSL_accept时报错
error:00000005:lib(0):func(0):DH lib errno:0
SSL_accept failed 返回值 return 0 SSL_get_error return 5(SSL_ERROR_SYSCALL),errno是0

SSL_read 有时也这样

考虑了很多情况:1.openssl的多线程问题(排除)2.创建线程时的初始化参数问题pthread_attr_t(排除)3.tcpdump/tethereal抓包分析发现密钥交换正常 4.还下载了openssl的源代码编译了debug版进行跟踪(代码太深,最后放弃了,还好放弃了,要不然现在还在断点中单步那)

我靠,这是什么问题啊,经过2天并多个兄弟一起排查,都没发现问题,最后被逼无奈先写了简化版的测试程序,测试通过。看样还是原来的网络框架有猫腻,上最小代码法(就是把无关的代码全部删了)测试通过。一点一点恢复,终于在一个文件中发现了问题,原来由于某些项没有设置导致网络框架调用了shutdown(fd, SHUT_RD), 你妹啊,把socket的读关了我还交互个屁啊。

总结教训如下:

1.以后再碰到openssl莫名其妙的报错看看是不是socket的RD或WR被关掉了。
2.不能太相信tcpdump/tethereal的抓包结果,关掉RD是不会发FIN的。
3.再碰到此类无头绪的问题,尽快写测试代码,死盯着问题代码是发现不了问题的。


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(252) | 评论(0) | 转发(0) |
0

上一篇:OPENSSL 多次初始化

下一篇:DEBUG_PRINT

相关热门文章
  • WebRTC进阶-信令篇-之十四 :p...
  • 用OpenSSL编写SSL,TLS程序(4)...
  • 用OpenSSL编写SSL,TLS程序(2)...
  • 用OpenSSL编写SSL,TLS程序(1)...
  • openSSL在Win7下的编译与安装...
  • linux 常见服务端口
  • xmanager 2.0 for linux配置
  • 【ROOTFS搭建】busybox的httpd...
  • openwrt中luci学习笔记
  • 什么是shell
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
原创粉丝点击