web-dev-qa-db-ja.com

Twilio PHP-SSL証明書:証明書チェーンの自己署名証明書

PHPライブラリ を使用してTwilio経由でメッセージを送信しようとすると、このエラーに苦労します。

_Fatal error: Uncaught exception Services_Twilio_TinyHttpException with message SSL certificate problem: self signed certificate in certificate chain thrown in F:\path\to\site\twilio-php\Services\Twilio\TinyHttp.php on line 119
_

Windows 7でwampを使用しています。

もちろん、証明書エラーに関する他のすべての投稿を見つけました。私が見ることができるものから、通常_cacert.pem_ファイルを更新または追加すると問題が修正されます。ただし、これを行った後でも、同じエラーが発生します。

ここでの健全性チェックはまさに​​私がやったことです:

  1. ここから最新の証明書をダウンロードしました: http://curl.haxx.se/ca/cacert.pem
  2. このファイルを次の場所に配置しました_c:/wamp/certs/cacert.pem_
  3. Php.iniを次のように更新しました:_curl.cainfo = c:/wamp/certs/cacert.pem_
  4. Apacheを含むすべてのwampサービスを再起動しました

そして、私はまだ同じエラーを受け取っています。 phpinfo()を使用して正しいphp.iniを編集していることを確認しました。まだ文句を言っている理由について私は途方に暮れています。

_cacert.pem_ファイルが見つかって読み取られていることを100%確認する方法はありますか?私はphpinfo()をチェックしましたが、そこには言及されていません。 _cacert.pem_を使用している場合、どこで言うべきですか?

ありがとう!

21
jd182

私はまったく同じ問題を抱えていた

次の手順を実行します:

次のファイルをダウンロードします- cacert.pem

次に、次のファイルをダウンロードします- thawte_Premium_Server_CA.pem

テキストエディタで2番目のファイルを開き、その内容を最初のファイルにコピーします(一番下/最後のcacert.pem)。

cacert.pemを保存し、次の行をphp.iniに追加します。

[curl]
curl.cainfo=c:/xampp/php/cacert.pem

明らかに、あなたのペムがあるディレクトリに変更してください。 phpローカルサーバー(xampp/wamp)を再起動します。その後、問題なく動作します。

ありがとう。

54
codemonkey

TinyHttp.phpを編集します

CURLOPT_SSL_VERIFYPEER => FALSE,を$ opts配列に追加します

8
Nuno Ferro

Twilioを使用していませんが、Windowsを使用しており、OPで説明されている正確な問題がありました。これを解決するには、ca-bundle.crtこのページのファイルで、php.iniを指定します。 http://curl.haxx.se/docs/caextract.html

3
gazareth

私の場合、上記のダウンロードリンクのcacert.pemは機能しませんでしたが、 .12.5 などの以前のtwilio phpライブラリパッケージのcacert.pemは機能しました。新しいパッケージのtwilio.phpを変更して、次の2行を追加しました

CURLOPT_CAINFO => dirname(FILE) . '/cacert.pem'
'cafile' => dirname(FILE) . '/cacert.pem'

古いパッケージとして対応する場所にコピーし、cacert.pemも新しいパッケージにコピーしました。

1
leshan

Tiny_http.phpをハッキングする代わりに、次のような選択したオプションでTwilioのCurlClientコンストラクターを呼び出すことにより、独自のcURLオプションを追加できます。

    $client = new \Twilio\Rest\Client($accountSid, $authToken);
    $curlOptions = [ CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false];
    $client->setHttpClient(new CurlClient($curlOptions));

    try {
        $call = $client->calls->create($from_phone, $phone_number, $callback_url);
        print 'Call queued with Twilio';
    } catch (\Exception $ex) {
        print 'Twilio error: ' . $ex->getMessage();
    }
1
user3511370

Twilioからの公式の回答は次のとおりです。

この問題を解決するには、次のことを試してください。

1次のpemファイルをダウンロードします。 https://twilio.zendesk.com/attachments/token/EenviU5Rv4KHUzGM6VP5UijB0/?name=cacert.pem

2このファイルをc:\cert\cacert.pem(Windows)またはUnix/Linux/Macインストールのその他のパス

3お気に入りのエディターでphp.iniファイルを開きます

次の構成の場合string: curl.cainfoはphp.iniに存在します。「; "、このメールに添付されているcacert.pemファイルを指すようにパスを変更します。例:

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

curl.cainfo=c:\cert\cacert.pem

5 Apacheサービスを再起動して、変更を適用してください(非常に重要です!)

0
Jonathan

私にとって、ここに投稿された答えはどれもうまくいきませんでした。

しかし、その後、PHPを7.0.1 *にアップグレードしたため、このエラーはなくなりました:Services_Twilio_TinyHttpException: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL

*(C:\wamp\bin\php\php-7.0.1-Win32-VC14-x64 の代わりに C:\wamp\bin\php\php5.4.3

と私 C:\wamp\bin\php\php-7.0.1-Win32-VC14-x64\php.iniはすでに含まれていましたcurl.cainfo=C:/wamp/cacert.pem

0
Ryan

誰も[ini-tag]に言及していないため、この回答を追加します

php.ini

[curl]
curl.cainfo=C:\cacert.pem

cacert.pemはここからダウンロードされます: https://twilio.zendesk.com/attachments/token/EenviU5Rv4KHUzGM6VP5UijB0/?name=cacert.pem

0
Jonathan