Chinaunix首页 | 论坛 | 博客
  • 博客访问: 157837
  • 博文数量: 25
  • 博客积分: 271
  • 博客等级: 二等列兵
  • 技术积分: 285
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-16 17:12
文章分类

全部博文(25)

文章存档

2013年(10)

2012年(15)

我的朋友

分类: 网络与安全

2012-05-22 11:16:40

TLS(Transfer Layer Secure)是SSl的后续版本TLS1.0相当于SSl3.1。
是一种基于tcp的加密接口。
项目中用到tls,在使用中碰到了两个奇怪的问题。记录一下这两个问题:
1、客户端连接服务器有时候成功有时候失败。
2、客户端发送请求时有时候会失败。

先说一下场景,我们使用的是服务器验证模式,socket类型为非阻塞,第一个问题的原因为SSL_connect返回-1,这时候不能够当做失败返回,要重新去连接:

点击(此处)折叠或打开

  1.                tls->ssl = SSL_new (tls->ctx);
  2.                if(NULL == tls->ssl)
  3.                 {
  4.                     LOG("TLS SSL_new failed.\n");
  5.                     return SIMO_FALSE;
  6.                 }
  7.                SSL_set_fd (tls->ssl, socket);
  8.                tls->fd = socket;
  9.                while (-1 == SSL_connect (tls->ssl))
  10.                 {
  11.                     if (SSL_get_error(tls->ssl, -1) == SSL_ERROR_WANT_READ)
  12.                         continue;
  13.                     else
  14.                         return SIMO_FALSE;
  15.                 }
第二个问题也和第一个类似的原因,SSL_write时返回SSL_ERROR_WANT_WRITE时要重写数据。

开发过程中还碰到一个ssl3_write_pending:bad write retry错误,这个错误一开始也是偶然出现,但出现之后会一直存在。开始还以为是bug,后来发现是tcp连接断开了。

阅读(3546) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~