Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi Datasnap REST Server mit HTTPS in 10.4.2 (https://www.delphipraxis.net/207120-datasnap-rest-server-mit-https-10-4-2-a.html)

michaelg 25. Feb 2021 15:29

Datasnap REST Server mit HTTPS in 10.4.2
 
Moin,

ich versuche in möglichst wenig Worten den doch recht komplexen Sachverhalt zu erklären.

Es gibt einen Datasnap-Rest-Server als VCL-Anwendung. Dieser läuft per HTTPS. Es gibt die zwei Zertifikats-Dateien und die Schlüssel-Datei. Diese werden dem TIdServerIOHandlerSSLOpenSSL zugewiesen.

In der FMX-Client App ist die DSRestConnection auf HTTPS gestellt.

BIS GESTERN
Die Kommunikation funktionierte bestens und verschlüsselt auf den Plattformen Win32, iOS64, Android32 und Android64 mit DELPHI 10.4.1.

Das Android SDK ist 26.1.1 .
Das iOS-SDK ist 14.2 .

SEIT HEUTE
Heute habe ich die 10.4.2 installiert. Unter Win32 klappt die Kommunikation noch, unter iOS64, Android 32 und 64 nicht mehr. Ich bekomme keine Verbindung zum Server mehr.


Jetzt hatte ich hier bereits etwas gesucht und fand den Hinweis, dass ein selbstsigniertes Zertifikat ein Problem darstellen könnte. Das kann ich mir aber nicht vorstellen, da es unter 10.4.1 geklappt hat und ich dort auch schon dieselben SDKs verwendet hatte. Das Zertifikat hatte ich selbst mit OpenSSL erstellt.

Um ein bisschen mehr herauszubekommen, habe ich im Android-Monitor folgendes im Logfile:
Code:
02-25 14:26:05.348: W/System.err(22810): java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
02-25 14:26:05.348: W/System.err(22810):    at com.android.org.conscrypt.TrustManagerImpl.verifyChain(TrustManagerImpl.java:672)
02-25 14:26:05.348: W/System.err(22810):    at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:543)
02-25 14:26:05.348: W/System.err(22810):    at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:499)
02-25 14:26:05.348: W/System.err(22810):    at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:325)
02-25 14:26:05.348: W/System.err(22810):    at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:113)
02-25 14:26:05.349: W/System.err(22810):    at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:87)
02-25 14:26:05.349: W/System.err(22810):    at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:116)
02-25 14:26:05.349: W/System.err(22810):    at com.embarcadero.rtl.ProxyInterface.dispatchToNative(Native Method)
02-25 14:26:05.349: W/System.err(22810):    at com.embarcadero.rtl.ProxyInterface.invoke(ProxyInterface.java:21)
02-25 14:26:05.349: W/System.err(22810):    at java.lang.reflect.Proxy.invoke(Proxy.java:913)
02-25 14:26:05.349: W/System.err(22810):    at $Proxy15.checkServerTrusted(Unknown Source)
02-25 14:26:05.349: W/System.err(22810):    at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:201)
02-25 14:26:05.349: W/System.err(22810):    at com.android.org.conscrypt.ConscryptFileDescriptorSocket.verifyCertificateChain(ConscryptFileDescriptorSocket.java:413)
02-25 14:26:05.349: W/System.err(22810):    at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
02-25 14:26:05.350: W/System.err(22810):    at com.android.org.conscrypt.SslWrapper.doHandshake(SslWrapper.java:381)
02-25 14:26:05.350: W/System.err(22810):    at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:222)
02-25 14:26:05.350: W/System.err(22810):    at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:1477)
02-25 14:26:05.350: W/System.err(22810):    at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:1423)
02-25 14:26:05.350: W/System.err(22810):    at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:1367)
02-25 14:26:05.350: W/System.err(22810):    at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:219)
02-25 14:26:05.350: W/System.err(22810):    at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:142)
02-25 14:26:05.350: W/System.err(22810):    at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:104)
02-25 14:26:05.350: W/System.err(22810):    at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:392)
02-25 14:26:05.350: W/System.err(22810):    at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:325)
02-25 14:26:05.351: W/System.err(22810):    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:489)
02-25 14:26:05.351: W/System.err(22810):    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131)
02-25 14:26:05.351: W/System.err(22810):    at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89)
02-25 14:26:05.351: W/System.err(22810):    at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(Unknown Source:0)
02-25 14:26:05.351: W/System.err(22810): Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Wenn man nach "Trust anchor for certification path not found" googlet, findet man nicht viel hilfreiches. Kann mir jemand einen Tipp geben, woran das liegen kann?

michaelg 20. Mai 2021 15:40

AW: Datasnap REST Server mit HTTPS in 10.4.2
 
Das hat sich jetzt erledigt.

Wenn man auf einem Android-Gerät testen will, muss man jetzt wohl zwingend mit einem "offiziellen" Zertifikat arbeiten.

Olli73 20. Mai 2021 18:09

AW: Datasnap REST Server mit HTTPS in 10.4.2
 
Reicht es nicht, das eigene (Root-)Zertifikat zu installieren unter Android?

Oder gibt es bei den Rest-Komponenten so etwas wie bei Indy: TIdSSLIOHandlerSocketOpenSSL -> OnVerifyPeer? Damit kann man das wohl selber steuern!?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 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