如何使用PHP HTTP客户端执行基于证书的身份验证
问题描述:
我需要从PHP访问RESTful Web服务(目前仅支持GET)。该服务只能通过有效的客户端证书通过HTTPS访问。如何使用PHP HTTP客户端执行基于证书的身份验证
我发现了很多PHP的基本身份验证示例,但没有一个用于客户端基于证书的HTTP身份验证。有没有可以将证书发送到服务器的PHP HTTP客户端?
现在我正在使用一个外部应用程序(wget),但是这是相当缓慢和黑客。
答
基于证书的身份验证不是HTTP的一部分,但是SSL/TLS的一部分。
您可以使用卷曲做这样的认证:
$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
。