2015-11-23 14 views
21

Ho uno script php nel mio server Apache che deve inviare una richiesta di arricciatura al server di un partner. Partner dammi un file .pem che devo allegare ad ogni chiamata che faccio alla sua API.Come inviare una richiesta di arricciatura con certificato pem tramite PHP?

Il mio script php è la seguente:

$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); 

Restituisce:

Curl Error: unable to set private key file: 'test.pem' type PEM

consideri che mi manda file .pem e dice "non ha passphrase"

risposta

12

penso che è necessario utilizzare tmpfile() e 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); 

Fonte: This answer here in SO mi aiuta con il problema simile.

+0

Ciao James, grazie mille !!! Ho implementato il codice e ora riporta: "Errore arricciatura: impossibile caricare il certificato client PEM, errore di errore OpenSSL: 0906D06C: routine PEM: PEM_read_bio: nessuna riga iniziale, (nessuna chiave trovata, frase errata o formato file errato?) " Sai cosa significa? –

+0

Il problema potrebbe essere il tuo file pem. Sei in un ambiente Windows? Verifica se questa [query] (http://stackoverflow.com/questions/20837161/openssl-pem-routinespem-read-biono-start-linepem-lib-c703expecting-truste) ti aiuta. Assicurati che il tuo file inizi con '----- BEGIN PUBLIC KEY -----', senza spazi. – James

+1

Grazie mille James! –