Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi XE2 - SOAP per HTTPS (https://www.delphipraxis.net/185020-xe2-soap-per-https.html)

Sherlock 8. Mai 2015 11:26

XE2 - SOAP per HTTPS
 
Hi,
wie bringe ich meinem XE2 bei, unter Windows per HTTPS mit einem SOAP-Server zu kommunizieren?
Konkret habe ich das Problem, daß die Unit Soap.SOAPHTTPTrans zwar allerlei dafür vorzusehen scheint, aber nur über die Indys. Insbesondere der Compileschalter
Delphi-Quellcode:
USE_INDY
ist da von Interesse. Denn der wird im Verlauf der Unit mehrfach abgefragt und beschäftigt sich intensiv mit den nötigen Details für HTTPS/Zertifikate etc. Er wird am Anfang der Unit hierüber
Delphi-Quellcode:
{$IFDEF POSIX}
  {$DEFINE USE_INDY}
{$ENDIF}
{$IFDEF MSWINDOWS}
  {.$DEFINE USE_INDY}
{$ENDIF}
aber offenkundig für Windows nicht gesetzt(*). :shock:
Was ist zu tun, damit eine HTTPS-Kommunikation Möglich wird, und weiter: Wie wähle ich das Zertifikat aus, daß für die Kommunikation genutzt werden soll?

Danke,
Sherlock

(*) Man beachte den kleinen Punkt vor dem
Delphi-Quellcode:
$DEFINE

Union 8. Mai 2015 11:47

AW: XE2 - SOAP per HTTPS
 
Willst Du Serverzertifikate oder auch Clientzertifikate verwenden? Falls nur Server, sollte die Installation des Zertifkates ausreichen.

Sherlock 8. Mai 2015 12:32

AW: XE2 - SOAP per HTTPS
 
Danke :) Dann nehme ich einfach mal an, daß das mit dem Zertifikat sich erledigt hat. Was ist nun aber in meinem SOAP Client zu tun? Ich habe das klitzigkleine Problem, daß ich nciht direkt am fraglichen SOAP-Server testen kann. Ich muss also etwas ins Blaue hinein entwickeln und wenn es ungefähr richtig erscheint, kann ich das an den Kunden weiterleiten, das er es ausprobiert. Diesen Vorgang würde ich halt gerne so selten wie möglich durchexerzieren...

Sherlock

Union 8. Mai 2015 13:06

AW: XE2 - SOAP per HTTPS
 
Wenn Du volle Kontrolle über die Zertifikate möchtest, kannst Du das im THTTPRIO.OnBeforePost machen.

Sherlock 11. Mai 2015 12:34

AW: XE2 - SOAP per HTTPS
 
OK, also nochmals zur Konkretisierung: Zertifikate sind abgehandelt. Kann ein Delphi XE2 SOAP-Client "out of the box" https? Also quasi nur durch setzen der Empfänger URI auf etwas, das mit "https://" beginnt. Ich kann es wie gesagt nicht testen, sonst würde ich es bestimmt tun. :wall:

Sherlock

Sherlock 6. Jul 2015 14:34

AW: XE2 - SOAP per HTTPS
 
Ich muss das wieder aufgreifen. Leider ist mir nicht klar, wie ich vorgehen muss. Offenkundig kann der XE2 Soap-Client kein https. Wie muss ich nun also vorgehen, um eine SSL-Verschlüsselung durchzuführen? Das OnBeforePost hört sich gut an, aber was ist dort zu tun?

Sherlock

mikhal 6. Jul 2015 16:09

AW: XE2 - SOAP per HTTPS
 
Schon diesen Link verfolgt?

Grüße
Mikhal

Sherlock 18. Aug 2015 09:44

AW: XE2 - SOAP per HTTPS
 
Und weiter gehts, das Thema kommt nur schleppend voran.
Der Link hat leider nciht gefruchtet. Ich bekommen beim Versuch die Verbindung herzustellen die Fehlermeldung:
Zitat:

A certificate is required to complete client authentication - URL:https://xxxx.xxxx.xx - SOAPAction:http://xxx.xxxx.xx/service
Ich müsste wohl explizit das Zertifikat ansprechen. Ein anderer hat das in .net so gelöst:
Code:
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(pUrl);
httpWebRequest.Headers.Add("SOAPAction", "service");
httpWebRequest.ContentType = "text/xml; charset=utf-8";
httpWebRequest.Method = "POST";
httpWebRequest.ClientCertificates.Add(new X509Certificate2(pCertificate, pCertificatePassword));
Byte[] postDataBytes = Encoding.UTF8.GetBytes(postData);
httpWebRequest.ContentLength = postDataBytes.Length;
Stream requestStream = httpWebRequest.GetRequestStream();
requestStream.Write(postDataBytes, 0, postDataBytes.Length);
requestStream.Close();
HttpWebResponse resp = (HttpWebResponse)httpWebRequest.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
string result = sr.ReadToEnd();

pUrl = URL für den Webservice
pCertificate = Dateiname des Zertifikates
uCertificatePassword = Kennwort des Zertifikates
postData = komplettes XML-Dokument (Envelope)
Wie passt das mit dem bisherigen Ansatz zusammen? :wall:

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.

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