PHPCurl-SSL对等端收到的证书有一些未指明的问题



这是我用PHP代码发送的请求

$url = 'https://mywebserviceurl.com';
$method='GET';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_VERBOSE, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '2');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 'TRUE');
curl_setopt($ch, CURLOPT_CAINFO, __DIR__.'/print_ca_ca.cer');
curl_setopt($ch, CURLOPT_SSLCERT, __DIR__.'/print_ca_cert.cer');
curl_setopt($ch, CURLOPT_SSLKEY, __DIR__.'/print_ca_key_decr.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'somepassword');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response    = curl_exec($ch);
$resp = json_encode($response);
$this->setErrorCodeMessage('401', 'Response-> '.$resp); //get a False here
$error = curl_error($ch);
$this->setErrorCodeMessage('401', 'Error-> '.$error); //get Error here
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status_code == '200' && !empty($response)) {
$this->setErrorCodeMessage('401', 'Inside 200 OK..');
}

我在错误日志上看到的错误是-

SSL对等端收到的证书存在一些未指明的问题

当我执行php-a并尝试在shell上按原样运行请求时,除了上面的错误行,我还得到了以下-

NSS错误-12224(SSL_error_CERTIFICATE_UNKNOWN_ALERT(

我最初有一个p12文件,并使用openssl命令从中获得了一个ca链(.cer文件(、ssl证书(.ser文件(和密钥文件(.pem文件(,我将这些文件与Curl请求一起使用。在这一点上,我已经尝试了一切;使用pem、crt、cer文件,将CURLOPT_SSL_VERIFYHOST和CURLOPT_StSL_VERIFYPEER设置为不同的值,并尝试POST请求,但我一直在获取SSL对等端收到的证书有一些未指明的问题

是不是我做错了什么?有什么建议吗?

PS-我在Postman上使用了原始的P12文件及其密码,并且能够毫无问题地发送GET/POST请求。

您收到的错误是由于服务器不接受您的客户端证书(print_ca_cert.cer(。CURLOPT_SSL_VERIFYHOST等将没有帮助,因为这些选项是关于由客户端验证服务器证书的。

目前尚不清楚服务器不喜欢您的客户端证书,因为不知道对此证书的要求以及您收到的文件中的实际内容。print_ca_ca.cer可能不是您使用CURLOPT_CAINFO配置的服务器证书的CA,而是您需要与客户端证书一起发送的中间CA。在这种情况下,您需要将print_ca_ca.cer附加到print_ca_cert.cer。但同样,这些只是猜测,因为对这些文件的内容一无所知。

最新更新