具有 SSL 证书的 cURL 失败:错误 58 无法设置私钥文件
2022-08-31 00:52:05
我正在尝试使用 cURL 连接到远程主机。连接需要使用受密码保护的证书和私钥。到目前为止,我对下面的代码不成功:
<?php
$wsdl = 'https://domain.com/?wsdl';
$certFile = getcwd() . '/auth/cert.pem';
$keyFile = getcwd() . '/auth/key.pem';
$password = 'pwd';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $wsdl);
curl_setopt($ch, CURLOPT_SSLCERT, $certFile);
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $password);
curl_setopt($ch, CURLOPT_SSLKEY, $keyFile);
#curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
#curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
#curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$output = curl_exec($ch);
var_dump(curl_errno($ch));
var_dump(curl_error($ch));
我不断得到的结果是错误:。58
unable to set private key file: '/home/.../domains/.../public_html/auth/key.pem' type PEM
到目前为止,我尝试过的事情:
- 检查密钥文件是否按此处的建议可读:无法使用 libcurl 访问需要客户端身份验证的站点。尝试传递文件会给我一个资源,而不是一个布尔值。所以这似乎很好。
openssl_private_key()
- 按照此处的建议切换 key.pem 文件中内容的顺序:无法使用 libcurl 访问需要客户端身份验证的站点。到目前为止没有运气。
- 尝试了其他一些选项,如 、,以及其他选项,这些选项对于官方 PHP 文档来说似乎微不足道。到目前为止没有运气。
SLL_VERIFY_PEER
SSL_VERIFY_HOST
SSL_CERTTYPE
我很确定问题出在我的配置中,但我不确定在哪里寻找。