我正在尝试建立与服务器计算机的 TLS 连接。我已经使用 openssl CLI 命令创建了根 CA 证书和服务器证书。我创建了通用名称与其 IP 地址相同的服务器证书。根 CA 证书的通用名称是服务器的 FQDN。
我正在使用 openssl 库 API 来建立与服务器的连接。我正在使用 API
int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath)
用于设置 CA 文件查找路径。
当我使用 CAfile 参数指定 CA 文件的路径时,一切正常,将 CApath 参数保留为 NULL。
但是,如果我使用 CApath 参数指定包含 CA 文件的目录的路径,将 CAfile 参数保留为 NULL,则连接会由于证书验证错误而失败。
当我使用wireshark捕获数据包时,我发现我的客户端代码正在从服务器发送“服务器你好”的TLS响应“未知CA”。我使用了与成功连接相同的 CA 证书文件。
根据我在探索 openssl 库源代码时的观察,我推断在我的情况下,CA 文件不被认为是有效的,因此由于某些未知原因而没有被库 API 加载。
有人能告诉我原因吗,如果可能的话,可以告诉我这个问题的解决方案吗?