gpt4 book ai didi

c - SSL_CTX_use_certificate_file 因 EXC_BAD_ACCESS 而失败

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:29 25 4
gpt4 key购买 nike

我最近想使用 BSD 套接字构建自己的客户端-服务器系统。一段时间后,我想包括 SSL 来加密数据传输。我关注了this教程和代码使用 Xcode 编译得很好(添加了链接器标志:-lssl -lcrypto),但是一旦程序到达 SSL_CTX_use_certificate_file() 调用,我就一直收到 EXC_BAD_ACCESS .您可以在下面看到使用的代码。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <openssl/bio.h>
#include <openssl/ssl.h>
#include <openssl/err.h>

int main(int argc, const char * argv[])
{
SSL_METHOD *method = NULL;
SSL_CTX *ctx = NULL;
OpenSSL_add_all_algorithms();
SSL_load_error_strings();
method = SSLv2_server_method();
ctx = SSL_CTX_new(method);

SSL_CTX_use_certificate_file(ctx, "/Users/steve/certificate.pem", SSL_FILETYPE_PEM);
SSL_CTX_use_PrivateKey_file(ctx, "/Users/steve/key.pem", SSL_FILETYPE_PEM);

printf("Hello, World!\n");
return EXIT_SUCCESS;
}

如果程序在指定路径找不到证书,它不会崩溃,但我当然不会有任何 SSL 加密。证书本身会不会有问题?我只是使用以下命令用 openssl 生成了一个:

# generate the key
$ openssl genrsa -out key.pem 1024

# generate request
$ openssl req -new -key key.pem -out request.pem
# fill in all the stuff ...

# generate certificate
$ openssl x509 -req -days 30 -in request.pem -signkey key.pem -out certificate.pem

有什么想法吗?

更新:在将 OS X 部署目标设置为 10.7 或更高版本的情况下进行编译时,实际上会出现一些警告,因为所有这些 SSL 内容都显示为已弃用。是否有任何推荐的替代做法来使用 SSL 保护套接字?

最佳答案

问题是你需要调用SSL_library_init,查看代码中的修改(始终处理我们调用的函数的错误也是一个好习惯:-):

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <openssl/bio.h>
#include <openssl/ssl.h>
#include <openssl/err.h>

int main(int argc, const char * argv[])
{
//SSL_METHOD *method = NULL;
SSL_CTX *ctx = NULL;
OpenSSL_add_all_algorithms();
SSL_load_error_strings();
//method = SSLv2_server_method();
//ctx = SSL_CTX_new(method);

/* Without this line you got an error when calling SSL_CTX_new */
SSL_library_init();
ctx = SSL_CTX_new(SSLv2_server_method());
if(!ctx)
{
fprintf (stderr, "SSL_CTX_new ERROR\n");
ERR_print_errors_fp(stderr);
return EXIT_FAILURE;
}

if (!SSL_CTX_use_certificate_file(ctx, "/Users/steve/certificate.pem", SSL_FILETYPE_PEM))
{
fprintf (stderr, "SSL_CTX_use_certificate_file ERROR\n");
ERR_print_errors_fp(stderr);

return EXIT_FAILURE;
}
SSL_CTX_use_PrivateKey_file(ctx, "/Users/steve/key.pem", SSL_FILETYPE_PEM);

printf("Hello, World!\n");
return EXIT_SUCCESS;
}

关于c - SSL_CTX_use_certificate_file 因 EXC_BAD_ACCESS 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com