php - cacert - ssl certificate problem: unable to get local issuer certificate curl
¿Cómo enviar una solicitud curl con certificado de pem a través de PHP? (2)
Creo que debes usar el tmpfile() y stream_get_meta_data .
$pemFile = tmpfile();
fwrite($pemFile, "test.pem");//the path for the pem file
$tempPemPath = stream_get_meta_data($pemFile);
$tempPemPath = $tempPemPath[''uri''];
curl_setopt($ch, CURLOPT_SSLCERT, $tempPemPath);
Fuente: Esta respuesta aquí en SO me ayuda con un problema similar.
Tengo un script php en mi servidor Apache que tiene que enviar una solicitud curl al servidor de un compañero. Socio dame un archivo .pem que tengo que adjuntar a cada llamada que hago a su api.
Mi script php es el siguiente:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSLCERT, "test.pem" );
curl_setopt($ch,CURLOPT_SSLCERTTYPE,"PEM");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
curl_setopt($ch, CURLOPT_POST, True);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
if(!$result)
{
echo "Curl Error: " . curl_error($ch);
}
else
{
echo "Success: ". $result;
}
curl_close($ch);
Vuelve:
Curl Error: no se puede establecer el archivo de clave privada: ''test.pem'' tipo PEM
Considere que me envía un archivo .pem y dice "no tiene contraseña"
Creo que te estás perdiendo curl_setopt($ch, CURLOPT_CAINFO, ''test.pem'');
Eche un vistazo a cURL no puede usar el certificado de cliente, en el servidor local para obtener más información sobre el uso de certificados de cliente en curl a través de PHP