Laden...

Fragen zum Versand einer mit SSL verschlüsselten SOAP Nachricht an einen Webserver

Erstellt von ToDieFoR vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.318 Views
T
ToDieFoR Themenstarter:in
7 Beiträge seit 2008
vor 13 Jahren
Fragen zum Versand einer mit SSL verschlüsselten SOAP Nachricht an einen Webserver

Hallo,

ich habe folgendes Problem:

Ich möchte gerne eine SOAP Nachricht per HTTPS (und SSL) von meinem Programm an einen Webservice senden. Bisher habe ich die SOAP-Nachricht nur mit HTTP gesendet und dafür die HttpWebRequest Klasse benutzt. Der Code dazu sieht wie folgt aus:


            byte[] byteArray = Encoding.UTF8.GetBytes(soapMsg);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://myurl.de");                        

            request.Credentials = CredentialCache.DefaultCredentials;
            request.Headers.Add("SOAPAction", "");
            request.Method = "POST";
            request.ContentLength = byteArray.Length;
            request.ContentType = "application/soap+xml; charset=utf-8";

            using (Stream dataStream = request.GetRequestStream())
            {
                dataStream.Write(byteArray, 0, byteArray.Length);

                log.Debug("Sending soap message to eCM Webservice ... ");
            }
            WebResponse response = null;
            try
            {
                response = request.GetResponse();
            }
            catch (WebException)
            {
                throw new CreatingOutputException("Keine Antwort der eCM-Schnittstelle nach unserer SOAP-Anfrage bekommen!");
            }
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);

            string responseFromServer = null;
            using (Stream dataStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(dataStream);
                responseFromServer = reader.ReadToEnd();

                log.Debug("eCM Webservice returned this response: \n\n" + responseFromServer + "\n\n");

                reader.Close();
                response.Close();
            }

Das hat auch prima funktioniert. Allerdings habe ich beim Versand über HTTPS ein paar Verständnisfragen:

  1. Die WebRequest-Klasse erstellt mir ja ein HttpWebRequest Objekt, wenn es sich bei der angegebenen URL um http:// oder https:// handelt.
    Ich schreibe die Daten dann über einen Stream raus und diese werden somit an den Webserver gesendet.
    Wenn ich jetzt Daten per HTTPS sende, muss ich die Daten vor dem Versenden erst noch verschlüsseln, oder übernimmt diese Aufgabe das HttpWebRequest Objekt?
    Ich habe bei der MSDN noch etwas über einen SslStream-Klasse gelesen.
    Ich hätte jetzt gedacht, dass ich einen SslStream erzeuge und diesen dann an das HttpWebRequest Objekt übergebe, aber ich habe dazu keine Möglichkeit gefunden.

  2. Wie läuft das technisch mit der Überprüfung des Zertifikates ab? Um den Server als gültig anzuerkennen muss ich doch das übermittelte Zertifikat prüfen. Kann ich in der HttpWebRequest Klasse dazu Einstellungen (z.B. anhand von Properties) vornehmen, die diese Prüfung für mich durchführen. Oder brauche ich ein Hilfsobjekt? Wie setzt man diese Prüfung programmatisch um?

Vielen Dank schon mal im Vorraus für jegliche Hilfe 😃

Liebe Grüße,
Björn

G
538 Beiträge seit 2008
vor 13 Jahren

Klemm dich mit dem Fiddler dazwischen, dann kannst du sehen, ob du mehr tun musst als nur "https://" in die Adresse reinschreiben (soll heißen, wenn du noch lesen kannst, was da transportiert wird musst du dich selbst kümmern)

Fiddler arbeitet als WebProxy, kann also bei Lokalen anfragen u.U. kein Ergebnis liefern.

Ich vermute allerdings, dass die SSL Aushandlung und was da alles dran hängt automatisch passiert.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

T
ToDieFoR Themenstarter:in
7 Beiträge seit 2008
vor 13 Jahren

Hallo Grumbler85,

danke für deine Hilfe! Bis ich mich jetzt allerdings in Fiddler eingearbeitet habe, gehen wieder 1-2 tage ins Land.

Hat noch niemand in diesem Forum eine SOAP-Nachricht an einen Webservice gesendet, die via HTTPS und SSL verschlüsselt sein soll?

Es muss mir doch jemand sagen können, ob die HttpWebRequest Klasse das alles automatisch macht. Wenn ja, was muss ich konfigurieren?

Wenn nein, wie wirds gemacht?

Danke für Eure Hilfe!

Grüße,
Björn

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

bitte benutze in Zukunft erstz die Forumssuche. Da hättest Du z.B. Erste gehversuche mit WebRequest, HTTPS und Zertifikaten und Verständnisfrage HTTPS Verbindung gefunden.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

T
ToDieFoR Themenstarter:in
7 Beiträge seit 2008
vor 13 Jahren

Hallo MarsStein,

ich habe mir diese beiden Artikel durchgelesen, allerdings haben sie mir bei meinem Problem leider nicht geholfen.

Aber vielleicht kennst du ja die Antwort auf meine Frage? 😄

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo ToDieFoR,

es ist wie ich in dem einen Threads schrieb:

Wenn Du mit https erfolgreich eine Verbindung aufbaust, so ist diese auf jeden Fall verschlüsselt Um die Verschlüsselung brauchst Du Dich also nicht selbst zu kümmern.
Wenn das Zertifikat fehlerhaft/ungültig ist (der Fall wo ein Browser per Dialog zurückfragt), dann kannst Du das mit der RemoteCertificateValidationCallback regeln, wie in dem anderen Thread beschrieben.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca