【问题标题】:SSL_connect() not returningSSL_connect() 没有返回
【发布时间】: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


【解决方案1】:

如果它对那里的某人有帮助:正如 Steffen 所说,这是我用来执行 SSL_connect() 的错误套接字描述符。我在代码的某些地方弄乱了描述符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2023-04-06
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多