SSL_connect()没有返回

时间:2014-06-19 09:44:54

标签: c sockets ssl openssl client

我正在尝试使用SSL创建服务器 - 客户端程序。我在使用SSL_connect()时有点麻烦:当我调用它时,它不会再次返回,只是挂起,客户端程序一直运行,服务器停止等待握手完。一旦我终止客户端进程,服务器会说安全连接失败,所以我几乎100%确定它不是服务器的错,因为它等待连接,并试图通常接受它(SSL_accept())。

此外,当我的客户端调用SSL_connect()时,它会在我的标准输出上打印很多垃圾字符,不知道原因。

这是我的连接功能的代码:

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

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

printf("We have no problem until here\n");

if((debug = SSL_connect(sslconnection)) == 1){
    printf("You won't see this, it's hanged\n");
    return sslconnection;
}
printf("Neither will you see this\n");

当然,CTX和socketd先前已初始化。 在此先感谢,伙计们,欢迎任何帮助!

编辑:如果我使用SSLv23_method()创建我的SSL上下文,当客户端挂起时,如果我按下'输入'几次,它会在终端上显示这条消息:

error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

否则,如果我使用SSLv3_method(),请按'输入'会给我这个消息:

error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

我猜我的客户端 - 服务器程序的SSL版本存在问题,这很奇怪,因为他们使用相同的函数来初始化他们自己的SSL_ctx,因此他们使用相同的SSLvX_method()来创建上下文,所以对我来说没理由他们不了解对方的SSL版本...

1 个答案:

答案 0 :(得分:0)

如果它可以帮助那些人:就像Steffen所说的那样,我正在使用SSL_connect()这是一个错误的套接字描述符。我在代码的某些方面弄乱了描述符。