2016-08-26 3 views
2

にこれは私のdevのマシン上で作業し、スクリプトではありませんではない理由を把握することはできません。同じcURLスクリプトはdevで動作します。</p> ​​ <p>いいえ問題:生産

SSL certificate problem: unable to get local issuer certificate

  • 同じ.crt内容が印刷されているので、私は、証明書へのパスが問題ではありません知っている:私は私の本番環境に移動すると、cURLの接続は、このエラーで失敗します。
  • 両方の環境がPHP 5.6.23 Devのマシン
  • Apache 2.4上を使用するには、PRODのマシンは、私が原因を探し始めるか分からない Linux CentOS 7

で、Win 7 x64です。スクリプトが本番環境で動作しないのはなぜですか?

UPDATE:コメントの@ blackpenの大きなヒントに おかげで、私は、接続のログを生成するために使用さCURLOPT_VERBOSEオプションについて学びました。ここで壊れた本番環境で出力されます。ここでは

  • Hostname was NOT found in DNS cache
  • Trying 104.20.47.245...
  • Connected to uat.dwolla.com (104.20.47.245) port 443 (#0)
  • successfully set certificate verify locations:
  • CAfile: /path/to/GoDaddyRootCertificateAuthority-G2.crt CApath: none
  • SSL certificate problem: unable to get local issuer certificate
  • Closing connection 0

は、同じスクリプトから、しかし作業開発環境からのログです:

  • Hostname in DNS cache was stale, zapped
  • Trying 104.20.48.245...
  • Connected to uat.dwolla.com (104.20.48.245) port 443 (#0)
  • Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
  • successfully set certificate verify locations:
  • CAfile: /path/to/GoDaddyRootCertificateAuthority-G2.crt
    CApath: none
  • NPN, negotiated HTTP1.1
  • SSL connection using TLSv1.2/ECDHE-RSA-AES128-GCM-SHA256
  • Server certificate:
  • ...(cert details)
  • SSL certificate verify ok.
  • ... (more POST details)
+0

あなたのコードの中で正しいと思いますが、それが間違っていれば、OpenSSLはおそらくあなたのcertパスとdevマシンに戻っているでしょう適切な証明書がインストールされていますが、プロダクションはインストールされていません。サーバーがcrtファイルを読み取るのを妨げる可能性のある、プロダクションに関する権限の問題はありますか? – drew010

+0

@ drew010私は証明書が正しいと思うが、多分私は間違っていると思います:もし私が 'CURLOPT_CAINFO'オプション(dev)を削除した場合、私はprodと同じエラーが出ます。私が手動で証明書を編集すると(時にはdevで)コードが動作する(驚く)場合があります。上記の 'readfile()'コマンドによって、証明書の内容が画面に正しく出力されることを考慮してください。 – BeetleJuice

+1

あなたのサーバの1つはWindowsで、もう1つはLinuxです。右?パスのフォーマットに問題はありますか? – blackpen

答えて

2

私はスクリプトがで仕事を得ることができましたcacert.pemtaken from here

という名前のファイルでのdevの環境でのみ働いていた.crtを置き換えることにより、両方の環境では、私はまだ起こっていた内容を正確に把握していないが、私はそれが何かを持っていることと思われます証明書の書式設定を行います。おそらく、Windows上のPHPは.crtを扱うことができますが、LinuxのPHPは対応できませんでした。私は最高評価の答えからアイデアを得ましたon another question.

+0

はい。問題を抱えた他の人たちも同じことをしたようです。良くやった! – blackpen

+0

@blackpenは時間をかけてくれてありがとうございました。親指は他の回答に属しています。+100からちょうど1離れています:-)ハッピーコーディング。 – BeetleJuice

関連する問題