【发布时间】:2015-12-08 19:11:31
【问题描述】:
我正在尝试在 curl 调用中使用 cacert.org 提供的免费客户端证书。检查以下...
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://url.com');
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSLCERT, 'cert.crt');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
我已将证书下载为 PEM,现在出现以下错误...
unable to set private key file: 'cert.crt' type PEM
我已经尝试了所有方法但无法修复,也尝试了谷歌。请帮忙。
【问题讨论】:
-
导出证书时是否包含私钥?
-
@drew010 不,即使我已经从 comodo 购买了付费 ssl,但这也没有解决我的问题。
-
你想做什么?
CURLOPT_SSLCERT用于指定用于与远程服务器进行身份验证的客户端身份验证证书。一些 CA 使用它们而不是密码来登录来管理您的帐户,但客户端证书并不常见。您是在寻找CURLOPT_CAINFO吗? -
@drew010 我都试过了,但都没有成功,网站希望我在提出请求时使用客户端证书。
-
好的,只是在确认。问题是 cURL 似乎没有客户端证书的私钥,这会导致错误“无法设置私钥文件”。您的 crt 文件似乎是 PEM 格式,因此它应该只是 base64 编码。它是否包含
-----BEGIN ENCRYPTED PRIVATE KEY-----或-----BEGIN RSA PRIVATE KEY-----行,还是您只看到-----BEGIN CERTIFICATE-----?
标签: php ssl curl ssl-certificate epp