我最近想通过使用 BSD 套接字来构建我自己的客户端-服务器系统。过了一段时间,我想包括 SSL 来加密数据传输。我按照本教程进行了操作,并且代码可以使用 Xcode 很好地编译(添加的链接器标志:-lssl -lcrypto),但是EXC_BAD_ACCESS
一旦程序到达SSL_CTX_use_certificate_file()
调用,我就会一直得到。您可以在下面看到使用的代码。
#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 保护套接字?