c - LPdir 未实现,它是做什么用的?

标签 c openssl

我在非 *nix/Windows/Mac 平台上遇到 Openssl 问题。

Windows 上与我的平台上相同的 C 代码(除了一些使其在 Windows 上运行的调整外,SSL 逻辑是相同的)可以完美运行。服务器和客户端可以相互验证。 但是在我的平台上,客户端不对服务器进行身份验证。服务器证书无效,即使它在客户端运行在 WIndows 上时有效。 我还通过 CA 和证书属于一起的命令行仔细检查了 openssl。所以这是我平台上的问题。

我在我的平台上编译时有一些警告可能与此有关。

一个是 LPDIR_H。我有 LPdir_nyi.h(尚未实现)。该文件中的函数查找文件 (LP_find_file) 并查找文件的 END (LP_find_file_end)。也许这就是问题所在。

什么时候使用这些文件?我找不到对这些函数的任何明显调用,所以我不知道它们是否被 openssl 使用?

编辑: 我应该补充一点,函数 SSL_CTX_load_verify_locations 正确返回。调查是否调用了 SSL_add_dir_cert_subjects_to_stack。

最佳答案

它们是OPENSSL_DIR_readOPENSSL_DIR_end 的实现。来自 crypto/o_dir.c:

/* The routines really come from the Levitte Programming, so to make
   life simple, let's just use the raw files and hack the symbols to
   fit our namespace.  */
#define LP_DIR_CTX OPENSSL_DIR_CTX
#define LP_dir_context_st OPENSSL_dir_context_st
#define LP_find_file OPENSSL_DIR_read
#define LP_find_file_end OPENSSL_DIR_end

#include "o_dir.h"

#define LPDIR_H
#if defined OPENSSL_SYS_UNIX || defined DJGPP
#include "LPdir_unix.c"
#elif defined OPENSSL_SYS_VMS
#include "LPdir_vms.c"
#elif defined OPENSSL_SYS_WIN32
#include "LPdir_win32.c"
#elif defined OPENSSL_SYS_WINCE
#include "LPdir_wince.c"
#else
#include "LPdir_nyi.c"
#endif

是的,他们确实在#including 定义之前将函数名#define 到其他名称,这样编译器永远不会看到任何符号LP_find_fileLP_find_file_end。就预处理器之后的任何事情而言,它们将被称为 OPENSSL_DIR_readOPENSSL_DIR_end

OPENSSL_DIR_readSSL_add_dir_cert_subjects_to_stack 中使用,因此您的问题可能与此有关。

这些功能也不是非常复杂,重新实现起来应该相当简单。 LP_find_file(嗯,OPENSSL_DIR_read)在第一次调用时打开目录上下文(即,使用空指针的地址)并返回描述上下文的内容和第一个目录中的文件名,从第二次调用开始,仅步进到下一个文件名,直到不再有文件名,然后返回 NULLLP_find_file_end/OPENSSL_DIR_end 只是关闭上下文。我不知道您在哪个平台上工作,但如果其 API 中没有可以轻松映射到此平台的函数,我会感到惊讶。

关于c - LPdir 未实现,它是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28295561/

相关文章:

c - 这个循环是无限的,但它不应该是 - C

c - 双向链表释放内存 valgrind 错误

c - 从整数中获取浮点值

c - Eclipse 中 c99 标准的问题

java - 如何使用 AES 解密使用 openssl 命令加密的 Java 文件?

openssl- 使用 key 和 IV 解密 base64 字符串

ruby-on-rails - 无法在 OS X Yosemite 上构建 puma gem

c - 以有序的方式在链表中间插入一个元素?

ssl - Liberty Websphere 上没有共同的密码套件

azure - .Net Core MVC 中安全服务请求的双向 SSL X509 证书位置 - Azure 服务托管应用程序