![]() |
AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
Zitat:
|
AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
Zitat:
Das war leider die einfallsloseste Variante, um das Ticket zu lösen. Mit etwas mehr Einfallsreichtum hätte man auch meinen Hinweisen folgend eine umfassende und deutlich schönere Lösung machen können. Aber ich bin schon froh, dass es nun das gibt. |
AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
Zitat:
Nachtrag: über Code Completion wird mir HTTPRIO1.HTTPWebNode.ClientCertificate.Filename natürlich nicht angezeigt aber im Objektinspektor habe ich es schon mal gefunden. Danke |
AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
Zitat:
Delphi-Quellcode:
Wie gesagt, schön finde ich die Lösung nicht, auch wenn sie viel neu implementiert haben. Dass es z.B. Interfaces gibt, wird aber leider an einigen Stellen, an denen es sehr sinnvoll wäre, vergessen. Und an das Handle der Verbindung kommt man weiterhin nicht heran, so dass andere Dinge weiter nur über dreckigere Wege gehen.
uses
Soap.SOAPHTTPTrans; procedure TForm21.Test; begin TClientCertExt(HTTPRIO1.HTTPWebNode.ClientCertificate).FileName := 'blub'; end; |
AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
Vielen Dank!!!!
|
AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
Hi zusammen,
ich muss mal dieses etwas ältere Thema aufmachen, weil mir gerade auch zum ersten Mal ein Webservice über den Weg läuft, der mit Client-Zertifikaten arbeitet. Allerdings geht es bei uns um einen REST-, nicht um einen SOAP-Service. Sehe ich das richtig, dass die in D11 offenbar umgesetzte Lösung zwar für SOAP funktionieren würde, aber es für REST nichts vergleichbares gibt und man ein Zertifikat in den Zertifikatsspeicher laden müsste? Oder übersehe ich in den REST-Komponenten irgendwas? |
AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
Das sollte auch mit Rest gehen. Die Umsetzung passierte in den Http-Komponenten dahinter.
In jedem Fall geht es manuell, wenn man via Pointer das Handle der Verbindung extrahiert und dort das Zertifikat manuell setzt. So habe ich es bei 10.4 gelöst. |
AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
Danke dir für die schnelle Antwort. Mit dem TRESTClient geht das dann leider nicht so einfach, weil der zugehörige eigentliche HTTP-Client "doppelt" in "private"-Feldern steckt. Doppelt, weil im TRESTClient zunächst im private-Bereich ein eigenes TRESTHTTP steht und erst das hat dann, auch wieder im "private", das eigentliche THTTPClient. Ist auch immer ein großer und etwas verwirrender Spaß beim Debuggen. ;-) Aber da kommt man so einfach nicht dran, wenn man nicht mit einer gepatchen Version der REST.HttpClient-Unit arbeiten will.
Vielleicht würde die von dir erwähnte Variante mit dem Pointer auf das Handle der Verbindung gehen, aber irgendwie stehe ich da gerade ehrlich gesagt etwas auf dem Schlauch - an das Handle der Verbindung käme ich ja auch nicht, wenn das alles so private ist, oder? Naja, es wird wohl auch erstmal damit gehen, dass wir im konkreten Fall die Zertifikate in den Winodws-Zertifikatsspeicher kippen. Aber anders wäre schon schöner. ;-) Und die Linux-Seite habe ich mir noch gar nicht angeschaut. :gruebel: |
AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
Das meinte ich mit Pointern. Die konkrete Implementierung liegt leider unter implementation in System.Net.HttpClient.Win.pas, so dass man mit RTTI usw. nicht so einfach weiter kommt (ja, man könnte den ClassType verwenden, aber am Ende habe ich es lieber manuell gemacht). Man kann aber im Debugger ausrechnen oder im Speicher manuell nachschauen, wie viele Bytes das Feld von der Adresse des Objekts entfernt ist. Dann kann man das Feld an der Adresse auslesen. So kommt man dann darüber an das Handle in diesem Objekt. Um an den HttpClient zu kommen, kann man auch so vorgehen oder es dort mit der RTTI machen, denn die sollte dort verfügbar sein.
Natürlich muss man solche Tricks gut dokumentieren und per IFDEF auf geprüfte Delphiversionen absichern, so dass es bei einer neuen Version an der Stelle einen Fehler gibt. Dann muss man die Position der Felder mit der Version zuerst prüfen. Ab Delphi 11 kann man dann einfach TRESTHTTPExt statt TRESTHTTP verwenden, wo man entsprechende Felder zum Übergeben des Zertifikats hat. Die entsprechende Funktionalität war bereits in Delphi 10.4 vorhanden, aber leider nicht erreichbar... |
AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
Hm, TRESTHTTPExt kann ich bei mir nicht finden. Ist das ein Record Helper, den die erst in D11.3 eingebaut haben? Wir sind noch mit 11.2 unterwegs. Oder ich stelle mich zu blöd an.
Aber in D12 ist "ClientCertificatePath", "ClientCertificatePassword" und "ClientCertificateStream" tatsächlich eine public Eigenschaft vom TRESTClient - die scheinen da also etwas aufgeräumt zu haben. Insofern Danke, dass du damals das Ticket erstellt und mich gerade in die richtige Richtung geschubst hast. :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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