我需要从PHP访问RESTful Web服务(目前只有GET)。该服务只能通过HTTPS使用有效的客户端证书进行访问。
我发现了大量基于PHP的基本身份验证示例,但对于客户端基于证书的HTTP身份验证却没有。是否有PHP HTTP客户端也可以向服务器发送证书?
目前我正在使用外部应用程序(wget),但这是相当缓慢和hacky。
答案 0 :(得分:9)
基于证书的身份验证不是HTTP的一部分,而是SSL / TLS的一部分。
您可以使用cURL进行此类身份验证:
$ch = curl_init('https://example.com/');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1');
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cert/ca.crt');
curl_setopt($ch, CURLOPT_SSLCERT, '/path/to/cert/client-cert.pem');
$response = curl_exec();
curl_close($ch);
有关选项的更多信息,请参阅the manual page of curl_setopt
。