Announcement

Collapse
No announcement yet.

WebService mit HTTPS

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • WebService mit HTTPS

    Hallo,

    ich muss mich mit einem HTTPS Web Service verbinden.
    Eine Test Verbindung funktioniert problemlos, wobei auf dem Testserver kein HTTPS eingesetzt wird.

    Gibt es eine Moeglichkeit mit der THTTPRIO Klasse eine Verbindung auf einen HTTPS Service durchzufuehren ?

    DANKE

    Sabine

  • #2
    Guten Tag
    Wenn es um eine bestehende https Verbindung anstelle einer http geht, dann genügt nach dem Importieren der WSDL unter bindings und dem endpoint einfach https://xyz url anzugeben.
    Wenn aber eine Client- oder Server Authentifizierung mit Zertifikaten ins Spiel kommt, wird je nach SOAP over HTTPS auch wieder ein ServerWebService oder ein ClientWebService unterschieden (sollte man zumindest).
    Die Delphi Komponenten beherrschen diese Kunst nicht von Haus aus, man muss sich diese "Bordmittel" zusätzlich beschaffen oder mit abgeleiteten SOAP Headern oder HTTP Handlern umgehen können.
    Einen guten Einstieg findet man in einem Artikel "Zertifikate in Delphi Applikationen:

    http://www.streamsec.com/articles_usingcert.asp

    Als Komplettlösung gibt es aufbauend auf dem RemObjects SDK und den StreamSec Tools eine SSL/TSL Server Lösung mit eigener CA:

    http://remobjects.com/devcenter/arti...D-50676397D7E0

    Wenn also mit THTTPrio, Delphi 7.1 ein https Zugriff erforderlich ist und der WebServer bereits https via port 443 unterstützt muss je nachdem noch ein Client Zertifikat her.
    Mit sogenannten self signed certificates und einer Erweiterung in der SOAPHTTPTrans.pas ist dies zu bewerkstelligen, na ja jetzt wirds kompliziert, jedenfalls lässt sich das ganze Zertifikat als base64 Konstante definieren:

    const
    cmyCACert = 'MIIE8jCCA9qgA...';

    uses
    SsBase64;

    var
    aSS: TStringStream;
    begin
    aSS:= TStringStream.Create(MIME64ToStr(cmyCACert));

    Hoffe den Appetit geweckt zu haben

    Comment


    • #3
      Hallo

      besten DANK fuer die Antwort.

      Nachdem ich mich nun genauer mit dem WebService beschäftigt habe, musste ich feststellen dass es sich um einen JBoss/Apache WebService mit WS Security handelt.
      Gibt es eine Möglichkeit sich mit dem Delphi 2006 Compiler auf einen WS gesicherten WebService zu verbinden??
      ODER sind irgendwelche Komponenten bekannt?


      DANKE

      Sabine

      Comment


      • #4
        Ja die WS Security ist eine Sammlung von Standards, wobei auch TLS zum Zuge kommt, einfacher ist eine reine Server-Authentifizierung vom Delphi Cleint zu realisieren, bei der Verschlüsselung sind vielfach die HTTP Proxies ein Problem, die sind dann nicht mehr in der Lage den Header zu interpretieren, Tunneling ist dann hier der Ausweg. Nun, du hast nach Komponenten gefragt:
        Es gibt eine OpenSSL Import Unit für Delphi:

        http://www.disi.unige.it/person/Ferr...delphiopenssl/

        Prinzipiell kann man dann jede Plattform, wie JBoss oder BEA AquaLogic ansprechen, die den Standard Handshake unterstützen.
        Z.B. ein Schlüsselpaar zu generieren:

        Require OpenSSLUtils.pas

        procedure GenerateKeyPair;
        var
        kp: TKeyPairGenerator;
        begin
        kp:= TKeyPairGenerator.Create;
        kp.KeyFileNames('c:\temp\mykeys'); // it create a pair c:\temp\mykeys.key
        // and c:\temp\mykeys.pub
        kp.Password:= 'mypass is the word'; // Required
        kp.GenerateRSA;
        end;

        Oder und man benutzt die vorhandenen Indy Components, die auch TLS etc. anbieten. Konkret sind es die Indy I/O Handlers:

        var
        IdServerIOHandlerSSLOpenSSL1: TIdServerIOHandlerSSLOpenSSL;


        mit bestem Gruss, Max

        Comment


        • #5
          HTTPS Demo für Indy

          Ab Delphi 6 gibt es im Demoverzeichnis ../Demos/Indy/HttpServer eine Implementierung für https basierend auf OpenSSL!
          Die unit IdSSLOpenSSL kapselt den SSL-Stack mit den beiden Dll's:

          const
          SSL_DLL_name = 'ssleay32.dll'; {Do not localize}
          SSLCLIB_DLL_name = 'libeay32.dll'; {Do not localize}

          die sich in der unit
          IdSSLOpenSSLHeaders;
          befinden.

          Damit das Beispiel läuft sind aber Anpassungen vonnöten, zuerst die bindings:
          HTTPServer.Bindings.Items[0].IP:= '192.168.133.15';
          HTTPServer.Bindings.Items[0].port:= 80;

          Dann sollten drei Dateien mit den OpenSSL Tools erstellt werden, die sich wie folgt zuweisen lassen, entwender im Code via ini-file oder in der Komponente:

          RootCertFile:= AppDir +
          _IniFile.ReadString('CERT', 'ROOTCA', '');
          CertFile:= AppDir +
          _IniFile.ReadString('CERT', 'SCERT', '');
          KeyFile := AppDir +
          _IniFile.ReadString('CERT', 'RSAKEY', '');

          Man generiert sich für den Server einen RSAKey, der dann mit dem RootCA zu einem Zertifikat signiert wird. Den RootCA kann man auch später einfordern, es genügt auch ein selbstsigniertes Zertifikat.

          In der Regel fehlt die datei msvcr71.dll. Ob das System wirklich chiffriert funktioniert, lässt sich dann nur mit einem websniffer prüfen.
          ;

          Comment

          Working...
          X