我正在尝试建立到服务器计算机的TLS连接。我使用openssl CLI命令创建了根CA证书和服务器证书。我创建了具有与其IP地址相同的通用名称的服务器证书。根CA证书的通用名称是服务器的FQDN。Openssl:在SSL_CTX_load_verify_locations中使用CApath参数时,证书验证失败API
我正在使用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文件的目录,留下凭证档案错误参数为NULL,则连接由于证书验证错误失败。
当我使用wireshark捕获数据包时,发现我的客户端代码正在从服务器发送“服务器问候”的TLS响应“未知CA”。我已经使用了我在成功连接中使用的相同CA证书文件。
从我的观察,同时探索OpenSSL库的源代码,我推断,在我的情况下,CA的文件不被认为是由库API有效,因此没有被加载由于一些未知的原因。
有人可以告诉我的原因,如果可能的话,这个问题的解决方案?
如文档中所述,CApath中的文件是否具有正确的文件名称(即证书散列)?从https://www.openssl.org/docs/manmaster/ssl/SSL_CTX_load_verify_locations.html:“如果CApath不是NULL,它指向一个包含PEM格式CA证书的目录,每个文件都包含一个CA证书,文件由CA主题名称哈希值查找,因此必须可用...“ –
CA证书具有主题名称(CN =)。但我不明白什么是主题名称散列。我在证书中看不到这样的字段。 –
sreeyesh
您的评论显示您的文件可能没有正确的名称。您可以阅读https://mta.openssl.org/pipermail/openssl-users/2015-July/001687.html以获取有关如何创建正确文件名的更多信息。 –