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、