ubuntuusers.de

php und curl im Terminal

Status: Gelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

Ok, also PHP nutzt das Zertifikatsbundle unter /etc/ssl/certs/ca-certificates.crt. Ist dein Zertifikat dort vorhanden? Es ist etwas gefrickel das rauszufinden, wenn du Java installiert hast, kannst du beispielsweise das keytool verwenden und dann nach dem Aussteller greppen:

keytool -printcert -v -file /etc/ssl/certs/ca-certificates.crt | grep Aussteller

Ansonsten eben einfach anhand der Zertifikatsgrenzen auseinander hacken und einzeln gucken:

openssl x509 -noout -subject -in einzelfile.crt

Wenn dein Zertifikat dort noch nicht vorhanden ist, dann kannst du es behelfsweise einfach hinten ranhängen, du solltest aber schauen, warum offenbar update-ca-certificates nicht funktioniert hat, wenn du ein Update bekommst, wird die Datei unter Umständen überschrieben.

holimatic

(Themenstarter)
Avatar von holimatic

Anmeldungsdatum:
15. Dezember 2009

Beiträge: 405

Wohnort: Rotkreuz

misterunknown schrieb:

Ok, also PHP nutzt das Zertifikatsbundle unter /etc/ssl/certs/ca-certificates.crt. Ist dein Zertifikat dort vorhanden? Es ist etwas gefrickel das rauszufinden, wenn du Java installiert hast, kannst du beispielsweise das keytool verwenden und dann nach dem Aussteller greppen:

keytool -printcert -v -file /etc/ssl/certs/ca-certificates.crt | grep Aussteller

keytool habe ich jetzt installiert. Mit dem Befehl von oben wird nichts auf der Konsole ausgegeben.

Wenn dein Zertifikat dort noch nicht vorhanden ist, dann kannst du es behelfsweise einfach hinten ranhängen, du solltest aber schauen, warum offenbar update-ca-certificates nicht funktioniert hat, wenn du ein Update bekommst, wird die Datei unter Umständen überschrieben.

Ich habe dann behelfsweise mein pem File hinten an ca-certificates.crt angehängt. Damit geht aber weder das keytool noch mein php index.php File. Nun bin ich ziemlich ratlos.

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

Wenn ich das richtig im Überblick habe, ist die von dir erwähnte PEM-Datei das Zertifikat des Servers, auf den du zugreifen willst. Und dieses Zertifikat wird dir im Speicher für Zertifizierungsstellen wenig helfen, da hier in der Regel ein paar kritische Optionen deaktiviert sind - z.B. die Möglichkeit, als Zertifizierungsstelle aufzutreten.

Ich habe nochmal ganz hart nachgedacht (Ok, ok, ich bin zufällig beim Nachbauen darauf aufmerksam geworden. 😉 und möchte mich mal mit deinem Quelltext auseinandersetzen.

holimatic schrieb:

1
curl_setopt($curl, CURLOPT_URL, "https://username:password@".$host.$path.$param);

Hast du bereits überprüft, dass diese Code-Zeile wirklich (in jedem Fall) den richtigen URL generiert?

Was passiert, wenn du den Teil mit username:password@ weglässt? Du kannst dich nicht mehr anmelden, ok, aber bekommst du dann immernoch Fehlermeldungen wegen des Zertifikats? Alternativ: Laut Doku kannst du Benutzer und Passwort auch direkt mit setopt setzen (CURLOPT_USERNAME, CURLOPT_USERPWD). Vielleicht ändert das ja was.

Nehmen wir an, das hat nicht funktioniert, dann würde ich zumindest nochmal schauen, ob der $host richtig definiert wird und der $PATH in jedem Fall auch richtig vom Host abgegrenzt. Ich meine, es gibt sogar einen RFC, der sagt, dass mehrfach am Stück vorkommende Schrägstriche (/) immer auf einen zusammengestrichen werden sollen. Nach dem Ansatz könntest du ja versuchen, $host."/".$path zu schreiben.

holimatic

(Themenstarter)
Avatar von holimatic

Anmeldungsdatum:
15. Dezember 2009

Beiträge: 405

Wohnort: Rotkreuz

Cranvil schrieb:

holimatic schrieb:

1
curl_setopt($curl, CURLOPT_URL, "https://username:password@".$host.$path.$param);

Nehmen wir an, das hat nicht funktioniert, dann würde ich zumindest nochmal schauen, ob der $host richtig definiert wird und der $PATH in jedem Fall auch richtig vom Host abgegrenzt. Ich meine, es gibt sogar einen RFC, der sagt, dass mehrfach am Stück vorkommende Schrägstriche (/) immer auf einen zusammengestrichen werden sollen. Nach dem Ansatz könntest du ja versuchen, $host."/".$path zu schreiben.

Na ja, das war tatsächlich der Fehler $host."/".$path, ich hatte keinen Schrägstrich dazwischen 👿

Vielen Dank an Cranvil und an misterunknown für die Hinweise und eure Geduld, 2 Tage am falschen Ort gesucht und was gelernt.

Ich setze auf gelöst...

Antworten |