Ich versuche, ein PHP-Skript mit cURL zu schreiben, das einen Benutzer über eine Seite autorisieren kann, die ein SSL-Zertifikat zusätzlich zu Benutzername und Kennwort verwendet, und ich kann nicht scheinen Nach der SSL-Zertifizierungsphase.Fehler bei der Verwendung von PHP cURL mit SSL-Zertifikaten
In diesem Fall ist curl_setopt($handle, CURLOPT_VERIFYPEER, 0)
leider keine Option. Das Zertifikat ist ein erforderlicher Teil der Authentifizierung, sonst erhalte ich den Fehler this other similar SO post.
ich ein paar Befehlszeile versucht habe läuft mit Curl:
> curl --url https://website
Dies gibt den (60) SLL certificate problem
Fehler. Wenn ich den Befehl gehören die --cacert
Option einstellen:
> curl --url https://website --cacert /path/to/servercert.cer
Es funktioniert gut; Die Auth-Website wird zurückgegeben.
Allerdings habe ich den folgenden PHP-Code versucht:
$handle = curl_init();
$options = array(
CURLOPT_RETURNTRANSFER => false,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_SSL_VERIFYHOST => '0',
CURLOPT_SSL_VERIFYPEER => '1',
CURLOPT_CAINFO => '/path/to/servercert.cer',
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_VERBOSE => true,
CURLOPT_URL => 'https://website'
);
curl_setopt_array($handle, $options);
curl_exec($handle);
if (curl_errno($handle)) {
echo 'Error: ' . curl_error($handle);
}
curl_close($handle);
ich den Code im Wesentlichen analog zu den Shell-Kommandos, war hätte gedacht, aber stattdessen bin ich mit der folgenden Fehlermeldung empfangen:
Error: error setting certificate verify locations: CAfile: /path/to/servercert.cer CApath: none
Ich habe die ganze Literatur gelesen, die ich finden kann (insbesondere auf php.net und curl.haxx) und kann nichts finden, das dieses Problem behebt. Irgendwelche Vorschläge?
EDIT: Ich habe chmod 777 servercert.cer
ohne Erfolg versucht. Bei der Ausführung des PHP-Skripts mit dem obigen Code von der Befehlszeile anstelle des Browsers über php test.php
funktioniert es jedoch einwandfrei. Irgendeine Erklärung warum es nicht im Browser funktioniert?
EDIT 2: Diese Drive-by-Downvotes über die einzigen Seelen, die mutig genug sind, diese Frage zu beantworten, werden alt. Tragen Sie bitte etwas Sinnvolles bei oder geben Sie bitte weiter.
Hat PHP definitiv die Erlaubnis, diese Datei zu lesen? Versuchen Sie, das Skript über die Befehlszeile auszuführen: php my.php – Greg
Seltsam! Ich habe es getestet, wie du gesagt hast, und es hat perfekt funktioniert! Warum sollte es von der Befehlszeile aus funktionieren, nicht aber vom Browser? – Magsol
http://serverfault.com/questions/121768/curl-or-ssl-problems-how-to-solve/297484#297484 –