我已经研究了一段时间了,并没有在任何地方看到我完全相同的问题。我只是遇到一个特定的,非常简单的问题:每当我的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'",但它会说我的服务器证书没问题。
欢迎任何帮助,提前谢谢。希望它是一个非常愚蠢的东西,我只是如此混淆,我无法看到它。
答案 0 :(得分:4)
每当我的echo_server尝试运行SSL_accept()函数时,它都不会阻止等待客户端连接的服务器
SSL_accept
不会为您致电accept
。它预计accept
已被调用。
正确的通话顺序是:
socket
bind
listen
accept
SSL_new
SSL_set_fd
SSL_accept
从https://www.openssl.org/source/下载openssl来源,并查看demos / ssl / serv.cpp。