web-dev-qa-db-ja.com

WindowsでPHP)のCURLOPT_CAINFOをグローバルに設定するにはどうすればよいですか?

特定のインスタンスにオプションを設定できることを理解していますが、実際に必要なのは、すべてのプロジェクトとすべてのインスタンスでこれを処理するphp.iniなどを設定することです。

誰かが私がこれを達成する方法を知っていますか?

編集:私は証明書が異なるサーバーの異なる場所にあることを可能にするソリューションに特に興味があります。

私はこれを必要とするWindowsマシンで開発していますが、それを必要としないだけでなく、パスも示されていないLinuxサーバーに展開しています。

条件を使用してコードがどこで実行されているかを確認できることを理解していますが、そのまま使用することを望んでいます。これは実際にはcurlの問題であり、コードではなくPHPが処理する必要があるため、その設定がそこに属しているようです。

20
YonahW

私はここ(ユーザーノート)で答えを見つけました: http://php.net/manual/en/function.curl-setopt.php

これを.iniに追加するだけです(注:ini_set、理由はわかりませんが。ありがとう@Carlton):

curl.cainfo=c:\php\cacert.pem

そして、そのファイルを以下から取得します: http://curl.haxx.se/docs/caextract.html

機能し、あなたはMITM攻撃に開放されていません

37
Matt

これは、ビルド時に有効なcrtデータが見つかったときにLinuxで表示できるものを「エミュレート」するパッチです(ほとんどすべてのディストリビューションに当てはまります)。

http://www.php.net/~pierre/patches/curl_cacert_default.txt

(システム)ini設定を追加して、cacertへのパスを定義します。curl.cainfo= c:\ curl\ca.crt

cacertデータはここで取得できます: http://curl.haxx.se/docs/caextract.html

Php 5.3のDLLはここにあります: http://www.php.net/~pierre/test/curl-5.3-vc9-x86-ts-nts-cainfodefault.Zip DLL php 5.2はここにあります: http://www.php.net/~pierre/test/curl-5.2-cainfodefault.Zip

仕組みを教えてください。

6
Pierre
  1. cacert.pemをダウンロードしてphpフォルダーに追加
  2. cacert.pemファイルの場所にURLをコピーします
  3. [curl] curl.cainfo="C:/xampp/php/cacert.pem"
5
Mohamed Fanane

@Mattは正しいですが、curl.cainfoPHP_INI_SYSTEMディレクティブであるため、php.ini ...で設定する必要があります。スクリプトでini_set関数を使用すると、何分もヘッドバンギングをした後にわかったので、常にfalseを返します。

4
Carlton