客户端证书认证出现卷曲错误

问题描述

我必须调用需要客户端证书身份验证的api。 我在邮递员中使用客户端证书测试了此api,并且它运行良好。 现在我想用PHP curl做到这一点。 我尝试了下面的代码,但它给了我以下错误

未彻底关闭HTTP / 2流0:HTTP_1_1_required错误13)

$url = 'https://someurl';
$json = 'somejson';




$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_VERBOSE,1); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,CURLOPT_SSL_VERIFYHOST,CURLOPT_SSLCERT,__DIR__."/certificate.pem"); 
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); 
curl_setopt($ch,CURLOPT_SSLKEY,__DIR__."/privatekey.key"); 
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
curl_setopt($ch,CURLOPT_POSTFIELDS,$json);
$responseData = curl_exec($ch);
if(curl_errno($ch)) {

    echo curl_error($ch);
}
curl_close($ch);

解决方法

该错误消息包含您所需的所有线索: HTTP_1_1_REQUIRED

HTTP / 2不支持TLS客户端证书,因此您需要通过明确要求使用HTTP / 1.1来确保curl请求已完成。默认情况下,curl将在HTTPS URL上升级到HTTP / 2。

CURLOPT_HTTP_VERSION设置为CURL_HTTP_VERSION_1_1