CURL访问 https CA证书问题

CURL访问 https CA证书问题

1、证书错误

运行报错:SSL peer certificate or SSH remote key was not OK
谷歌翻译:SSL对等证书或SSH远程密钥不正确

方法一:不检查证书

// 不检查证书
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);

方法二:下载一个证书并设置证书所在路径

(1)到 curl 官网下载证书
(2)在你的程序中设置证书的路径

// SSL CA证书
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L); // 验证服务器证书有效性
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L); // 检验证书中的主机名和你访问的主机名是否一致
curl_easy_setopt(curl, CURLOPT_CAPATH, “./lib/”); // 设置证书路径
//curl_easy_setopt(curl, CURLOPT_CAINFO, “./lib/cacert.pem”); // 具体的 CA 证书,和上一行效果一样,选用一个即可

2、证书路径错误

运行报错:Problem with the SSL CA cert (path? access rights?)
谷歌翻译:SSL CA证书有问题(路径?访问权限?)
分析:CA 证书默认路径 /etc/ssl/certs 找不到正确的证书
解决:

// SSL CA证书
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L); // 开启验证证书功能
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L); // 检验证书中的主机名和你访问的主机名是否一致
curl_easy_setopt(curl, CURLOPT_CAPATH, “./lib/”); // 设置证书路径
//curl_easy_setopt(curl, CURLOPT_CAINFO, “./lib/cacert.pem”); // 具体的 CA 证书

(1)使用 PATH 或 INFO 设置路径前要用curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);开启验证证书功能
(2)使用curl_easy_setopt(curl, CURLOPT_CAPATH, “./lib/”);设置证书路径
或使用curl_easy_setopt(curl, CURLOPT_CAINFO, “./lib/cacert.pem”);设置具体的 CA 证书

注:如果将可执行程序移植了,记得证书也要拷贝过去,放在上面 PATH 或 INFO设置的路径下

【 下面是我个人遇到的问题,不一定适合你,如果上面操作解决不了问题,可以尝试下面操作 】
(1)使用 curl_easy_setopt(curl, CURLOPT_CAPATH, capath); 设置路径,依然报路径错误
使用 curl_easy_setopt(curl, CURLOPT_CAINFO, “/home/cacert.pem”); 设置具体的证书,问题解决

(2)在(1)中使用 INFO 设置具体证书,使用相对路径"./lib/cacert.pem"依然报错,改用绝对路径"/home/cacert.pem"(记得把证书拷贝至对应路径)后 问题解决

参考:
1、https://curl.haxx.se/docs/sslcerts.html
2、https://curl.haxx.se/docs/caextract.html
3、