C++ 打开ssl C时发生证书错误

C++ 打开ssl C时发生证书错误,c++,openssl,x509certificate,C++,Openssl,X509certificate,我在c中使用openssl来验证证书。有没有办法跳过自签名证书错误?对于所有具有无效/过期/不匹配url证书的站点,我都会收到该错误,并且我无法检测到任何其他错误 我使用这个函数 SSL\u CTX\u load\u verify\u位置(CTX,0,CA\u列表))加载CA\u列表。它到底起什么作用 当对等方发送的证书列表中存在根证书或自签名证书时,证书链中的自签名证书出现错误,但信任存储中未加载根证书或自签名证书 SSL\u CTX\u load\u verify\u位置(CTX,0,CA\

我在c中使用openssl来验证证书。有没有办法跳过自签名证书错误?对于所有具有无效/过期/不匹配url证书的站点,我都会收到该错误,并且我无法检测到任何其他错误

我使用这个函数
SSL\u CTX\u load\u verify\u位置(CTX,0,CA\u列表))
加载CA\u列表。它到底起什么作用

当对等方发送的证书列表中存在根证书或自签名证书时,证书链中的自签名证书出现错误,但信任存储中未加载根证书或自签名证书

SSL\u CTX\u load\u verify\u位置(CTX,0,CA\u列表))
将尝试加载CA\u列表中提到的路径中存在的CA

函数原型是int
SSL\u CTX\u load\u verify\u位置(SSL\u CTX*CTX、const char*CAfile、const char*CApath)

OpenSSL帮助页面显示:

如果CApath不为NULL,则它指向包含PEM格式CA证书的目录。每个文件都包含一个CA证书。这些文件由CA使用者名称哈希值查找,因此必须可用。如果存在多个具有相同名称哈希值的CA证书,则扩展名必须不同(例如9d66eef0.0、9d66eef0.1等)。无论证书的其他属性如何,都会按分机号码的顺序执行搜索。使用c_rehash实用程序创建必要的链接。 仅在需要时(例如,在构建证书链或实际执行对等证书验证时)才查找CApath中的证书。”


您可以从OpenSSL页面获得更多信息。

当对等方发送的证书列表中存在根证书或自签名证书,但信任存储中未加载该证书时,证书链中的自签名证书会出现错误

SSL\u CTX\u load\u verify\u位置(CTX,0,CA\u列表))
将尝试加载CA\u列表中提到的路径中存在的CA

函数原型是int
SSL\u CTX\u load\u verify\u位置(SSL\u CTX*CTX、const char*CAfile、const char*CApath)

OpenSSL帮助页面显示:

如果CApath不为NULL,则它指向包含PEM格式CA证书的目录。每个文件都包含一个CA证书。这些文件由CA使用者名称哈希值查找,因此必须可用。如果存在多个具有相同名称哈希值的CA证书,则扩展名必须不同(例如9d66eef0.0、9d66eef0.1等)。无论证书的其他属性如何,都会按分机号码的顺序执行搜索。使用c_rehash实用程序创建必要的链接。 仅在需要时(例如,在构建证书链或实际执行对等证书验证时)才查找CApath中的证书。”


您可以从OpenSSL页面获得更多信息。

1.您可以发布您获得的错误代码吗?2.您可以发布您传递的CA_列表吗?证书链中的自签名证书1.您可以发布您获得的错误代码吗?2.您可以发布您传递的CA_列表吗?证书链中的自签名证书是否有w如何获取pem文件?或者我应该为每个站点保存它们吗?我的意思是,当我第一次访问站点时,如果它是自签名证书,我会保存它?有办法吗?您是否在代码中设置了验证回调?如果有,当您收到您提到的错误时,将调用验证回调,您可以访问来自X509_STORE_CTX的证书,您可以将其保存在CApath位置。因此,下次建立连接时将使用它。不,我没有使用验证回调。您可以给我一个示例代码来执行此操作并将证书保存到CApath吗?是否有方法获取pem文件?或者我应该为每个站点保存它们?我的意思是en我首先访问一个站点,如果它是一个自签名证书,我会保存它吗?有办法吗?您是否在代码中设置了验证回调?如果是,当您收到您提到的错误时,将调用您的验证回调,您可以从X509_STORE_CTX访问证书,并将其保存在CApath的位置。因此,它将在下次建立连接时使用。不,我没有使用验证回调。您能给我一个示例代码来执行此操作并将证书保存到CApath吗?