我正在尝试使用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版本...
答案 0 :(得分:0)
如果它可以帮助那些人:就像Steffen所说的那样,我正在使用SSL_connect()这是一个错误的套接字描述符。我在代码的某些方面弄乱了描述符。