CURL cannot use client certificate (key not found or wrong phrase?)

I read and tried thousands of solutions in different posts, and none of them seem to work with me. These are three examples of this.

cURL cannot use client certificate on local server

php openssl_get_publickey () and curl - client certificate cannot be used (phrase not found or not found?)

Getting (58) inability to use a client certificate (without a key or an incorrect phrase?) From curl

I received a certificate .p12that I converted to a .pemfile in https://www.sslshopper.com/ssl-converter.html

The password is correct, otherwise it will not convert it.

$xml = 'my xml here';
$url = 'https://qly.mbway.pt/Merchant/requestFinancialOperationWS';

$headers = array( 
    'Content-Type: text/xml; charset="utf-8"', 
    'Content-Length: ' . strlen($xml), 
    'Accept: text/xml', 
    'Cache-Control: no-cache', 
    'Pragma: no-cache'
); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSLCERT, base_url() . 'public/cert.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'my password here');
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 

$data = curl_exec($ch); 

if(!$data)
    print_r('ERROR: ' . curl_error($ch));
else
    print_r('SUCCESS: ' . curl_error($ch));

I tried the SoapUI application and worked fine, but with cURL I get an error:

( ?)

:

  • CURLOPT_SSL_VERIFYPEER / CURLOPT_SSL_VERIFYHOST
  • CURLOPT_SSLKEYTYPE / CURLOPT_SSLKEY

1:

SOAPClient, cURL, , .

print_r($soapClient) :

Host: qly.mbway.pt
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.5.9-1ubuntu4.14
Content-Type: application/soap+xml; charset=utf-8; action=""
Content-Length: 1750

, action=""? .

class MySoapClient extends SoapClient 
{   
   public function __construct($wsdl, $options = array())
   {
     $ctx_opts = array('http' => array('header' => array('Content-Type' => 'application/soapyyyyyml')));

     $ctx = stream_context_create($ctx_opts);

     parent::__construct($wsdl, array('stream_context' => $ctx));
   }
}
+4
1

cURL.

pem.

base_url() . 'public/cert.pem', . , ./public/cert.pem.

+2

Source: https://habr.com/ru/post/1616090/


All Articles