2014-06-19 52 views
1

我正在尝试使用SSL创建服务器客户端程序。我在SSL_connect()方面遇到了一些问题:当我调用它时,它不会再次返回,它只是挂在那里,客户端程序一直运行并且服务器停止等待握手完成。一旦我终止了客户端进程,服务器会说安全连接失败,所以我几乎100%肯定这不是服务器的错误,因为它等待连接,并试图正常接受它(SSL_accept())。SSL_connect()不返回

另外,当我的客户端调用SSL_connect()时,它在我的stdout上输出了很多垃圾字符,不知道为什么。

下面是我的连接函数的代码:

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(),按“ENTER”键会给我这个消息:

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

我想有一个与我的客户端 - 服务器程序,这是非常奇怪的,因为他们的SSL版本中的问题使用相同的函数进行初始化他们自己的SSL_ctx,因此他们使用相同的SSLvX_method()来创建上下文,所以他们不理解对方的SSL版本对我来说没有任何意义...

+0

Stack Overflow有几个“SSL_connect hang”问题。也许其中一个可以帮助你:[ssl_connect hang site:stackoverflow.com](http://www.google.com/search?q=ssl_connect+hang+site%3Astackoverflow.com)。 – jww

+0

如果按Enter键时出现SSL错误,则可能使用SSL_set_fd附加了标准输入(例如文件描述符0),但不是连接到另一端的fd。在调用SSL_connect之前,请检查socketfd是否是您连接的套接字。 –

+0

尴尬:我给我的连接函数一个随机初始化的未使用的int作为套接字而不是我为它打开的那个,我从服务器文件复制的代码产品,然后修改...非常感谢Steffen,你救了我! –

回答

0

如果它帮助那里的人:出来那是我用来做SSL_connect()的一个错误的套接字描述符,就像Steffen所说的那样。在代码的某处我弄乱了描述符。