2010-04-22 13 views
14

Ich verstehe, dass ich die Option auf eine bestimmte Instanz einstellen kann, aber was ich wirklich gerne wäre, ist etwas in der php.ini oder irgendwo ähnlich, die dies über alle Projekte und alle Instanzen behandeln wird.Wie kann ich CURLOPT_CAINFO global für PHP unter Windows einstellen?

Kennt jemand einen Weg für mich, dies zu erreichen?

EDIT: Ich bin besonders interessiert an einer Lösung, die die Zertifikate an verschiedenen Standorten auf verschiedenen Servern ermöglichen wird.

Ich entwickle auf einem Windows-Rechner, der dies benötigt, aber die Bereitstellung auf einem Linux-Server, der es nicht nur nicht benötigt, aber nicht den Pfad angegeben hat.

Ich verstehe, dass ich Bedingungen verwenden kann, um zu überprüfen, wo der Code ausgeführt wird, aber es lieber direkt aus der Box funktionieren würde. Es scheint mir, dass dies wirklich ein Problem für curl und PHP ist und nicht für meinen Code und daher gehören die Einstellungen dafür.

+1

Das ist genau das Problem in den Ordner würde ich auch lösen möchten. In meinem Fall verwende ich ein Framework, in dem alle curl-Aufrufe tief in der Klassenhierarchie eingekapselt sind, so dass ich, wenn es funktioniert, das Framework tatsächlich patchen müsste. Obwohl das nicht so schwierig ist, hat es offensichtliche Nachteile und Nachteile. Daher könnte die Möglichkeit, diese Option von außen einzustellen, sehr hilfreich sein. – jayarjo

Antwort

-1

Sie könnten eine Wrapper-Funktion erstellen, die die Option setzt und die Datei auto_prepend_file von php.ini zum Laden der Datei verwendet, in der sie definiert ist, aber der Code müsste geändert werden, um stattdessen diese Wrapper-Funktion zu verwenden.

Beispiel:

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

Ich sollte klarstellen, dass ich nach einer Lösung suche, die es mir ermöglicht, lokal unter Windows zu entwickeln, wo dies erforderlich ist, und auf einem anderen Server bereitzustellen, wo es nicht benötigt wird. – YonahW

6

Hier ist ein Patch zu ‚emulieren‘, was wir auf Linux sehen, wenn ein gültiges crt Daten zum Zeitpunkt der Erstellung gefunden worden (was der Fall für fast alle Distros ist):

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

es fügt ein (System) ini Einstellungen den Pfad zum cacert, curl.cainfo = c zu definieren: \ curl \ ca.crt

cacert Daten können hier geholt: http://curl.haxx.se/docs/caextract.html

DLL für PHP 5.3 finden Sie hier: http://www.php.net/~pierre/test/curl-5.3-vc9-x86-ts-nts-cainfodefault.zip DLL für PHP 5.2 finden Sie hier: http://www.php.net/~pierre/test/curl-5.2-cainfodefault.zip

Bitte lassen Sie mich wissen, wie es funktioniert.

+0

FYI: Ich habe den Patch auf php src angewendet, 5.3 und später. – Pierre

+0

Danke! Patched .dll für PHP 5.2 nts hat super funktioniert. (Win7, PHP 5.2 Distribution, die mit Zend Server CE kommt) –

+0

Links funktionieren nicht mehr, aber das ist genau das, was ich brauche – Matt

28

fand ich die Antwort hier (in den User Notes): http://php.net/manual/en/function.curl-setopt.php

Gerade diese ini Sie hinzufügen. (Anmerkung: Sie nicht ini_set verwenden können, obwohl ich weiß nicht, warum Sie wollen Thanks @ Carlton):

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

und Sie erhalten diese Datei aus: http://curl.haxx.se/docs/caextract.html

Works und Sie öffnen sich nicht für MITM-Angriffe bis

+0

Für diejenigen, die HexChat verwenden, wird es auch mit einer Zertifikatsliste ('Hexchat \ cert.pem '). Vorteil der Verwendung ist, dass es automatisch aktualisiert wird, wenn Sie HexChat aktualisieren. –

3

@ Matt ist richtig, aber ich möchte hinzufügen, dass curl.cainfo ist eine PHP_INI_SYSTEM Richtlinie, so dass Sie es in php.ini setzen muss ... mit der ini_set Funktion in einem Script wird immer false zurück als Ich fand nach zu vielen Minuten Kopfknallen

3
  1. herunterladen cacert.pem hinzufügen php
  2. URL Datei an die Stelle der Datei cacert.pem
  3. [curl] curl.cainfo="C:/xampp/php/cacert.pem"
Verwandte Themen