Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Zertifikat nutzen (https://www.delphipraxis.net/190671-zertifikat-nutzen.html)

Zwirbel 25. Okt 2016 06:56

Zertifikat nutzen
 
Hallo,

per TRestClient/TRestRequest greifen wir auf eine Schnittstelle eines Kunden zu, derzeit noch per HTTP. Wenn unser Schnittstellen-Programm produktiv gehen soll, dann soll es aber per HTTPS arbeiten. Dazu stellt uns der Betreiber der Schnittstelle dann ein "Zertifikat" zur Verfügung. Damit habe ich bisher keine Erfahrung. Leider habe ich auch auf mehrfache Anfrage dieses Zertifikat nocht nicht erhalten und kann mir so noch keine Vorstellung davon machen, was das eigentlich genau ist (vermutlich eine Datei, so stelle ich mir das vor). Ich wurde lediglich gefragt, ob wir ein Zertifikat in unsere Anwendung einbinden könnten. Ich wüsste aber nicht wie man in Delphi Seattle ein solches einbindet (irgendwo in den Projektoptionen oder so).

Nun bin ich der Spur http://docwiki.embarcadero.com/RADSt...oraussetzungen nach gegangen, und habe mir eine TIdHTTP und eine TIdSSLIOHandlerSocketOpenSSL-Komponente aufs Formular gepappt, aber welche Properties muss ich nun wie füllen?

Delphi-Quellcode:
object IdHTTP: TIdHTTP
  IOHandler = IdSSLIOHandlerSocketOpenSSL
  AllowCookies = True
  ProxyParams.BasicAuthentication = False
  ProxyParams.ProxyPort = 0
  Request.ContentLength = -1
  Request.ContentRangeEnd = -1
  Request.ContentRangeStart = -1
  Request.ContentRangeInstanceLength = -1
  Request.Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
  Request.BasicAuthentication = False
  Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
  Request.Ranges.Units = 'bytes'
  Request.Ranges = <>
  HTTPOptions = [hoForceEncodeParams]
  Left = 120
  Top = 408
end
object IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL
  MaxLineAction = maException
  Port = 0
  DefaultPort = 0
  SSLOptions.Mode = sslmUnassigned
  SSLOptions.VerifyMode = []
  SSLOptions.VerifyDepth = 0
  Left = 120
  Top = 460
end

Letztere hat ein Property SSLOptions und darin ein "CertFile"- und ein "RootCertFile"-Property, da könnte ich mir vorstellen, dann ein "Zertifikat", wie ich es erhalten soll, einzutragen. Aber wie verbandel ich das ganze mit dem Rest der Anwendung? Wirklich was erhellendes habe ich im Netz dazu nicht gefunden. Und mit der Indy-Doku komme ich auch nicht klar (viele Links auf der Webseite sind tot), da finde ich kein rudimentäres Beispiel, das die Verwendung von TIdHTTP oder TIdSSLIOHandlerSocketOpenSSL zeigt.

Hat jemand ein Beispiel an der Hand wie man mit TIdHTTP/TIdSSLIOHandlerSocketOpenSSL Zertifikate nutzt?

Danke. Gruß, Markus

mjustin 25. Okt 2016 11:45

AW: Zertifikat nutzen
 
Bei HTTPS liegt das Zertifikat auf dem Webserver. In Delphi braucht man dazu kein Zertifikat zu installieren, da Indy über OpenSSL die HTTPS Verbindung aufbaut.

Für TIdHttp muss auch nicht unbedingt kein TIdSSLIOHandlerSocketOpenSSL im Code erzeugt werden. Indy erzeugt für URLs, die mit https:// beginnen, den TIdSSLIOHandlerSocketOpenSSL selbst.

Nur falls es sich um ein "Client-Zertifikat" oder ein Signatur-Zertifikat handeln sollte muss die Delphi Anwendung das Zertifikat lokal haben und z.B. Requests damit signieren.

Dazu sollte der Anbieter des Web Service allerdings Informationen haben.

Zwirbel 25. Okt 2016 14:17

AW: Zertifikat nutzen
 
Zitat:

Zitat von mjustin (Beitrag 1351973)
Dazu sollte der Anbieter des Web Service allerdings Informationen haben.

Danke erst mal für die Antwort. Ich denke diese Informationen muss ich wohl abwarten. Gruß, Markus

Zacherl 25. Okt 2016 15:05

AW: Zertifikat nutzen
 
Und bei einem Server Zertifikat, sollte der public-Teil ebenfalls in der Anwendung vorliegen. Damit kannst du dann die Authentizität des Servers prüfen und dein Programm gegen MITM absichern.

Zwirbel 26. Okt 2016 06:16

AW: Zertifikat nutzen
 
Zitat:

Zitat von Zacherl (Beitrag 1352001)
Und bei einem Server Zertifikat, sollte der public-Teil ebenfalls in der Anwendung vorliegen. Damit kannst du dann die Authentizität des Servers prüfen und dein Programm gegen MITM absichern.

Genau um diese Frage ging es mir ja, wie mache ich das, das Zertifikat in der Anwendung vorliegen lassen? :) Aber ich warte erst mal ab, was man mir letztlich zusendet und frage dann hier gegebenenfalls noch mal gezielt nach. Gruß, Markus

sh17 26. Okt 2016 06:34

AW: Zertifikat nutzen
 
[OT]

Nebenbei würde mich interessieren, wie man einen eigenen REST-Server per Let's Encrypt mit einem SSL-Zertifikat ausstattet. Kann man das direkt von der eigenen Anwendung aus? Oder sollte man lieber parallel einen Apache/NGINX-Server auf der Maschine laufen lassen, der sich um die Aktualisierung kümmert? Soweit ich das verstanden habe, legt der Webserver das Zertifikat definiert im System ab und ich kann ich in meine Server-Anwendung herein laden.

[/OT]

Codehunter 26. Okt 2016 07:48

AW: Zertifikat nutzen
 
Gelöscht wegen Doppelpost (entweder ist mein Koffeinspiegel noch zu niedrig oder das Board hatte Schluckauf ^^)

Codehunter 26. Okt 2016 07:54

AW: Zertifikat nutzen
 
Moin!

Zitat:

Zitat von Zwirbel (Beitrag 1351920)
Nun bin ich der Spur http://docwiki.embarcadero.com/RADSt...oraussetzungen nach gegangen, und habe mir eine TIdHTTP und eine TIdSSLIOHandlerSocketOpenSSL-Komponente aufs Formular gepappt, aber welche Properties muss ich nun wie füllen?

Genau wegen solcher "Tutorials" könnt ich Emba mit dem nackten A**** ins Gesicht springen (sorry für den Ausdruck ^^). Aber die Qualität dieser Anleitung ist in etwa so gut wie:

"F: Wie kann ich den Motor meines Autos reparieren? A: In dem Sie die Motorhaube öffnen."

Die besagte Anleitung bringt einen bestenfalls da hin, dass man eine verschlüsselte Verbindung aufbaut. Allerdings ist man dann noch längst nicht an dem Punkt wo man sagen kann: Ich weiß dass die Verbindung sicher ist. Denn es wären auch die Zertifikate zu prüfen einschließlich deren CAs. Was mir auch noch größte Bauchschmerzen bereitet ist die Tatsache, dass man für Indy abgewandelte, vorkompilierte OpenSSL-Bibliotheken verwenden muss. Aktueller Stand von OpenSSL ist 1.1.0b während Indy noch bei 0.9.8r steht (eine "r" gibt es noch nicht mal offiziell). Die stammt lt. OpenSSL-Changelog irgendwann aus 2010..2011 :shock: (wie schauts da eigentlich mit Heartbleed aus????)

Oh oh oh...

Grüße
Cody

EDIT: Korrektur, aktuell steht Indy bei 1.0.2j (August 2016) - mein Fehler :oops: - Die Kritik an der Emba-Anleitung und den modifizierten, nur als Binary erhältlichen OpenSSL-Libs lass ich aber mal so stehen.

mjustin 26. Okt 2016 11:28

AW: Zertifikat nutzen
 
Zitat:

Zitat von Codehunter (Beitrag 1352047)
Die Kritik an ... den modifizierten, nur als Binary erhältlichen OpenSSL-Libs lass ich aber mal so stehen.

Modifizierte OpenSSL Versionen wurden nur für Indy 8, 9 und frühe 10er Versionen von Indy benötigt. Seit einigen Jahren werden die normalen Versionen benutzt (die man bei Bedarf auch selbst kompilieren kann).

Quelle: https://stackoverflow.com/questions/...ad-ssl-library

EmWieMichael 28. Okt 2016 09:33

AW: Zertifikat nutzen
 
@Zwirbel
Mich hat Indy verwirrt und sprachlos zurückgelassen; von Doku kann nicht wirklich die Rede sein, und im Netz habe ich nur Fragen zum Thema Indy, aber kaum Antworten gefunden. Das ist sehr schade.

Ich habe die Geschichte dann ohne Indy gelöst. In diesem Thread kannst Du nachlesen wie.
Übrigens werden die Clientzertifikate eigentlich nur in den Zertifikatspeicher importiert (IExplorer) und beim Verbindungsaufbau angegeben (siehe Quellcode). Mein Code funktioniert mit Delphi 2010; die Anwendungen greifen auf Server des Bundesverwaltungsamtes im geschlossenen Deutschland-Online-Netz zu.

Gruß Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:39 Uhr.
Seite 1 von 3  1 23      

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