2010-04-22 25 views
14

Entiendo que puedo establecer la opción en cualquier instancia específica, sin embargo, lo que realmente me gustaría es configurar algo php.ini o similar que maneje esto en todos los proyectos y todas las instancias.¿Cómo puedo configurar CURLOPT_CAINFO globalmente para PHP en Windows?

¿Alguien sabe una manera de lograr esto?

EDIT: Estoy particularmente interesado en una solución que permita que los certificados estén en diferentes ubicaciones en diferentes servidores.

Estoy desarrollando una máquina con Windows que necesita esto pero que se implementa en un servidor Linux que no solo no lo necesita, sino que ni siquiera tiene la ruta indicada.

Entiendo que puedo usar las condiciones para comprobar dónde se está ejecutando el código, pero preferiría que funcione de la caja. Me parece que esto es realmente un problema para curl y para manejar PHP en lugar de mi código y, por lo tanto, las configuraciones para ello pertenecen allí.

+1

Eso es exactamente el problema que quisiera resolver también. En mi caso, estoy usando un framework, que tiene todas las llamadas curl encapsuladas en lo profundo de su jerarquía de clases, de modo que si necesito hacerlo funcionar, realmente necesitaría parchar el framework. Si bien esto no es tan difícil, tiene inconvenientes y negativos obvios. Por lo tanto, la posibilidad de establecer esta opción desde el exterior podría ser muy útil. – jayarjo

Respuesta

-1

Puede crear una función de envoltura que establezca la opción y usar el archivo auto_preparación de php.ini para cargar el archivo en el que está definido, pero su código debería ser cambiado para usar esta función de envoltura.

Ejemplo:

function my_curl_init($url=null) { 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/cert/ca.crt'); 
    return $ch; 
} 
+0

Debo aclarar que estoy buscando una solución que me permita desarrollar localmente en Windows donde sea necesario y desplegarlo en otro servidor donde no sea necesario. – YonahW

6

Aquí es un parche para 'emular' Lo que podemos ver en Linux cuando un dato CRT válida se ha encontrado en tiempo de compilación (que es el caso de casi todas las distribuciones):

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

que añade un (sistema) ajustes INI para definir la ruta a la cacert, curl.cainfo = c: \ rizo \ ca.crt

datos pueden ser CAcert fue a buscar aquí: http://curl.haxx.se/docs/caextract.html

DLL para PHP 5.3 se puede encontrar aquí: http://www.php.net/~pierre/test/curl-5.3-vc9-x86-ts-nts-cainfodefault.zip DLL para PHP 5.2 se puede encontrar aquí: http://www.php.net/~pierre/test/curl-5.2-cainfodefault.zip

Por favor, hágamelo saber cómo funciona.

+0

FYI: Apliqué el parche aplicado a php src, 5.3 y posterior. – Pierre

+0

Gracias! .Dll parcheado para PHP 5.2 nts funcionó muy bien. (Win7, PHP 5.2 distribución que viene con Zend Server CE) –

+0

Los enlaces ya no funcionan, pero esto es EXACTAMENTE lo que necesito también – Matt

28

he encontrado la respuesta aquí (en las notas de usuario): http://php.net/manual/en/function.curl-setopt.php

Sólo añadir esto a usted ini (nota:. No puede utilizar ini_set, aunque no sé por qué querría a Gracias @ Carlton):

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

y conseguir ese archivo desde: http://curl.haxx.se/docs/caextract.html

obras y no se está abriendo para los ataques MITM

+0

Para aquellos que usan HexChat, también vienen con una lista de certificados ('Hexchat \ cert.pem '). La ventaja de usarlo es que se actualizará automáticamente cada vez que actualice HexChat. –

3

@ Matt está bien, pero me gustaría añadir que curl.cainfo es una PHP_INI_SYSTEM Directiva por lo que debe establecer en php.ini ... usando la función ini_set en un script siempre devuelve falso como Me enteré después de demasiados minutos de golpear la cabeza

3
  1. descarga cacert.pem añadir a la carpeta php
  2. Copiar URL al lugar de cacert.pem archivo
  3. [curl] curl.cainfo="C:/xampp/php/cacert.pem"
Cuestiones relacionadas