私はWindows 7上でXAMPPの一部としてPHPバージョン5.6.3を実行しています。
Mandrill APIを使用しようとすると、次のようなエラーが表示されます。
メッセージ「messages/send-templateへのAPI呼び出しに失敗しました:SSL証明書の問題:ローカル発行者証明書を取得できません」を伴う例外「Mandrill_HttpError」を検出できませんでした
私はすでにStackOverflowで読んだすべてのことを試してみました。php.iniファイルに以下を追加することも含みます。
curl.cainfo = "C:\xampp\php\cacert.pem"
そしてもちろんその場所にcacert.pemファイルを http://curl.haxx.se/docs/caextract.htmlからダウンロードしました
しかし、それでもやはり、XAMPPとApacheサーバを再起動しても同じエラーが発生します。
私は本当に他に何を試すべきかわからない。
誰が私が他に何ができるかについて助言することができますか?
ついにこれが動作するようになりました!
証明書バンドル をダウンロードしてください。
どこかに置いてください。私の場合、それはc:\wamp\
ディレクトリでした(あなたがWamp 64ビットを使っているならそれはc:\wamp64\
です)。
Apacheでmod_ssl
を、php_openssl.dll
でphp.ini
を有効にします(最初に;
を削除してコメントを外します)。しかし、注意してください。私の問題は、2つのphp.ini
ファイルがあり、両方でこれを実行する必要があることです。一つはあなたがあなたのWAMPタスクバーアイコンから得るもので、もう一つは私の場合はC:\wamp\bin\php\php5.5.12\
です。
両方のphp.ini
ファイルであなたの証明書にこれらの行を追加してください:
curl.cainfo="C:/wamp/cacert.pem"
openssl.cafile="C:/wamp/cacert.pem"
Wampサービスを再起動してください。
免責事項:このコードはあなたのサーバーを危険にさらします。
Mandrill.phpファイルの65行目以降に同じ問題があり、そこで$ this-> ch = curl_init();となっています。
次の2行を追加してください。
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
これで私の問題は解決し、localhostを使って電子メールを送ることができましたが、ライブバージョンliveでは使わないことをお勧めします。ライブサーバーでは、このコードがなくてもコードは機能するはずです。
ありがとう@Mladen Janjetovic、
あなたの提案はamppsがインストールされたMacで私のために働きました。
コピー: http://curl.haxx.se/ca/cacert.pem
宛先: /Applications/AMPPS/extra/etc/openssl/certs/cacert.pem
そしてそのパスでphp.ini
を更新してApacheを再起動しました。
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"
openssl.cafile="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"
そしてWindows AMPPSのインストールで同じ設定を適用し、それもそれで完璧に働いた。
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="C:/Ampps/php/extras/ssl/cacert.pem"
openssl.cafile="C:/Ampps/php/extras/ssl/cacert.pem"
:wampと同じです。
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem"
openssl.cafile="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem"
LocalhostにSANを使用して新しいSSL証明書を生成することを探しているなら、 この記事のステップCentos 7 / Vagrant / Chrome Browser
で私のために働きました。
http://curl.haxx.se/docs/caextract.html ページを見ると、大きな文字で次のセクションがあります。
RSA-1024を取り外した
それを読んでから、 'RSA-1024'証明書を含む証明書のバージョンをダウンロードしてください。 https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt
それらはマンドリルで動作します。
SSLを無効にするのは悪い考えです。
上記の手順は、Windows 8では役に立ちましたが、うまくいきませんでした。相互関係はわかりませんが、以下の手順はうまくいきました。基本的にcacert.pemファイルの変更。これが誰かに役立つことを願っています。
私はカールを呼び出すために必要な認定を受けていない新しいソリューションを見つけただけで2行のコードを追加します。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
php.ini にアクセスできない場合は、($ch = curl_init();
行の後に)このコードを追加しても問題ありません。
$certificate_location = "C:\Program Files (x86)\EasyPHP-Devserver-16.1\ca-bundle.crt"; // modify this line accordingly (may need to be absolute)
curl_setopt($ch, CURLOPT_CAINFO, $certificate_location);
curl_setopt($ch, CURLOPT_CAPATH, $certificate_location);
それから、 ca-bundle.crt をダウンロードして$certificate_location
で指定した場所に保存するだけです。
サーバー配備のための上記の答えを詳しく述べる。
$hostname = gethostname();
if($hostname=="mydevpc")
{
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
デプロイ時にサーバーを損なうことなく開発環境のためのトリックをするべきです。
上記の解決策がどれもうまくいかない場合は、XAMPPインストールを新しいバージョンにアップデートしてみてください。
私はphp 5.5.11でXAMPPを走らせていました、同じ正確なコードは働かなかった、私はphp 5.6.28でXAMPPにアップグレードして、そして上記の解決策は働きました。
さらにPHPを更新するだけではうまくいきませんでしたが、そのバージョンのXAMPPでApacheとphpの設定を組み合わせたようです。
誰かに役立つことを願っています。
これを試してみた
開いた
vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php
そしてこれを変える
$conf[CURLOPT_SSL_VERIFYHOST] = 2;
`enter code here`$conf[CURLOPT_SSL_VERIFYPEER] = true;
これに
$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;
私はこの問題を非常に簡単に解決しました。証明書ファイルなしでこれを実行できます。
Laravelルートフォルダ - > Vender - > guzzlehttp - > guzzle - > src に進んでください。
open - Client.php
$ defaults配列を見つけます。それはこのように見えます..
$defaults = [
'allow_redirects' => RedirectMiddleware::$defaultSettings,
'http_errors' => true,
'decode_content' => true,
'verify' => true,
'cookies' => false
];
今の主な仕事は verify / keyの値を変更することです。
'verify' => false,
そのため、これ以降はSSL証明書のCURL要求をチェックしません...この解決策は私にとってはうまくいきます。私は多くの研究の結果この解決策を見つけました...
私はエラーが発生しました:
failed loading cafile stream: `C:\xamppPhp\Apache\bin\curl-ca-bundle.crt`
私はwindows machineを使っています。だから私は以下のステップに従った。
1. I have downloaded .pem file from " https://curl.haxx.se/docs/caextract.html "
2. Then I kept the downloaded file inside "C:/xamppPhp/Apache/bin/" folder and renamed the same downloaded file to "curl-ca-bundle.crt".
3. I restarted XAMPP and cleared the cache.
4. It's done.
誰かに役立つことを願っています
AppVeyorでアプリをビルドしているときに同じ問題が発生しました。
c:\php
に https://curl.haxx.se/ca/cacert.pem をダウンロードしてくださいecho extension=php_openssl.dll >> c:\php\php.ini
echo curl.cainfo=c:\php\cacert.pem >> c:\php\php.ini
を探します