Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Zertifikatsproblem (https://www.delphipraxis.net/207366-zertifikatsproblem.html)

Incocnito 17. Mär 2021 14:36

Zertifikatsproblem
 
Hi Zusammen,

ich möchte über eine FMX-Anwendung (sowohl Windows als auch Android)
Daten von einem Server entgegen nehmen. Ich nutze einen TNetHTTPClient
und habe auf dem Server dann eine Seite, welche mir die Infos bereit stellt.
Unter Windows funktioniert das ganze auch soweit.
Unter Android bekomme ich folgenden Fehler:
---
Im Projekt <Whatever>.apk ist eine Exception der Klasse EJNIException mit der Meldung 'java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.' aufgetreten.
---
Jetzt habe ich hier
https://stackoverflow.com/questions/...ication-of-rad
gefunden, wie das theoretisch gehen soll.
Ich bin also hingegangen und habe die Zertifikatsdatei aus Firefox als CER-Datei exportiert und
versucht unter "Bereitstellung" einzutragen.
Das klappt aber nicht. Aktuell kommen zwei Meldnugen:
network_security.xml: Noresource type specified
und
MeinCert.crt: Error parsing XML: syntax error
Derzeit liegen beide Dateien im Unterordner "res\xml\" welchen
ich selbst angelegt habe.

Weiß jemand die Schritte, die ich machen müsste um die CertificateException weg zu bekommen?
Delphi-Quellcode:
OnValidateServerCertificate
vom TNetHTTPClient-Objekt zu setzen und einfach nur
Delphi-Quellcode:
Accept := True;
reicht
übrigens auch nicht. Den Server kann ich auch nicht umstellen, so dass der Zugriff per http möglich wäre.

Vielen Dank schonmal für die Zeit.

Mit freundlichem Gruß
Incocnito

Incocnito 17. Mär 2021 15:39

AW: Zertifikatsproblem
 
... ok Aktualisierung:

Die Pfade sind fest definiert
vgl.: https://developer.android.com/guide/...ding-resources
und für das Zertifikat muss ich in den Ordner "raw" gehen.
Die Zertifikatsdatei liegt nun also mit dem Namen "my_ca.crt"
in "res\raw\" (sowohl lokal, aber vor allem im Remote-Pfad)
In der Network-Konfig steht nun auch
src="@raw/my_ca"
Also keine eigenen Dateinamen mehr, weil ich nicht weiß, was das wieder für Auswirkungen hat.
Hier:
https://developer.android.com/traini...ecurity-config
waren auch noch ein paar Erklärungen zu der Netzwerk-Konfiguration.

Leider bekomme ich nun den Fehler
---
Im Projekt <Whatever>.apk ist eine Exception der Klasse EJNIException mit der Meldung 'java.security.cert.CertificateException: Domain specific configurations require that hostname aware checkServerTrusted(X509Certificate[], String, String) is used' aufgetreten.
---
Wo ich nicht weiß, wo das wieder her kommt. Windows-Compilat läuft nach wie vor.

LG Incocnito

Incocnito 19. Mär 2021 08:11

AW: Zertifikatsproblem
 
<<Push>>
Oder Allgemein: Hat jemand irgendwo mal eine Anleitung gesehen, wie man eine App anpassen muss
um eine Verbindung zu einem HTTPS-Server herzustellen, welcher ein Self-Signed-Zertifikat hat?

LG Incocnito

DeddyH 19. Mär 2021 09:20

AW: Zertifikatsproblem
 
Google sagt dazu: https://developer.android.com/traini...-ssl#UnknownCa

Incocnito 19. Mär 2021 15:57

AW: Zertifikatsproblem
 
Auf der Seite wird unter
https://developer.android.com/traini...ssl#SelfSigned
auf den TrustManager verwiesen.
Gibt es sowas für Delphi (FMX)?

LG Incocnito

DeddyH 19. Mär 2021 16:19

AW: Zertifikatsproblem
 
Keine Ahnung, ich mache schon seit Jahren nichts mehr mit FMX.

junglist 22. Mär 2021 08:40

AW: Zertifikatsproblem
 
Ich glaube zwar das ist nicht dein Problem, aber vielleicht hilft es dir:

Nach dem Update von 10.4.1 auf 10.4.2 haben unsere TNetHTTPClients nicht mehr funktioniert. Das ist nur passiert, wenn das OnValidateServerCertificate gesetzt wurde.
Die Lösung für das Problem war, die Property "SynchronizedEvents" vom TNetHttpClient auf False (bzw. auf True, je nachdem wie du es einsetzt) zu setzen.

Damit hat es wieder auf allen Plattformen funktioniert, vorher ging nur Windows.

Da ich aber nie eine Fehlermeldung bekommen haben (Die App hat sich einfach aufgehangen bis Android eingeschritten ist), kann ich nicht versichern dass es das gleiche Problem ist.

Rollo62 22. Mär 2021 08:45

AW: Zertifikatsproblem
 
Zitat:

Zitat von DeddyH (Beitrag 1485539)
Keine Ahnung, ich mache schon seit Jahren nichts mehr mit FMX.

<OT>
Das muss sich aber dringend mal ändern :warn:
</OT>

DeddyH 22. Mär 2021 08:57

AW: Zertifikatsproblem
 
Zitat:

Zitat von Rollo62 (Beitrag 1485723)
Zitat:

Zitat von DeddyH (Beitrag 1485539)
Keine Ahnung, ich mache schon seit Jahren nichts mehr mit FMX.

<OT>
Das muss sich aber dringend mal ändern :warn:
</OT>

[OT] Weshalb? Ich habe mittlerweile Alternativen gefunden, die mir keine Magenschmerzen mehr bereiten, aber das ist ein anderes Thema. [/OT]

Incocnito 9. Apr 2021 09:20

AW: Zertifikatsproblem
 
Zitat:

Zitat von junglist (Beitrag 1485721)
...
Die Lösung für das Problem war, die Property "SynchronizedEvents" vom TNetHttpClient auf False (bzw. auf True, je nachdem wie du es einsetzt) zu setzen....

Kurzes Update:
Das hat leider nicht geholfen. Wenn ich den auf "False" gesetzt habe kamen sogar noch Fehlermeldungen, dass "CheckSynchronized nicht vom Haupt-Thread aufgerufen" wurde. Wobei ich nicht sehe, warum das nicht im Haupt-Thread läuft, mal so am Rande.

Außerdem hatte ich den Fall, dass es nicht unter Windows 8.1 lief.
Das konnte ich beheben, indem ich vom TNetHttpClient die SecureProtokolls geändert hatte.
Bisher hatte ich "alles" reingeworfen, nun wo ich die SSL-Einträge rausgenommen habe, lief es wieder.
vgl.:
https://stackoverflow.com/questions/...quest/55642426

Leider läuft es nach wie vor nicht unter Android.

Wie gesagt, falls irgendjemand Erfahrungen mit serverseitigen Self-Signed-Zertifikaten und HTTP-Requests (hier POST)
unter FMX (im speziellen Android) hat, immer her mit den Infos. Leider kann ich wegen dem echten Zertifikat auf dem
echten Server und den Daten keine kleine Beispiel-App bauen.

Liebe Grüße
Incocnito

Incocnito 9. Apr 2021 15:58

AW: Zertifikatsproblem
 
Brauche ich dafür vielleicht den Private-Key-Teil des Zertifikats?
Ich habe gerade im Handy selbst versucht das Zertifikat zu registrieren, was er aber ablehnt.

Das wäre aber eine ungünstige Lösung. Ich weiß ja, dass ich dem Server vertrauen kann,
da bekomme ich aber ja das Private-Key-Teil ja nicht unbedingt her.

himitsu 9. Apr 2021 16:12

AW: Zertifikatsproblem
 
zum Prüfen brauchst eigentlich nur den Public-Teil. (das Private/Geheime hat, außer auf dem Server, nirgendwo was zu suchen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz