c-更新openssl:openssl API级支持



我正在尝试从openssl 1.0.2更新到最新版本(如3.0.1(。问题是我有大量的代码和第三方库依赖于旧版本的API,这成为了一项估计不切实际的任务。我发现opensslconfigure脚本有一个名为API级别的好东西,它旨在构建openssl库以支持指定版本的API,但是,我看不到该选项的任何效果。

以下是我如何使用它:

$ ./Configure --api=1.0.2 --release --prefix=/opt/openssl
$ make -j
$ make install

之后,我尝试在/opt/openssl中使用构建,但我使用openssl 1.0.2成功构建的代码现在无法编译。

$ g++ test.cpp 
$ g++ test.cpp -lcrypto -I/opt/openssl/include/ -L/opt/openssl/lib64/
test.cpp: In function ‘int main()’:
test.cpp:5:16: error: aggregate ‘EVP_MD_CTX context’ has incomplete type and cannot be defined
5 |     EVP_MD_CTX context;
|                ^~~~~~~

我误解了什么吗?我在这里想念什么?

从3.0 API中,EVP_MD_CTX结构对用户隐藏。它只是在SSL头文件中正向声明的/usr/include/openssl/types.h:105:typedef struct evp_md_ctx_st evp_md_ctx;

需要使用EVP_MD_CTX_create/new来代替先前使用的变量声明EVP_MD_CTX mdc

#include <openssl/evp.h>
...
EVP_MD_CTX *mdc ; 
//(Even though struct is anonymous pointer to  anonymous
// struct can always be handled by compiler)
mdc = EVP_MD_CTX_new() ; 
EVP_MD_CTX_init(mdc);
...
EVP_MD_CTX_cleanup(mdc);
EVP_MD_CTX_free(mdc) ;

最新更新