4

こんにちは、仲間のプログラマー、

https接続でAPIを作っています。証明書チェックで API 呼び出しを保護したいと考えています。curl から cacert.pem をダウンロードし、これを自分のフォルダーに配置しましたが、機能せず、次のエラーが表示されます。

SSL certificate problem: unable to get local issuer certificate

まあ、cacert.pemファイルが正しく配置されていることは確かですが、皆さんのために、それを機能させるために書いたコードをいくつか示します。

 $ch = curl_init($url);
 curl_setopt($ch, CURLOPT_POST      ,1);
 curl_setopt($ch, CURLOPT_USERPWD, $this->api_key . ":" . $this->api_secret);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
 curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . "/cacert.pem");
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
 curl_setopt($ch, CURLOPT_POSTFIELDS    ,$post_vars);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,0);
 curl_setopt($ch,CURLOPT_HTTPHEADER,array('Accept: application/json'));
 curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);  // RETURN THE CONTENTS OF THE CALL
 $data = curl_exec($ch);

私は SSL 接続についてよく知らないので、私の質問に答えてくれる人がいるといいのですが。

前もって感謝します!

4

1 に答える 1

2

実行しているスクリプトが証明書バンドルを読み取れることを確認したら、次のステップはサーバー自体を調査することです。

これがあなた自身のサーバーである場合、中間証明書、つまり、発行された証明書とバンドルに付属する認証局の 1 つの間にある証明書をインストールするのを忘れている可能性があります。

自己署名証明書を使用しcacert.pemている場合は、接続先のサーバーの公開証明書を含める必要があります。これは、ファイルと呼ばれる、ここで概説されているプラ​​イベート証明書から生成でき.crtます。

于 2013-02-18T23:40:47.267 に答える