cacert - ¿Cómo puedo configurar CURLOPT_CAINFO globalmente para PHP en Windows?
curl ca bundle crt (5)
Entiendo que puedo configurar la opción en cualquier instancia específica, sin embargo, lo que realmente me gustaría es configurar algo en php.ini o en algún lugar similar que maneje esto en todos los proyectos y todas las instancias.
¿Alguien sabe una manera de lograr esto?
EDITAR: Estoy particularmente interesado en una solución que permita que los certificados se encuentren en diferentes ubicaciones en diferentes servidores.
Estoy desarrollando en una máquina Windows que necesita esto, pero implementando en un servidor Linux que no solo no lo necesita, sino que incluso no tiene la ruta indicada.
Entiendo que puedo usar las condiciones para verificar dónde se está ejecutando el código, pero preferiría que funcionara de la caja. Me parece que esto es realmente un problema para que Curl y PHP lo manejen en lugar de mi código y, por lo tanto, las configuraciones para ellos pertenecen allí.
- descargar cacert.pem agregar a la carpeta php
- copiar url el lugar del archivo cacert.pem
-
[curl] curl.cainfo="C:/xampp/php/cacert.pem"
@Matt tiene razón, pero agregaría que curl.cainfo es una directiva PHP_INI_SYSTEM , por lo que debe configurarlo en php.ini ... el uso de la función ini_set en un script siempre devolverá el valor falso, como descubrí luego de demasiados minutos de cabecera golpeando
Aquí hay un parche para "emular" lo que podemos ver en linux cuando se han encontrado datos crt válidos en el momento de la compilación (que es el caso de casi todas las distribuciones):
http://www.php.net/~pierre/patches/curl_cacert_default.txt
agrega una configuración ini (del sistema) para definir la ruta al cacert, curl.cainfo = c: / curl / ca.crt
Los datos de cacert se pueden obtener 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, déjame saber cómo funciona.
Encontré la respuesta aquí (en las notas de usuario): http://php.net/manual/en/function.curl-setopt.php
Solo ini_set
esto .ini (nota: no puedes usar ini_set
, aunque no sé por qué quieres hacerlo. Gracias, @Carlton):
curl.cainfo=c:/php/cacert.pem
Y obtenga ese archivo de: http://curl.haxx.se/docs/caextract.html
Funciona y no te estás abriendo para los ataques MITM
Podría crear una función de ajuste que establezca la opción y usar el auto_prepend_file de php.ini para cargar el archivo en el que está definido, pero su código tendría que cambiarse para usar esta función de ajuste.
Ejemplo:
function my_curl_init($url=null) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CAINFO, getcwd().''/cert/ca.crt'');
return $ch;
}