6

最近、当サイトは http から https に移行しました。現在機能していない顧客によって呼び出された REST API 呼び出しがあります。

SSL の前の cURL (動作):

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$api_call_url);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$result = curl_exec($ch);

curl_close($ch);

SSL 後の cURL (機能しない):

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$api_call_url);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, "/customers_path_on_their_server/to/our_cacert_they_exported_via_firefox.crt");   //X.509 Certificate

$result = curl_exec($ch);

curl_close($ch);

クライアントに CURLOPT_SSL_VERIFYPEER、CURLOPT_SSL_VERIFYHOST、CURLOPT_CAINFO を REST 統合コードに追加するよう依頼する以外に、サーバーに何かセットアップする必要がありますか?

私は本当にhttpsの初心者で、検索する必要がある用語が正確に何であるかわかりません.cURL SSLを何時間も検索しました...

ところで、その情報が重要な場合、私たちのサイトは amazon ec2 ホスティングを使用しています...

返された cURL エラーは次のとおりです。

 error:SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

cURL バージョン: 7.21.6

SSL バージョン: OpenSSL/1.0.0e

4

2 に答える 2

7

他の人がよく示唆するように、ピアとホストの検証をオフにしないでください。 これは、実際の問題に対する安全でない回避策です。これらの機能が存在するのには正当な理由があります。そのため、サードパーティを介して、接続先のシステムが期待どおりのものであると信頼できます。

まず、OS に証明書のディレクトリが含まれているかどうかを確認します。多くの場合、認証局が含まれます。たとえば、Ubuntu では多くの場合、ディレクトリ/etc/ssl/certsにありますが、Red Hat ベースのディストリビューションでは に含まれ/etc/pki/tls/certsます。このディレクトリが存在する場合は、CA パス パラメータを設定します。

curl_setopt($ch, CURLOPT_CAPATH, '/etc/ssl/certs');

または、単一の CA 証明書ファイルを参照できます。プロジェクトに cacert.pem ファイルを含めるか、サーバーにインストールします。cacert.org などの信頼できるソースからダウンロードします。単一のファイルの場合、CAPATH を設定せず、代わりに CAINFO のみを設定します。

curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem');
于 2013-09-18T15:09:57.603 に答える