openssl在0.9.8m及更高版本中添加了安全重新协商。我该如何处理这个案子? 在服务器中,使用非阻塞套接字,表示已完成SSL_accept。现在,服务器将检查套接字是否可读。如果它,那么有两个可能性,要么套接字变得可读,因为客户端发送了一些请求或客户端重新协商连接。 SSL_MODE_AUTO_RETRY不适用,因为我在非阻塞套接字上使用了它。 如果客户端发送了请求,则需要调用SSL_Read。如果客户端重新协商,则必须调用SSL_accept。 如果我在客户端进行重新协商时调用SSL_read,则返回SSL_ERROR_SSL。那么我该如何确定是否应该执行SSL_accept或SSL_read。再次调用SSL_read会返回相同的错误。
感谢任何输入
答案 0 :(得分:0)
我猜您正在使用C.您必须检查错误代码并在最后保持会话状态。如果案例是成功或者需要读取或者需要写入,则必须调用相应的函数。最初将状态设置为needsAccept。 accept函数将根据会话自动决定是否需要读或写。
int retCode = SSL_get_error(ssl, retNum);
switch (retCode) {
case SSL_ERROR_NONE:
return "success";
case SSL_ERROR_WANT_READ:
LOG_DEBUG("SSL_ERROR_WANT_READ");
return "needsRead";
case SSL_ERROR_WANT_WRITE:
return "needsWrite";
case SSL_ERROR_ZERO_RETURN:
case SSL_ERROR_SSL:
case SSL_ERROR_SYSCALL:
return "socket should be closed";
}