web-dev-qa-db-ja.com

PHP - SSL証明書エラー:ローカル発行者証明書を取得できません

私は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サーバを再起動しても同じエラーが発生します。

私は本当に他に何を試すべきかわからない。

誰が私が他に何ができるかについて助言することができますか?

145
Dor Dadush

ついにこれが動作するようになりました!

  1. 証明書バンドル をダウンロードしてください。

  2. どこかに置いてください。私の場合、それはc:\wamp\ディレクトリでした(あなたがWamp 64ビットを使っているならそれはc:\wamp64\です)。

  3. Apacheでmod_sslを、php_openssl.dllphp.iniを有効にします(最初に;を削除してコメントを外します)。しかし、注意してください。私の問題は、2つのphp.iniファイルがあり、両方でこれを実行する必要があることです。一つはあなたがあなたのWAMPタスクバーアイコンから得るもので、もう一つは私の場合はC:\wamp\bin\php\php5.5.12\です。

  4. 両方のphp.iniファイルであなたの証明書にこれらの行を追加してください:

    curl.cainfo="C:/wamp/cacert.pem"
    openssl.cafile="C:/wamp/cacert.pem"
    
  5. Wampサービスを再起動してください。

286

免責事項:このコードはあなたのサーバーを危険にさらします。

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では使わないことをお勧めします。ライブサーバーでは、このコードがなくてもコードは機能するはずです。

103

ありがとう@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で私のために働きました。

41
Damodar Bashyal

http://curl.haxx.se/docs/caextract.html ページを見ると、大きな文字で次のセクションがあります。

RSA-1024を取り外した

それを読んでから、 'RSA-1024'証明書を含む証明書のバージョンをダウンロードしてください。 https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt

それらはマンドリルで動作します。

SSLを無効にするのは悪い考えです。

18
Arturo Alvarado

上記の手順は、Windows 8では役に立ちましたが、うまくいきませんでした。相互関係はわかりませんが、以下の手順はうまくいきました。基本的にcacert.pemファイルの変更。これが誰かに役立つことを願っています。

  • ここからcacert.pemファイルをダウンロードしてください: http://curl.haxx.se/docs/caextract.html
  • ファイルをPHPインストールフォルダに保存します。 (例:xamppを使用している場合 - c:\ Installation_Dir\xampp\php\cacert.pemに保存してください。).
  • Php.iniファイルを開き、以下の行を追加します。
  • curl.cainfo =” C:\ Installation_Dir\xampp\php\cacert.pem” openssl.cafile =” C:\ Installation_Dir\xampp\php\cacert.pem”
  • あなたのApacheサーバを再起動すればそれはそれを修正するでしょう(単に必要に応じてサービスを停止して開始する)。
10
HopeKing

私はカールを呼び出すために必要な認定を受けていない新しいソリューションを見つけただけで2行のコードを追加します。

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
9
Manish sharma

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で指定した場所に保存するだけです。

7

サーバー配備のための上記の答えを詳しく述べる。

$hostname = gethostname();
if($hostname=="mydevpc")
{
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}

デプロイ時にサーバーを損なうことなく開発環境のためのトリックをするべきです。

2
Noel

上記の解決策がどれもうまくいかない場合は、XAMPPインストールを新しいバージョンにアップデートしてみてください。

私はphp 5.5.11でXAMPPを走らせていました、同じ正確なコードは働かなかった、私はphp 5.6.28でXAMPPにアップグレードして、そして上記の解決策は働きました。

さらにPHPを更新するだけではうまくいきませんでしたが、そのバージョンのXAMPPでApacheとphpの設定を組み合わせたようです。

誰かに役立つことを願っています。

0
ccrez

これを試してみた

開いた

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;
0
Yuan Libres

私はこの問題を非常に簡単に解決しました。証明書ファイルなしでこれを実行できます。

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要求をチェックしません...この解決策は私にとってはうまくいきます。私は多くの研究の結果この解決策を見つけました...

0
pankaj

私はエラーが発生しました:

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.

誰かに役立つことを願っています

0

AppVeyorでアプリをビルドしているときに同じ問題が発生しました。

  • c:\phphttps://curl.haxx.se/ca/cacert.pem をダウンロードしてください
  • Opensslを有効にするecho extension=php_openssl.dll >> c:\php\php.ini
  • Certificateecho curl.cainfo=c:\php\cacert.pem >> c:\php\php.iniを探します
0
Facedown