如何使用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