CertPathValidation OpenSSL C API

Posted

技术标签:

【中文标题】CertPathValidation OpenSSL C API【英文标题】: 【发布时间】:2014-09-30 13:00:23 【问题描述】:

我正在尝试使用 OpenSSL 库创建 PathValidation API。因为我刚开始使用 OpenSSL 库,我试图让这段代码运行 http://www.frank4dd.com/howto/openssl/certverify.htm

重要的是要知道我正在使用二进制 OpenSSL 构建和 Eclipse C++ 在 Windows 7 上工作。

当我尝试从上面构建代码时,我得到了

gcc -o PathValidationTest_C.exe verify.o 
In function `main':
C:\Users\workspace_c++\PathValidationTest_C\Debug/../verify.c:19: undefined reference to `OPENSSL_add_all_algorithms_noconf'
C:\Users\workspace_c++\PathValidationTest_C\Debug/../verify.c:20: undefined    reference to `ERR_load_BIO_strings'
C:\Users\workspace_c++\PathValidationTest_C\Debug/../verify.c:21: undefined reference to `ERR_load_crypto_strings'
...

等等等等……

然后尝试从 OpenSSL-Win64/lib 链接 libeay32.lib 和 ssleay32.lib 这会产生相同的输出。我从 OpenSSL-Win64/include/openssl 文件夹中包含了“.h”。

谁能指点我解决这个问题的方法?

【问题讨论】:

这意味着你链接了错误的库。可能是库是用不同的编译器标志编译的。用 gcc 编译库,然后链接。 我试过:gcc "-IC:\\OpenSSL-Win64\\include" "-IC:\\OpenSSL-Win64\\lib" -O0 -g3 -Wall -c -fmessage-length =0 "-LC:\\OpenSSL-Win64\\lib" -llibeay32 -lssleay32 -o verify.o "..\\verify.c" 和 gcc "-LC:\\OpenSSL-Win64\\lib" "- LC:\\OpenSSL-Win64" -o PathValidationTest_C.exe verify.o -llibeay32 -lssleay32 没有变化.. 检查架构是否有任何不匹配。比如,你是在编译 32 位应用程序并链接 64 位库吗? 嗯我该如何检查? libeay32 代表 32 位?我在 64 位 Windwos 系统上运行。有没有办法告诉 eclipse 构建一个 32 位应用程序? 使用dumpbin /machine <obj or library>|grep machine。对于 64 位,会有 x64,对于 32 位,字符串中会有 x86。 【参考方案1】:

找到了解决方案,我必须从 OpenSSL-Win32 版本文件夹中链接 libeay.lib 和 ssleay.lib 文件!

【讨论】:

以上是关于CertPathValidation OpenSSL C API的主要内容,如果未能解决你的问题,请参考以下文章

Linux里面openss-devel是啥?

Mysql安装

cmark编译rabbitmq

OpenSSH服务简介

Openssl证书工具使用手册

openssl基础