にこれは私の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)
あなたのコードの中で正しいと思いますが、それが間違っていれば、OpenSSLはおそらくあなたのcertパスとdevマシンに戻っているでしょう適切な証明書がインストールされていますが、プロダクションはインストールされていません。サーバーがcrtファイルを読み取るのを妨げる可能性のある、プロダクションに関する権限の問題はありますか? – drew010
@ drew010私は証明書が正しいと思うが、多分私は間違っていると思います:もし私が 'CURLOPT_CAINFO'オプション(dev)を削除した場合、私はprodと同じエラーが出ます。私が手動で証明書を編集すると(時にはdevで)コードが動作する(驚く)場合があります。上記の 'readfile()'コマンドによって、証明書の内容が画面に正しく出力されることを考慮してください。 – BeetleJuice
あなたのサーバの1つはWindowsで、もう1つはLinuxです。右?パスのフォーマットに問題はありますか? – blackpen