Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   SOAP THttpReqResp mit Certificate (Windows CertStore scsUser) (https://www.delphipraxis.net/212387-soap-thttpreqresp-mit-certificate-windows-certstore-scsuser.html)

atari1040 14. Apr 2023 19:13

AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
 
Zitat:

Zitat von jaenicke (Beitrag 1518243)
Zitat:

Zitat von atari1040 (Beitrag 1518240)
Ich hatte die leise Hoffnung, dass mit einer neuen Delphi Version der direkte Zugriff auf den CertStore irgendwie einfacher geworden ist.

In Delphi 11 gibt es aufgrund meines Tickets neue Eigenschaften für die Clientzertifikat-Authentifikation:
https://quality.embarcadero.com/browse/RSP-34451

Mit Zertifikaten aus dem Store ging es über das entsprechende Event aber auch vorher problemlos (HTTPRIO.HTTPWebNode.OnNeedClientCertificate). Ich wollte die Zertifikate aber nicht in den Store packen müssen.

Gibt es eigentlich irgendwo Beispiele zum laden eines Zertifikats als File? Ich lese in Deinem Ticket, dass es jetzt funktionieren soll, finde aber nicht ein Beispiel wie es geladen wird.

jaenicke 15. Apr 2023 22:27

AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
 
Zitat:

Zitat von atari1040 (Beitrag 1521051)
Gibt es eigentlich irgendwo Beispiele zum laden eines Zertifikats als File? Ich lese in Deinem Ticket, dass es jetzt funktionieren soll, finde aber nicht ein Beispiel wie es geladen wird.

Was sollte das für ein Beispiel sein? Du setzt die dafür neu hinzugekommene Property (ich glaube die heißt ClientCertFilename oder so, kann gerade nicht nachschauen) und das war es.

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.

atari1040 16. Apr 2023 07:34

AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
 
Zitat:

Zitat von jaenicke (Beitrag 1521088)
Zitat:

Zitat von atari1040 (Beitrag 1521051)
Gibt es eigentlich irgendwo Beispiele zum laden eines Zertifikats als File? Ich lese in Deinem Ticket, dass es jetzt funktionieren soll, finde aber nicht ein Beispiel wie es geladen wird.

Was sollte das für ein Beispiel sein? Du setzt die dafür neu hinzugekommene Property (ich glaube die heißt ClientCertFilename oder so, kann gerade nicht nachschauen) und das war es.

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.

Es liegt sicherlich an mir und ich bin total blind. Wir sprechen von Delphi 11.3 und HTTPRIO? Ich finde nix mit ClientCertFilename oder einer ähnlich lautenden Property. Auch Google verrät mir nichts über das neue und bestens gehütete Geheimnis dieses neuen Features.

Nachtrag: über Code Completion wird mir HTTPRIO1.HTTPWebNode.ClientCertificate.Filename natürlich nicht angezeigt aber im Objektinspektor habe ich es schon mal gefunden. Danke

jaenicke 16. Apr 2023 09:54

AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
 
Zitat:

Zitat von atari1040 (Beitrag 1521091)
Nachtrag: über Code Completion wird mir HTTPRIO1.HTTPWebNode.ClientCertificate.Filename natürlich nicht angezeigt aber im Objektinspektor habe ich es schon mal gefunden. Danke

Ich habe auch nachgeschaut:
Delphi-Quellcode:
uses
  Soap.SOAPHTTPTrans;

procedure TForm21.Test;
begin
  TClientCertExt(HTTPRIO1.HTTPWebNode.ClientCertificate).FileName := 'blub';
end;
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.

atari1040 16. Apr 2023 10:21

AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)
 
Vielen Dank!!!!

Bbommel 21. Nov 2023 16:49

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?

jaenicke 21. Nov 2023 17:32

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.

Bbommel 22. Nov 2023 08:59

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:

jaenicke 22. Nov 2023 09:42

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...

Bbommel 22. Nov 2023 15:06

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 08:36 Uhr.
Seite 3 von 4     123 4      

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