Entwickler-Ecke

Internet / Netzwerk - Indy verursacht 500 Server Errror?


mats - Mi 23.01.19 14:40
Titel: Indy verursacht 500 Server Errror?
Hallo,

mein Programm nimmt Daten aus einer Maske und schickt sie als String via HTTP an ein PHP-Script auf dem Server. Dieses stellt die Verbindung zur Datenbank her (MariaDB) und die Datenbankklasse schickt die einzelnen Daten (alles Strings) an den DB-Server und der trägt die Daten in die Tabellen ein.
Dazu habe ich TIdHTTP benutzt. Zuerst nur Local (Win7, Apache, MariaDB und PHP). Funktioniert wirklich sehr zuverlässig.
Jetzt habe ich ich die PHP-Scripte und die Datenbank auf den InternetServer kopiert/portiert und ich erhalte beim Zugriff HTTP/1.1 500 internal server error. Wie gesagt: Local alles bestens schreiben und lesen der DB -> keine Probleme.

result := Server.Post('https://myDomain.de/ws/WebServiceBasic.php', ParamList);

Meine einzige Idee: es könnte am httpS liegen. Muß ich da vielleicht ein paar SSL Bibliotheken laden? Leider weiß ich da wenig bescheidt und nicht wie. Oder die Serverkonfiguration? Keinen blassen Schimmer ???

Kann Hilfe dringend brauchen.

Danke schon mal...

mats


Narses - Mi 23.01.19 17:04

Moin!

Indy braucht für SSL tatsächlich zusätzliche Bibliotheken, such mal nach Indy+SSL, da sollte es schon ausreichend Material geben. :idea: :les: ;)

cu
Narses


Delete - Mi 23.01.19 17:06

- Nachträglich durch die Entwickler-Ecke gelöscht -


mats - Mi 23.01.19 17:57

Hallo Frühlingsrolle,

hat leider nicht funktioniert. Die Fehlermeldungen (Fehler1.png, Fehler2.png im Anhang) sind gleich geblieben. Wobei Fehler2.png der Ausschnitt ist, wo der Fehler auftritt. Ich seh da leider nicht durch, aber vielleicht kannst Du/Ihr daraus den Fehler ableiten?


mats


Delete - Mi 23.01.19 18:44

- Nachträglich durch die Entwickler-Ecke gelöscht -


jaenicke - Mi 23.01.19 19:29

Bei SSL Problemen sollte auch eine entsprechende Fehlermeldung kommen, das wird es nicht sein, nein. Was passiert denn, wenn du die URL im Browser aufrufst? Hast du im Skript eine Fehlerbehandlung drin für den Fall von fehlenden Parametern, Problemen mit der DB-Verbindung usw.?

Du kannst z.B. an den Anfang des Skripts eine Ausgabe setzen und den Rest des Skripts überspringen und dich dann schrittweise herantasten ab wann der interne Serverfehler kommt.

Die SSL Einrichtung wie von user profile iconFrühlingsrolle beschrieben brauchst du aber natürlich so oder so.


mats - Mi 23.01.19 20:52

Hallo,

ich denke auch das es am Server liegt.

Ich habe da ein Problem mit dem Zertifikat (1&1) gefunden. Ich habe folgende Schlüssel:
_.DOMAIN.de_private_key.key
-.DOMAIN.de_ssl_certificate_INTERMEDIATE.cer
DOMAIN.de_ssl_certificate.cer

Aber mir fehlen zwei Schlüssel:
Zertifikat (*.crt)
*CA-Zertifikat (*-ca.crt)

Ich hab nicht gefunden wie ich da ran komme. Vielleicht liegt es ja daran?

mats


Narses - Mi 23.01.19 21:15

Moin!

Nur aus den Dateinamen geraten: das erste ist der private Schlüssel für das letzte, die Mitte ist die Intermediate-CA, also: alles da. :nixweiss:

Nicht auf die Dateinamen-Extension reinfallen, da kann sonstwas stehen. Überlicherweise (für SSL) sollten die Zertifikate/Schlüssel im PEM-Format (binary-base64) vorliegen.

cu
Narses


mats - Mi 23.01.19 23:39

Hallo Leute,

ich weiß nicht ob alles da ist. Aber der Server nimmt die Zertifikatsdateien mit .cer nicht, der will .crt -> Server: Plesk Onyx v17.5.3_build1705170317.16 os_CentOS 6, CentOS 6.8 (Final).

noch Vorschläge?


mats


Narses - Do 24.01.19 00:17

Moin!

Was an der Datei für ein Schildchen klebt, ist Wurst, solange der Inhalt passt: https://serverfault.com/questions/9708/what-is-a-pem-file-and-how-does-it-differ-from-other-openssl-generated-key-file :les: :think:

Probier´s doch erstmal ohne SSL, dann ist zumindest der Thread hier pausiert, denn Indy wird sicherlich keinen Einfluss auf deine Server-Config haben. :nixweiss:

cu
Narses


mats - Do 24.01.19 14:51

Hallo zusammen,

habe das Zertifikat auf dem Server erneuert, alles Ok, aber immer noch 500. Doch eines gibt mir zu denken. Ich hatte auf dem Server das Verzeichnis mit den PHP-Dateien neu erstellt und vergessen die Dateien neu hochzuladen. Da kam ein 404 -> Ressource wurde nicht gefunden. Konnte das Programm ja auch nicht, Dateien vergessen. Also liest, oder versucht, das Programm die angeforderte Datei, sonst hätte es ja keinen 404 gegeben. Und als die PHP-Dateien auf dem Server waren wieder 500.
Versteh' ich nicht.

mats


Tankard - Do 24.01.19 15:29

Schau dir mal dir .htaccess Datei an.

Der Fehler 500 steht für Bad Gateway. Bedeutet der Server kann die PHP Datei zwar lesen, aber nicht an den PHP Interpreter weiterleiten.

Kannst du die Datei denn aus dem Browser aufrufen und ausführen?

PS: Ich kann dir auch einen Account zum Testen auf meinem Server geben. Darauf läuft NGINX und PHP 5.6 bis 7.2. MySQL ist auch vorhanden.


mats - Do 24.01.19 18:03

Hallo Tankard,

mein OS ist CentOS 6.8. Ich kann die .htaccess nicht finden. Wo?
Eine kurze PHP-Datei mit print'Hallo'; im gleichen Verzeichnis wird im Browser ausgegeben.

mats


Tankard - Do 24.01.19 18:58

Hi,

hast du das Server selbst installiert? Da wir es schwierig dir zu helfen. Fehlerursachen gibt es viele. Die .htaccess muss nicht existieren. Ich nehme an deine PHP Version nicht mit dem Apache richtig konfiguriert ist. Meistens sind es die Zugriffsrechte auf den PHP Socket die nicht stimmen. Leider ist es, ohne die ganzen Konfigurationsdateien zu sehen, reine Raterei.

Kannst du denn über den Webbrowser auf PHP Skripte zugreifen?

Erstelle einfach mal im Verzeichnis eine Datei t.php mit folgendem Inhalt:


Quelltext
1:
2:
3:
<?php
phpinfo();
?>


Dann rufe die Datei mit deinem Webbrowser auf, falls immer noch der Fehler 500 kommt. Liegt es daran, dass der Apache/NGINX Server sich nicht mit deiner PHP Installation unterhalten kann.


EDIT: habe dein print 'Hallo'; überlesen.

Poste doch mal den Code mit dem du auf den Server zugreifen möchtest. Inclusive Create etc. und nicht nur die Post Anweisung.


mats - Do 24.01.19 19:39

Hallo,

ich hab das mit der phpinfo() versucht und bekomme ein 403 auf Port 443. Meine Hallo Datei wird angezeigt.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  Server: TIdHTTP;
  SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL;
  ParamList: TStringList;
begin
  Server := TIdHTTP.Create();
  Server.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(Server);

  Server.Request.Charset     := 'utf-8';
  Server.Request.ContentType := 'text/html';

...
result := Server.Post('https://DOMAIN.de/ws/WebServiceBasic.php?' + dbString, ParamList);

...


mats


mats - Fr 25.01.19 11:02

Hallo,

so, nur noch eine Sache und ich schließe den Thread. Kann es sein daß das Problem in den erweiterten Sicherheitsrichtlineien von PLESK liegt (die man nicht abschalten kann)? Denn wie ich gelesen habe greifen die auch bei der Datenbank. Vielleicht geben die den Fehler 500 zurück?

Danke für die Ideen...

mats


Narses - Fr 25.01.19 11:28

Moin!

user profile iconmats hat folgendes geschrieben Zum zitierten Posting springen:
ich hab das mit der phpinfo() versucht und bekomme ein 403 auf Port 443. Meine Hallo Datei wird angezeigt.
user profile iconmats hat folgendes geschrieben Zum zitierten Posting springen:
Denn wie ich gelesen habe greifen die auch bei der Datenbank. Vielleicht geben die den Fehler 500 zurück?
Also zunächstmal ist ein HTTP/500 ein "internal server error", kein "bad gateway". Kuckst du hier [https://de.wikipedia.org/wiki/HTTP-Statuscode#5xx_%E2%80%93_Server-Fehler].

Das ist eigentlich ein Zeichen dafür, dass die PHP-Einrichtung auf der Maschine nicht sauber / korrekt durchgeführt wurde. Wenn die Maschine plain-html verarbeiten kann (das "Hallo"), aber bei einem PHP-Script mit 500 antwortet, dann kann der PHP-Interpreter nicht gestartet werden. :idea:

Wie du das auf deinem Server wieder reparierst? Keine Ahnung, meine Glaskugel ist in der Reinigung... :nixweiss:

Ich bin mir aber nahezu sicher, dass das nix mit der Client-Seite zu tun hat (also die Delphi-Anwendung). ;)

cu
Narses


mats - Fr 25.01.19 13:06

Hallo Narses,

ich denke mittlerweile auch das es mit dem PHP-Interpreter bzw. mit open_basedir zu tun hat.


mats