AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)

SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)

Ein Thema von atari1040 · begonnen am 2. Feb 2023 · letzter Beitrag vom 24. Jan 2024
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#1

AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)

  Alt 21. Nov 2023, 17:32
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
672 Beiträge
 
Delphi 12 Athens
 
#2

AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)

  Alt 22. Nov 2023, 08:59
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#3

AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)

  Alt 22. Nov 2023, 09:42
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...
Sebastian Jänicke
AppCentral

Geändert von jaenicke (22. Nov 2023 um 09:46 Uhr)
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
672 Beiträge
 
Delphi 12 Athens
 
#4

AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)

  Alt 22. Nov 2023, 15:06
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.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)

  Alt 23. Nov 2023, 07:21
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.
In D11.3 beginnt die Definition in Zeile 261 der Unit REST.HttpClient.


Delphi-Quellcode:
  TRESTHTTPExt = class(TRESTHTTP)
  private
    FClientCertificatePassword: string;
    FClientCertificatePath: string;
    FClientCertificateStream: TStream;
    procedure SetClientCertificatePath(const AValue: string);
    procedure SetClientCertificateStream(const AValue: TStream);
  public
    property ClientCertificateStream: TStream read FClientCertificateStream write SetClientCertificateStream;
    property ClientCertificatePath: string read FClientCertificatePath write SetClientCertificatePath;
    property ClientCertificatePassword: string read FClientCertificatePassword write FClientCertificatePassword;
  end;
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
672 Beiträge
 
Delphi 12 Athens
 
#6

AW: SOAP THttpReqResp mit Certificate (Windows CertStore scsUser)

  Alt 24. Jan 2024, 15:30
So, bei uns wurde das Thema mit den Clientzertifikaten nun auch noch ernster. Bis das bei uns alles wie gewünscht lief, waren allerdings noch so einige Eingriffe in den Delphi-Bibliotheken nötig. Unser Szenario war und ist dabei, dass wir aus dem System, das wir anbinden wollen, eine pfx-Datei geliefert bekommen haben. Ich habe für die ganzen Probleme, die dabei unter Windows und unter Linux aufgetreten sind, mal in QC neue Einträge erstellt:Wenn ihr dazu Feedback für mich oder Emba habt, dann gerne. Ich habe halt auch keinen Haufen von zig verschiedenen Zertifikatsdateien aus verschiedenen Systemen und ich vermute, dass es Emba genauso geht, insofern kann ich schon nachvollziehen, dass das Entwickeln und Testen hier etwas schwieriger ist. Ich weiß jetzt auch nur, dass das, was ich oben geschrieben war, nötig war, damit es bei uns läuft. Falls ihr Zeit habt, könnt ihr ja mal kritisch drüber schauen und prüfen, ob es zumindest für euch nichts kaputtmachen würde, was ich da vorgeschlagen habe.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 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