SSL_accept()不起作用

时间:2014-06-18 14:44:30

标签: c sockets ssl openssl eof

我已经研究了一段时间了,并没有在任何地方看到我完全相同的问题。我只是遇到一个特定的,非常简单的问题:每当我的echo_server尝试运行SSL_accept()函数时,它都不会阻止服务器等待客户端连接,函数将只返回0,并且如果我进入SSL_get_error(),它会给我SSL_ERROR_SYSCALL,所以我猜测问题是,引用手册,"观察到违反协议的EOF。 #34;

真相是我不知道这意味着什么,而且它变得非常令人沮丧,因为我觉得我错过了一些非常简单的事情,但我不知道是什么。

这是我的接受函数的代码(先前已初始化SSL_ctx并打开套接字):

SSL * sslconnection;

if((sslconnection = SSL_new(ctx)) == NULL){
    return NULL;
}

if(SSL_set_fd(sslconnection, socketd) != 1){
    return NULL;
}

if(SSL_accept(sslconnection) != 1){
    return NULL;
}

return sslconnection;

另外,我试图用" openssl verify -verbose -purpose sslserver -CAfile' CACertificate'来检查我的证书。 ' ServerCertificate'",但它会说我的服务器证书没问题。

欢迎任何帮助,提前谢谢。希望它是一个非常愚蠢的东西,我只是如此混淆,我无法看到它。

1 个答案:

答案 0 :(得分:4)

  

每当我的echo_server尝试运行SSL_accept()函数时,它都不会阻止等待客户端连接的服务器

SSL_accept不会为您致电accept。它预计accept已被调用。

正确的通话顺序是:

  1. socket
  2. bind
  3. listen
  4. accept
  5. SSL_new
  6. SSL_set_fd
  7. SSL_accept
  8. https://www.openssl.org/source/下载openssl来源,并查看demos / ssl / serv.cpp。