2015-11-23 3 views
21

Apacheサーバーに、パートナーのサーバーにカール要求を送信する必要のあるPHPスクリプトがあります。 パートナーは私にapiに行うすべての呼び出しに添付する.pemファイルを与えてください。PHP経由でPEM証明付きカールリクエストを送信するには?

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

それが返されます:

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

が、それは私の.pemファイルを送信し、私が思う

答えて

12

"それはパスフレーズを持っていない" と言うことを考えてみましょう

私のPHPスクリプトは以下ですtmpfile()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); 

ソース:This answer here in SO私にも同様の問題が発生します。私はあなたが curl_setopt($ch, CURLOPT_CAINFO, 'test.pem'); が欠けていると思う

+0

こんにちはジェームズを持って、どうもありがとうございました!!! 0906D06C:PEMルーチン:PEM_read_bio:開始行なし、キーが見つからない、パスフレーズが間違っている、ファイル形式が間違っていますか?) "あなたはそれが何を意味するか知っていますか? –

+0

問題はあなたのpemファイルである可能性があります。あなたはWindows環境にいますか?この[クエリ](http://stackoverflow.com/questions/20837161/openssl-pem-routinespem-read-biono-start-linepem-lib-c703expecting-truste)が役立つかどうかを確認してください。あなたのファイルが '----- BEGIN PUBLIC KEY -----'で始まっていることを確認してください。 – James

+1

ありがとう非常にジェームス! –

関連する問題