cURL SSL证书错误 "Bad Certificate"

9
我正在尝试将SSL证书与SOAP消息一起发送到服务器,并且刚刚成功使cURL接受了该证书(通过使用OpenSSL生成的.pfx文件转换为.pem文件),并且没有返回“无法设置私钥文件”的错误(显然,私钥必须保留其“包属性”)。但是现在它返回了全新的错误:

SSL证书问题,请验证CA证书是否正确。详细信息:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我已经尝试使用以下方法设置CA证书:

curl_setopt($soap_do, CURLOPT_CAINFO, $caFile);

但是我使用的根证书和中间 CA 证书并没有产生任何结果。
通过以下方式禁用此检查:
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, 0);

让我来谈一下新问题:

错误:14094412:SSL例程:SSL3_READ_BYTES:sslv3警报坏证书

这个问题困扰了我几周,虽然新的错误信息意味着改变,但我不确定它是否代表进步。如果您有任何建议或意见,告诉我我缺少了什么/做错了什么,将不胜感激。


关闭CURLOPT_SSL_VERIFYPEER是一个不好的主意 - 它允许中间人(MITM)攻击! - Filippos Karapetis
我最终需要同时保留它们。我只是想了解 SSL 证书的使用。我们实际部署不会在 PHP 中,但我发现它具有最有用的错误消息... - Gavin
3
SSL3_GET_SERVER_CERTIFICATE:certificate verify failed意味着客户端不信任签署服务器证书的CA。SSL3_READ_BYTES:sslv3 alert bad certificate表示服务器不信任你发送给它的客户端证书的签署CA。客户端证书是如何生成的?您希望服务器信任签署此证书的CA吗? - Remi Gacogne
每个请求都会针对CA签署证书吗?如果是这样,那么我的理解就错了。我希望服务器信任CA。他们是提供证书文件的人(SSL身份验证是为了我们可以使用他们的API)。 - Gavin
2个回答

1

很可能是CA捆绑包错误。验证路径和访问权限,可以尝试设置绝对路径。如果这不起作用,请获取 CA捆绑包并设置类似于curl_setopt($soap_do, CURLOPT_CAINFO,'cacert.pem');


-1

sslv3 alert bad certificate 表示缺少 CA 信息。请使用 --cacert 参数并添加 CA 证书。

unable to set private key file 表示作为 --cert 传递的证书不是与私钥匹配的公钥。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接