![](/img/trans.png)
[英]cURL unable to use client certificate (no key found or wrong pass phrase?)
[英]PHP CURL error: unable to use client certificate (no key found or wrong pass phrase?)
我正在这样做:
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '2');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1');
curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/public.pem');
curl_setopt($ch, CURLOPT_SSLCERT, getcwd().'/private.key');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '1234');
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, '1234');
curl_setopt($ch, CURLOPT_URL, "http://api-xxxxxx.duosecurity.com/auth/v2/preauth");
$dataa = curl_exec($ch);
我收到此错误: unable to use client certificate (no key found or wrong pass phrase?)
我想念什么? 如果代码正确,那么您能指导我如何使用openssl
或ssh-keygen
生成一对证书吗?
这是您通过HTTPS连接到Yahoo的方式
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '2');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1');
curl_setopt($ch, CURLOPT_URL, "https://m.yahoo.com/");
$dataa = curl_exec($ch);
您不使用客户端证书与HTTPS主机通信。
浏览器/客户端不使用客户端证书的原因差异很大,无法在此处列出。
客户端证书似乎是一种身份验证或登录到网站的方法,它们不是加密与服务器通信的一部分。
https://en.wikipedia.org/wiki/Client_certificate
https://pilif.github.io/2008/05/why-is-nobody-using-ssl-client-certificates/
http://blogs.msdn.com/b/kaushal/archive/2012/02/18/client-certificates-vs-server-certificates.aspx
在得知原始问题与duosecurity的API有关,而不是与常规的yahoo http连接有关之后,我研究了duo的API文档以及JS和PHP客户端库。 我找不到对客户端SSL证书的任何引用。
为了回过头来解决“找不到密钥或密码短语错误”的原始错误,我们应该查看CURLOPT_ *设置。
在原始问题中,使用curlopt设置错误地标识了证书和密钥。
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '2');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1');
curl_setopt($ch, CURLOPT_SSLCERT, getcwd().'/public.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '1234');
curl_setopt($ch, CURLOPT_SSLKEY, getcwd().'/private.key');
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, '1234');
curl_setopt($ch, CURLOPT_URL, "http://api-xxxxxx.duosecurity.com/auth/v2/preauth");
$dataa = curl_exec($ch);
使用SSLCERT(PASSWORD)和SSLKEY(PASSWORD)启用客户端证书。 您的客户端证书不太可能需要CA-CURLOPT_CAINFO仅用于帮助标识对等方,而不是您自己。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.