TLS(Transfer Layer Secure)是SSl的后续版本TLS1.0相当于SSl3.1。
是一种基于tcp的加密接口。
项目中用到tls,在使用中碰到了两个奇怪的问题。记录一下这两个问题:
1、客户端连接服务器有时候成功有时候失败。
2、客户端发送请求时有时候会失败。
先说一下场景,我们使用的是服务器验证模式,socket类型为非阻塞,第一个问题的原因为SSL_connect返回-1,这时候不能够当做失败返回,要重新去连接:
- tls->ssl = SSL_new (tls->ctx);
- if(NULL == tls->ssl)
- {
- LOG("TLS SSL_new failed.\n");
- return SIMO_FALSE;
- }
- SSL_set_fd (tls->ssl, socket);
- tls->fd = socket;
- while (-1 == SSL_connect (tls->ssl))
- {
- if (SSL_get_error(tls->ssl, -1) == SSL_ERROR_WANT_READ)
- continue;
- else
- return SIMO_FALSE;
- }
第二个问题也和第一个类似的原因,SSL_write时返回
SSL_ERROR_WANT_WRITE时要重写数据。
开发过程中还碰到一个ssl3_write_pending:bad write retry错误,这个错误一开始也是偶然出现,但出现之后会一直存在。开始还以为是bug,后来发现是tcp连接断开了。
阅读(4207) | 评论(0) | 转发(0) |