次のスクリプトは、PHP 5.6.23
上で動作動作しません:のcURL:をCURLOPT_CAINFOが正しい証明書が含まれていますが
$options = [
CURLOPT_POST => 1,
CURLOPT_URL => 'https://uat.dwolla.com/oauth/rest/offsitegateway/checkouts',
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POSTFIELDS => json_encode(['name'=>'value']),
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_CAINFO => '/path/to/certs/GoDaddyRootCertificateAuthority-G2.crt',
];
$ch = curl_init();
curl_setopt_array($ch, $options);
if(! $result = curl_exec($ch)) $err = curl_error($ch);
else $err = null;
curl_close($ch);
if($err) echo $err;
else print_r(json_decode($result,true));
私はDwollaの支払いAPIから予想される応答を取得します。私のスクリプトをよりダイナミックにするために、私はcURLを信頼させたいcertsをホストするディレクトリを参照するように変更しようとしました。しかしこれは、スクリプトを分割し、何も接続が行われていない
CURLOPT_CAPATH => '/path/to/certs'
;:だから私はに最後のオプション(CURLOPT_CAINFO
)に変更しましたエラーは次のとおりです。
SSL証明書問題:ローカル発行者証明書に
を取得することができない私は、ディレクトリが正しいことを知っていて、元のスクリプトが同じディレクトリに証明書を参照するため、証明書ファイルが有効です。 cURL
は、ディレクトリ内のファイルをスキャンし、必要な証明書を見つけることを期待しましたが、これは起こっていません。どうしてこれなの?
'crt'の名前を' test.crt'に変更してもう一度やり直してください。 – Hackerman
@Hackermanは違いはありませんでした。それは最初の方法( 'CURLOPT_CAINFO'を用いて)で動作します。第2の方法と同じエラー( 'CURLOPT_CAPATH')。 – BeetleJuice
これで試してみてください:https://certs.godaddy.com/repository/gdroot-g2.crt – Hackerman