![]() |
AW: Zertifikat nutzen
Hallo zusammen,
auch wenn das ursprüngliche Problme gelöst zu sein scheint, möchte ich noch ein paar Punkte anmerken: 1) Als Ergänzung zu mjustin: Assertor stellt compilierte Versionen von OpenSSL (meistens schon kurz nach den offiziellen Erscheinen) zur Verfügung, siehe dazu ![]() 2) Um das Problem mit indy und Openssl zu umgehen, hat Embarcadero mit einer der letzten Delphi-Versionen einen eigenen http-Client eingeführt, der auch für https kein openSSL benötigen und zur Zertifikatsprüfung den Windows CertStore verwenden soll. Damit habe ich aber noch keine Erfahrung, und sollte ich etwas falsches geschrieben haben, bitte ich um Korrektur! |
AW: Zertifikat nutzen
Zitat:
Code:
Letztlich habe ich dann in der Registry einen Eintrag der Art:
-----BEGIN CERTIFICATE-----
[ca. 2700 Zeichen] -----END CERTIFICATE-----
Code:
Die Schnittstelle selbst arbeitet mit den Komponenten „TRestClient“, „TRestRequest“ und „TRestResponse“. Wie gesagt, seit Jahr und Tag per HTTP ohne Probleme.
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates\addressbook\Certificates\[40 Zeichen]]
"Blob"=hex:[Hex-Werte] Wenn ich jetzt einfach die URL die ich habe, umstelle von:
Code:
auf:
http://1.1.1.1/dings/v1.1
Code:
und dann das „Execute“ des TRESTRequest absetzte erhalte ich:
https://1.1.1.1/dings/v1.1
Code:
Was bedeutet die Fehlermeldung nun konkret? Was ist da „unspezifiziert“?
Modul: REST-Anforderung fehlgeschlagen: Unspecified certificate from client
Erschwerend kommt hinzu, dass ich von meinem Entwicklungsrechner aus per VPN mit der Kundeninfrastruktur verbunden bin. Aus Erfahrung weiß ich, dass es bei einigen Dingen schon einen Unterschied gemacht hat, ob man direkt im entsprechenden Zielnetzwerk unterwegs ist oder eben von „außen“ per VPN kommt. Leider kann mir die Kunden-IT auch nicht wirklich weiter helfen. Es wurde z. B. empfohlen mal mit einer PowerShell eine Abfrage an die Schnittstelle abzusetzen, um sozusagen das prinzipielle Funktionieren des Zertifikates zu testen:
Code:
Das liefert mir aber:
Invoke-WebRequest -Uri "https://1.1.1.1/dings/v1.1" -Certificate 'Cert:\CurrentUser\[40-Zeichen]'
Code:
Da bin ich mit meinem Latein am Ende.
> PS C:\WINDOWS\system32> Invoke-WebRequest -Uri "https://1.1.1.1/dings/v1.1" -Certificate 'Cert:\CurrentUser\[40-Zeichen]'
> Invoke-WebRequest : Der Parameter "Certificate" kann nicht gebunden werden. Der Wert > "Cert:\CurrentUser\[40-Zeichen]" kann nicht in den Typ > "System.Security.Cryptography.X509Certificates.X509Certificate" konvertiert werden. Fehler: "Das angegebene Pfadformat > wird nicht unterstützt." > In Zeile:1 Zeichen:85 > + ... Certificate 'Cert:\CurrentUser\[40-Zeichen] ... > + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > + CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException > + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeWebRequestCommand Ich setze noch Delphi 10 Seattle ein. Lässt sich mein Problem durch Umstieg auf die aktuelle Version lösen? Oder kann mir jemand aus eigener Erfahrung bestätigen, dass man, um ein Zertifikat (wie ich es oben beschrieben habe) in seinem eigenen Code zu nutzen gar nichts tun muss? Und das Zertifikat muss einfach auf dem Rechner, auf dem die HTTPS-Abfrage gestellt wird, vorhanden sein? Danke im Voraus für etwas Erhellung. Gruß, Markus |
AW: Zertifikat nutzen
Zitat:
Das Zertifikat des HTTPS Servers kann man auch mit dem Web Browser downloaden und dann mit der CR Datei vergleichen. Sind sie identisch, ist die CR Datei einfach nur das Serverzertifikat. Der Anbieter des Webservice sollte die Frage ob es das Server- oder ein Clientzertifikat ist eigentlich beantworten können. Ich würde daher einfach die "CertFile"- und ein "RootCertFile"-Property leer lassen und einen REST Request ausführen. (Oder den Endpoint im Webbrowser oder per curl aufrufen) |
AW: Zertifikat nutzen
Mir schwant da schon wieder übles... Zertifikate werden normalerweise nicht auf diese Weise verteilt, es sei denn es sind selbst erstellte weil man sich das Brimborium mit den CA sparen wollte.
Die biegt man dann mit viel Verrenkungen in den Zertifikatsspeicher von Windows rein, dreht an den Sicherheitseinstellungen rum bis die Verbindung "irgendwie" läuft und das nächstbeste Windows-Update dreht die Einstellungen wieder zurück. Meistens weil die Zertifikatskette nicht passt oder das Stammzertifikat wiederrufen wurde. Für gewöhnlich stellt der Webserver die Public Keys selbst zur Verfügung und die Komponenten handeln die Verschlüsselung aus. Bei den Indys kann an die Prüftiefe noch einstellen (Zerti-Kette bis zum Stamm prüfen oder nicht), bei den REST-Komponenten geht das schon nicht mehr, weil alles an den Systemeinstellungen hängt. Also kurz gesagt: Vergiss erstmal die Zertifikatsdateien. Schreib einfach statt http:// dann https:// in den URL und schau was passiert. Ggf. noch den Port manuell von 80 auf 443 ändern, mehr sollte eig. nicht nötig sein. |
AW: Zertifikat nutzen
Zitat:
Vielleicht noch mal was zum Hintergrund. Unser Kunde bekommt von der IT-Abteilung dessen Netzwerk und auch Computer er nutzt das Zertifikat geschickt. Unser Kunde schickt das Zertifikat mir. Es fehlen jegliche Anweisungen, was ich a) mit dem Zertifikat machen soll oder b) wie man testen kann dass es funktioniert. Absolut null Info. Frage ich dann bei dieser IT-Abteilung nach, die Ansprechpartner auch für unseren Kunden ist, dann wissen diese Leute von der IT wenig bis nichts zu dem Zertifikat zu sagen. Bisher habe ich in der URL eine IP-Adresse verwendet (was bei HTTP wunderbar funktioniert hat), heute erfahre ich, ich soll den vollen DNS-Namen verwenden. Dann habe ich im OnValidateCertificate des TRestClient das Accepted auf True gesetzt, wie ich es im Netz gefunden hatte, dass man das machen soll. Und schon lautete die Fehlermeldung nicht mehr: REST-Anforderung fehlgeschlagen: Server Certificate not accepted sondern: REST-Anforderung fehlgeschlagen: Unspecified certificate from client Aber es kommt noch doller. Im OnValidateCertificate habe ich mir mal alle zur Verfügung stehenden Infos des „const [Ref] Certificate: TCertificate“ ausgeben lassen. Schön war schon mal, da stand tatsächlich etwas, was mit dem Zertifikat zu tun hatte. Aber, aufgemerkt, da stand nicht die URL drin die ich verwenden sollte, sondern es war noch ein Zeichen anders (zusätzlich) in der URL. Als ich die URL dann so geschrieben habe, wie sie auch im Zertifikat hinterlegt ist, kam keine Fehlermeldung mehr bzgl. des Zertifikats! Daten habe ich aber trotzdem keine Empfangen, Fehlermeldung: REST-Anforderung fehlgeschlagen: Execution of request terminated with unknown error Es wird so sein wie so oft. Diese Test-Schnittstelle ist bei der IT-Abteilung gar nicht scharf geschaltet. Ich warte noch auf Feedback. Ach ja, mein erster Gedanke war auch, ich nehme einfach statt http:// dann ![]() Ich berichte, wenn es was Neues gibt. Gruß, Markus |
AW: Zertifikat nutzen
Oh weh. Grundsätzlich müssen Zertifikat, IP-Adresse und Hostname zusammen passen. Am Ende wird das auf beiden Seiten irgendwie zusammengeschustert. Hauptsache es läuft. Könnte mir vorstellen, so ähnlich ist es zwischen BRAK und ATOS auch gelaufen beim beA. Sicherheit kommt dabei aber mit Sicherheit nicht heraus. Tu dir selbst einen Gefallen und lehn den Auftrag ab.
OT: Weisst warum ich die REST-Komponenten nicht mag und wieder auf Indy zurück gewechselt bin? Weil man ![]() |
AW: Zertifikat nutzen
Zitat:
So wie es aussieht kriege ich das mit dem Zertifikat und den REST-Komponenten nicht gebacken und muss wohl in den sauren Apfel beissen nur deswegen auf Indy umstellen. :shock: |
AW: Zertifikat nutzen
Die REST-Komponenten basieren (bei Win32 und Win64) auf WinInet und "erben" sozusagen diverse Sicherheitseinstellungen aus der Abteilung Internet Explorer. Dort wäre auch der Ansatz, das Zertifikat zumindest testweise einzuspielen. Bevor jetzt alles auf Indy umgestrickt wird.
Ich wollte mit meinen Bedenken nur zum Ausdruck bringen, dass SSL/TLS ja eigentlich erfunden wurde um die Transportsicherheit zu erhöhen. So wie du das beschreibst, bestehen auf beiden Seiten viele Ungewissheiten über die Problematik. Daher befürchte ich, wird das Vorhaben nicht den gewünschten Erfolg bringen. Egal ob nun mit WinInet oder Indy. Möglich, dass es "irgendwann" "irgendwie" läuft. Nur ob das dann auch das Prädikat "gesicherte Verbindung" verdient, steht in den Sternen. |
AW: Zertifikat nutzen
Zitat:
Zitat:
Es ist zum Haareraufen. |
AW: Zertifikat nutzen
Zitat:
Zitat:
Ich würde dir raten, die Insider bei deinem Dienstanbieter zu einem Grillabend einzuladen. Es geht nix über Vitamin B um solche Probleme aus der Welt zu schaffen ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz