it-swarm.com.de

PHP - Fehler beim SSL-Zertifikat: Kein lokales Ausstellerzertifikat abgerufen

Ich führe PHP Version 5.6.3 als Teil von XAMPP unter Windows 7 aus.

Wenn ich versuche, die Mandrill-API zu verwenden, erhalte ich die folgende Fehlermeldung:

Nicht erfasste Ausnahme 'Mandrill_HttpError' mit der Nachricht 'API-Aufruf an Nachrichten/Sendevorlage fehlgeschlagen: Problem mit SSL-Zertifikat: Kein lokales Aussteller-Zertifikat abrufen'

Ich habe alles, was ich über StackOverflow gelesen habe, bereits ausprobiert, einschließlich der folgenden Datei in die Datei php.ini eingefügt:

curl.cainfo = "C:\xampp\php\cacert.pem"

Und natürlich hat die Datei cacert.pem von http://curl.haxx.se/docs/caextract.html heruntergeladen.

nach all dem wurde der XAMPP- und Apache-Server neu gestartet, wobei jedoch immer noch derselbe Fehler angezeigt wurde.

Ich weiß wirklich nicht, was ich sonst noch versuchen soll.

Kann jemand raten, was ich sonst noch probieren kann?

134
Dor Dadush

Endlich hat es funktioniert!

  1. Laden Sie das Paket certificate herunter.

  2. Legen Sie es irgendwo hin. In meinem Fall war dies c:\wamp\ Verzeichnis (wenn Sie Wamp 64 Bit verwenden, ist es c:\wamp64\).

  3. Aktivieren Sie mod_ssl in Apache und php_openssl.dll in php.ini (entfernen Sie das Kommentarzeichen, indem Sie ; am Anfang entfernen). Aber seien Sie vorsichtig, mein Problem war, dass ich zwei php.ini-Dateien hatte und ich muss dies in beiden tun. Eine ist diejenige, die Sie von Ihrem WAMP-Taskleistensymbol erhalten, und eine andere ist in meinem Fall in C:\wamp\bin\php\php5.5.12\.

  4. Fügen Sie Ihrem cert diese Zeilen in beiden php.ini-Dateien hinzu:

    curl.cainfo="C:/wamp/cacert.pem"
    openssl.cafile="C:/wamp/cacert.pem"
    
  5. Starten Sie die Wamp-Dienste neu.

265

Haftungsausschluss: Dieser Code macht Ihren Server unsicher.

Ich hatte das gleiche Problem in der Mandrill.php-Datei nach Zeile 65, wo $ this-> ch = curl_init () steht;

Fügen Sie folgende zwei Zeilen hinzu:

curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);

Dies löste mein Problem und verschickte E-Mails mit localhost, aber ich schlage vor, es NICHT live in der Live-Version zu verwenden. Auf Ihrem Live-Server sollte der Code ohne diesen Code funktionieren.

97

Vielen Dank @Mladen Janjetovic,

Ihr Vorschlag hat für mich in Mac mit installierten Ampps funktioniert.

Kopiert:http://curl.haxx.se/ca/cacert.pem

An:/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem

Und php.ini mit diesem Pfad aktualisiert und Apache neu gestartet:

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"
openssl.cafile="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"

Und dieselbe Einstellung in Windows AMPPS-Installation angewendet und es hat auch perfekt funktioniert.

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="C:/Ampps/php/extras/ssl/cacert.pem"
openssl.cafile="C:/Ampps/php/extras/ssl/cacert.pem"

: Gleiches für Wamp.

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem"
openssl.cafile="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem"

Wenn Sie nach einem neuen SSL-Zertifikat mit SAN für localhost suchen, führen Sie die Schritte auf diesem Beitrag für mich auf Centos 7 / Vagrant / Chrome Browser aus.

39
Damodar Bashyal

Wenn Sie die Seite http://curl.haxx.se/docs/caextract.html anzeigen, sehen Sie in großen Buchstaben einen Abschnitt mit dem Namen:

RSA-1024 entfernt

Lesen Sie es und laden Sie dann die Version der Zertifikate herunter, die die 'RSA-1024'-Zertifikate enthält. https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt

Die werden mit Mandrill funktionieren.

SSL zu deaktivieren ist eine schlechte Idee.

18
Arturo Alvarado

Die obigen Schritte waren zwar hilfreich, funktionierten jedoch nicht für Windows 8. Ich kenne die Beziehung nicht, aber die folgenden Schritte haben funktioniert. Grundsätzlich eine Änderung in der Datei cacert.pem. Hoffe das hilft jemandem.

  • Laden Sie die Datei cacert.pem hier herunter: http://curl.haxx.se/docs/caextract.html
  • Speichern Sie die Datei in Ihrem PHP Installationsordner. (Beispiel: Wenn Sie xampp verwenden, speichern Sie es in c:\Installationsverzeichnis\xampp\php\cacert.pem). 
  • Öffnen Sie Ihre php.ini-Datei und fügen Sie folgende Zeilen hinzu:
  • curl.cainfo = "C:\Installationsverzeichnis\xampp\php\cacert.pem" openssl.cafile = "C:\Installationsverzeichnis\xampp\php\cacert.pem" 
  • Starten Sie Ihren Apache-Server neu, und dies sollte behoben werden (stoppen und starten Sie nach Bedarf die Serverdienste.).
10
HopeKing

Ich habe eine neue Lösung gefunden, ohne dass eine Zertifizierung erforderlich ist.

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
7
Manish sharma

Wenn Sie keinen Zugriff auf php.ini haben, funktioniert das Hinzufügen dieses Codes (nach Ihrer $ch = curl_init();-Zeile) für mich:

$certificate_location = "C:\Program Files (x86)\EasyPHP-Devserver-16.1\ca-bundle.crt"; // modify this line accordingly (may need to be absolute)
curl_setopt($ch, CURLOPT_CAINFO, $certificate_location);
curl_setopt($ch, CURLOPT_CAPATH, $certificate_location);

Dann müssen Sie nur die Datei ca-bundle.crt herunterladen und an dem in $certificate_location angegebenen Speicherort speichern.

6

ausarbeiten der obigen Antworten für die Serverbereitstellung.

$hostname = gethostname();
if($hostname=="mydevpc")
{
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}

sollte den Trick für die Entwicklungsumgebung tun, ohne den Server bei der Bereitstellung zu beeinträchtigen.

2
Noel

Wenn keine der oben genannten Lösungen funktioniert, versuchen Sie, Ihre XAMPP-Installation auf eine neuere Version zu aktualisieren.

Ich habe XAMPP mit PHP 5.5.11 ausgeführt, derselbe genaue Code hat nicht funktioniert, ich habe ein Upgrade auf XAMPP mit PHP 5.6.28 durchgeführt und die oben genannten Lösungen haben funktioniert.

Außerdem funktionierte nur das Aktualisieren von PHP nicht oder es scheint eine Kombination von Apache- und PHP-Einstellungen in dieser Version von XAMPP zu sein.

Hoffe es hilft jemandem.

0
ccrez

Ich habe versucht, dass es funktioniert

öffnen

vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php

und ändern Sie dies

 $conf[CURLOPT_SSL_VERIFYHOST] = 2;
 `enter code here`$conf[CURLOPT_SSL_VERIFYPEER] = true;

dazu

$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;
0
Yuan Libres

Ich habe eine sehr einfache Lösung für dieses Problem. Sie können dies auch ohne Zertifikatdatei tun.

Gehen Sie auf Laravel Root Folder -> Vender -> guzzlehttp -> guzzle -> src

öffnen Sie Client.php

$ default Array finden. das sieht so aus ..

$defaults = [
    'allow_redirects' => RedirectMiddleware::$defaultSettings,
    'http_errors'     => true,
    'decode_content'  => true,
    'verify'          => true,
    'cookies'         => false
];

Jetzt ist der Hauptjob, den Wert von verify zu ändern.

'verify'          => false,

Danach wird das SSL-Zertifikat nicht auf CURL-Anforderung geprüft ... Diese Lösung ist für mich eine Arbeit. Ich finde diese Lösung nach vielen Recherchen ...

0
pankaj

Ich habe den Fehler wie folgt erhalten:

failed loading cafile stream: `C:\xamppPhp\Apache\bin\curl-ca-bundle.crt`

Ich benutze Windows-Maschine. Also folgte ich den folgenden Schritten.

1. I have downloaded .pem file from " https://curl.haxx.se/docs/caextract.html "

2. Then I kept the downloaded file inside  "C:/xamppPhp/Apache/bin/" folder and renamed the same downloaded file to "curl-ca-bundle.crt".

3. I restarted XAMPP and cleared the cache.
4. It's done.

Hoffe es kann jemandem helfen

0

Ich hatte das gleiche Problem beim Erstellen meiner App in AppVeyor.

0
Facedown