首页 > 解决方案 > 客户端证书身份验证出现卷曲错误

问题描述

我必须调用一个需要客户端证书身份验证的 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, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); 
curl_setopt($ch, 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);

标签: phpauthenticationcurlclient-certificates

解决方案


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

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

设置CURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_1


推荐阅读