SSL_accept() 不工作

Dis*_*ame 2 c sockets ssl openssl eof

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

事实是我不知道这是什么意思,这真的很令人沮丧,因为我认为我错过了一些非常简单的东西,但我不知道是什么。

这是我的接受函数的代码(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;
Run Code Online (Sandbox Code Playgroud)

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

欢迎任何帮助,提前致谢。希望这真的很愚蠢,我只是太糊涂了,我看不到它。

Max*_*kin 6

每当我的 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

https://www.openssl.org/source/下载 openssl 源代码并查看 demos/ssl/serv.cpp。