
XAMPPでHTTPSに接続したときに「failed loading cafile stream」や「Failed to enable crypto」が出たら、CA証明書ファイルの設定を確認してみましょう。cURLとOpenSSLでは確認する項目が異なります。
こんなメッセージ出てませんか?
Warning: failed loading cafile stream: `C:\xampp\apache\bin\curl-ca-bundle.crt’ in…
Warning: simplexml_load_file(): Failed to enable crypto in…
上の例では、PHPが C:\xampp\apache\bin\curl-ca-bundle.crt を読み込もうとして失敗しています。
ただし、XAMPPなら必ずこの場所を使うわけではありません。まずは現在の設定を確認します。
まずphp.iniとCAファイルの設定を確認
phpinfo() を開き、以下の3項目を確認します。
Loaded Configuration Filecurl.cainfoopenssl.cafile
Loaded Configuration File には、現在PHPが読み込んでいる php.ini の場所が表示されます。
確認用のPHPファイルを作るなら、中身はこれだけでOKです。
<?php
phpinfo();
XAMPP公式でも、php.iniの変更が反映されない場合は Loaded Configuration File を確認するよう案内されています。
cacert.pemをダウンロード
CAファイルが無い、または参照先にファイルが存在しない場合は、curl公式サイトから cacert.pem をダウンロードします。
cacert.pem は、HTTPS接続時に相手の証明書を確認するためのCA証明書をまとめたファイルです。
ここでは例として、ダウンロードしたファイルを以下へ保存します。
C:\xampp\php\extras\ssl\cacert.pem
cURLを使っている場合
PHPのcURLでHTTPSへ接続している場合は、php.ini の curl.cainfo に先ほどのファイルを指定します。
curl.cainfo = "C:/xampp/php/extras/ssl/cacert.pem"
curl.cainfo は絶対パスで指定します。ファイル名は curl-ca-bundle.crt でなくても構いません。
simplexml_load_file()などでエラーが出る場合
simplexml_load_file() や file_get_contents() などでHTTPSのURLを読み込んでいる場合は、OpenSSL側の設定も確認します。
php.ini の openssl.cafile に同じCAファイルを指定します。
openssl.cafile = "C:/xampp/php/extras/ssl/cacert.pem"
cURLとOpenSSLの両方を使うなら、同じ cacert.pem をそれぞれ指定しておけばOKです。
curl.cainfo = "C:/xampp/php/extras/ssl/cacert.pem"
openssl.cafile = "C:/xampp/php/extras/ssl/cacert.pem"
今回と同じパスが表示されているなら
エラーに、
C:\xampp\apache\bin\curl-ca-bundle.crt
と表示されている場合は、PHPがそのファイルを読みに行っていることが分かります。
現在の設定をそのまま使いたいときは次の方法でも対処できます。
cacert.pemをダウンロード- ファイル名を
curl-ca-bundle.crtに変更 C:\xampp\apache\bin\に移動
cacert.pem は必ず curl-ca-bundle.crt という名前に変更しなければ使えないわけではありません。
PHPでは curl.cainfo や openssl.cafile でCAファイルを直接指定できるので、新しく設定するならこちらの方が参照先も分かりやすいです。
最後にApacheを再起動
php.ini 変更後はXAMPPのコントロールパネルからApacheを一度停止して再起動します。
これを忘れると設定が反映されないのでご注意を。
更新履歴
- 2026年10月4日:CA証明書の設定方法を見直し、
curl.cainfoとopenssl.cafileの確認手順を追加。特定のファイル名・保存先を前提とした説明も修正

コメント欄