我用openssl 1.0.0编译了curl 7.37.0,并将它们配置如下:
openssl conf:
./Configure COMPILER_TYPE --prefix=/path/to/dir --openssldir=/path/to/dir shared threads
curl conf:
./configure --with-ssl=/path/to/openssl --prefix=/path/to/fdir/ --libdir=/path/to/dir/lib
在我的代码中,我使用'setopt'确定curl将从哪里获取证书:
curl_easy_setopt(crl, CURLOPT_SSL_VERIFYHOST, 2);
curl_easy_setopt(crl, CURLOPT_SSL_VERIFYPEER, true);
curl_easy_setopt(crl, CURLOPT_CAINFO, /path/to/cert/ca.crt);
现在我得到'同行证书错误'(51)。 我在这里错过了openssl / curl配置吗?
[更新]
构建配置似乎很好, 我从7.20.0升级到卷曲7.21.0,它的工作原理与之前一样, 但升级到7.37后,我收到了错误:
“证书主题名称'XXXXXXXXXX'与目标主机名'localhost'不匹配”
和curl返回错误51
答案 0 :(得分:1)
服务器证书的设置名称与您连接的主机名不同(错误信息非常明确地说明了这一点)。
这不应该与CURLOPT_SSL_VERIFYHOST设置为2一起使用,如果它在由于错误之前有效 - 但我宁愿怀疑证书或主机名已经改变。
您可以使用多种方法,包括将CURLOPT_SSL_VERIFYHOST设置为0或使用CURLOPT_RESOLVE将“实际”主机名设置为127.0.0.1。