【发布时间】:2014-08-09 19:29:14
【问题描述】:
我正在尝试使用 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 上下文,当客户端挂起时,如果我按 'enter' 几次,它会在终端上显示此消息:
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 版本……
【问题讨论】:
-
Stack Overflow 上有一些“SSL_connect hang”问题。也许其中之一可以帮助您:ssl_connect hang site:stackoverflow.com.
-
如果您在按 Enter 时遇到 SSL 错误,您可能附加了带有 SSL_set_fd 的 stdin(例如文件描述符 0),而不是连接到另一侧的 fd。在调用 SSL_connect 之前,请检查 socketfd 是否真的是您连接的套接字。
-
尴尬:我给我的连接函数一个随机初始化的未使用的 int 作为套接字,而不是我为它打开的那个,我从服务器文件复制然后修改的代码的产物.. .非常感谢Steffen,你救了我!
标签: c sockets ssl openssl client