Как я могу установить CURLOPT_CAINFO глобально для PHP на Windows? - PullRequest
19 голосов
/ 23 апреля 2010

Я понимаю, что могу установить опцию для любого конкретного экземпляра, однако, что мне действительно нужно, это настроить что-то вроде php.ini или что-то подобное, что будет обрабатывать это во всех проектах и ​​во всех экземплярах.

Кто-нибудь знает, как мне это сделать?

EDIT: Меня особенно интересует решение, которое позволит размещать сертификаты в разных местах на разных серверах.

Я занимаюсь разработкой на машине с Windows, которая нуждается в этом, но развертывается на сервере Linux, который не только не нуждается в нем, но даже не имеет указанного пути.

Я понимаю, что могу использовать условия, чтобы проверить, где выполняется код, но предпочел бы, чтобы он работал "из коробки". Мне кажется, что это действительно проблема для curl и PHP, а не для моего кода, и, следовательно, настройки для него там.

Ответы [ 5 ]

37 голосов
/ 28 декабря 2012

Я нашел ответ здесь (в заметках пользователя): 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-атак

6 голосов
/ 22 марта 2011

Вот патч для «эмуляции» того, что мы можем видеть в linux, когда во время сборки были найдены действительные данные crt (что имеет место почти для всех дистрибутивов):

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

DLL для php 5.3 можно найти здесь: 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

Пожалуйста, дайте мне знать, как это работает.

5 голосов
/ 10 августа 2016
  1. скачать cacert.pem добавить в папку php
  2. скопировать ссылку на место файла cacert.pem
  3. [curl] curl.cainfo="C:/xampp/php/cacert.pem"
4 голосов
/ 04 июля 2013

@ Мэтт прав, но я бы добавил, что curl.cainfo является директивой PHP_INI_SYSTEM , поэтому вы должны установить ее в php.ini ... использование в скрипте функции ini_set всегда будет возвращать false, как я выяснил после слишком многих минут стука по голове

0 голосов
/ 23 апреля 2010

Вы можете создать функцию-обертку, которая задает опцию, и использовать файл auto_prepend_file в php.ini для загрузки файла, в котором он определен, но ваш код должен быть изменен, чтобы использовать эту функцию-обертку.

Пример:

function my_curl_init($url=null) {
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/cert/ca.crt');
  return $ch;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...