我在 c 中使用 openssl 来验证证书。有什么办法可以跳过自签名证书错误?对于所有具有无效/过期/不匹配 url 证书的站点,我都会收到该错误,并且我无法检测到任何其他错误。
我使用该函数
SSL_CTX_load_verify_locations(ctx,0,CA_LIST))
加载 CA_LIST。它究竟是做什么的?
我在 c 中使用 openssl 来验证证书。有什么办法可以跳过自签名证书错误?对于所有具有无效/过期/不匹配 url 证书的站点,我都会收到该错误,并且我无法检测到任何其他错误。
我使用该函数
SSL_CTX_load_verify_locations(ctx,0,CA_LIST))
加载 CA_LIST。它究竟是做什么的?
当对等方发送的证书列表中存在根证书或自签名证书时,证书链中的错误自签名证书就会出现,但是相同的证书未加载到您的信任库中。
将SSL_CTX_load_verify_locations(ctx,0,CA_LIST))
尝试加载 CA_LIST 中提到的路径中存在的 CA。
函数原型是 intSSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath);
OpenSSL 帮助页面说:
“如果 CApath 不为 NULL,它指向包含 PEM 格式的 CA 证书的目录。每个文件都包含一个 CA 证书。文件通过 CA 主题名称哈希值查找,因此必须可用。如果多个存在同名哈希值的 CA 证书,扩展名必须不同(例如 9d66eef0.0、9d66eef0.1 等)。按照扩展名的顺序进行搜索,与证书的其他属性无关。使用 c_rehash实用程序来创建必要的链接。CApath 中的证书仅在需要时查找,例如在构建证书链或实际执行对等证书验证时。
您可以从此处的 OpenSSL 页面获取更多信息。