我是一个学生,对于openssl使用熟练程度很低,在使用ssl协议建立连接时出现了这种报错:SSL connection failed:sslv3 alert handshake failure,上百度查了很多东西,思考了一天,也还是不能解决这个问题,下面是c语言初始化ssl的过程:
//初始化SSL接口
int init_SSL(int tcp_fd, SSL **ssl, SSL_CTX **ctx)
{
int n, ret;
/* 初始化https的SSL加密协议 */
//加载错误字符串资源
SSL_load_error_strings();
//初始化SSL库
SSL_library_init();
//新建SSL会话
*ctx = SSL_CTX_new(SSLv23_client_method());
if (*ctx == NULL)
{
fprintf(stderr, "init SSL CTX failed:%s\n",
ERR_reason_error_string(ERR_get_error()));
return -1;
}
//根据会话新建SSL加密
*ssl = SSL_new(*ctx);
if (*ssl == NULL)
{
fprintf(stderr, "new SSL with created CTX failed:%s\n",
ERR_reason_error_string(ERR_get_error()));
return -1;
}
//绑定文件描述符,tcp_fd是连接完服务器的文件描述符
ret = SSL_set_fd(*ssl, tcp_fd);
if (ret == 0)
{
fprintf(stderr, "add SSL to tcp socket failed:%s\n",
ERR_reason_error_string(ERR_get_error()));
return -1;
}
//错误出现在这里的,和目标服务器已经建立tcp连接了,但是ssl不行
/* 利用SSL加密连接服务器 */
ret = SSL_connect(*ssl);
if (ret != 1)
{
fprintf(stderr, "SSL connection failed:%s\n",
ERR_reason_error_string(ERR_get_error()));
return -1;
}
return 0;
}
注:linux上命令行get请求访问该api没有什么问题(有返回的json代码),这部分代码访问其他的api建立ssl也没有问题。
系统:ubuntu16.04
openssl version : OpenSSL 1.1.1s 1 Nov 2022
希望你们可以帮我解决问题,我将不胜感激!