HowTo

von | 0 Kommentare

SSL Webservices im SAP nutzen

Für die Anbindung von produktiven Webservices ist eine verschlüsselte Verbindung aus naheliegenden Gründen natürlich bevorzugt. Allerdings muss man für eine SSL-Verbindung einige Vorarbeiten leisten, die man auf Client-Seite (z.B. mit einem Internet Explorer) in der Regel nicht hat.

Z.B. möchte ein SAP-System im Trust-Manager genau die Stammzertifikate mitgeteilt bekommen, denen es Vertrauen darf. Hat man das nicht getan, tauchen in den Programmen Fehler wie “ICM_HTTP_INTERNAL_ERROR” und im ICM-Log (Transaktion smicm->Springen->Trace Datei) folgende Fehlermeldungen auf:

[Thr 4832] *** ERROR during SecudeSSL_SessionStart() from SSL_connect()==SSL_ERROR_SSL
[Thr 4832] session uses PSE file “xxxSAPSSLC.pse”
[Thr 4832] SecudeSSL_SessionStart: SSL_connect() failed
secude_error 9 (0×00000009) = “the verification of the server’s certificate chain failed”
[Thr 4832] >> Begin of Secude-SSL Errorstack >>
[Thr 4832] ERROR in ssl3_get_server_certificate: (9/0×0009) the verification of the server’s certificate chain failed #
ERROR in af_verify_Certificates: (24/0×0018) Chain of certificates is incomplete : “OU=Class 3 Public Primary Certification Auth
ERROR in get_path: (24/0×0018) Can’t get path because the chain of certificates is incomplete #
[Thr 4832] << End of Secude-SSL Errorstack
[Thr 4832] SSL_get_state() returned 0×00002131 “SSLv3 read server certificate B”
[Thr 4832] SSL NI-sock: local=x.x.x.x:12345 peer=y.y.y.y:443
[Thr 4832] <<- ERROR: SapSSLSessionStart(sssl_hdl=000000000248AAF0)==SSSLERR_SSL_CONNECT
[Thr 4832] *** ERROR => IcmConnInitClientSSL: SapSSLSessionStart failed (-57): SSSLERR_SSL_CONNECT

Dieser Fehler wird auch in SAP Hinweis 1094342 beschrieben.

Für den Import der Stammzertifikate benötigt man diese in Dateiform. Dies geht relativ einfach mit dem Internet Explorer. Wichtig: Den IE als Administrator ausführen, ansonsten ist ein Zertifikatsexport in eine Datei nicht möglich.


Auf der Zielseite einen Doppelklick auf das Zertifikatssymbol.


Der Zertifikatspfad zeigt die notwendigen Stammzertifikate, die importiert werden müssen.


Für jeden Eintrag der Zertifikatskette muss man einmal “In Datei kopieren” auswählen.


Dort vorzugsweise ein binär-codiertes Zertifikat verwenden. Das Base-64-Format, dass im Hinweis erwähnt wird, hat nicht funktioniert.

Der Importvorgang im SAP muss dann über die Transaktion STRUST in einer Client-PSE erfolgen. Je nach dem wie man den Aufruf macht, müssen die Zertifikate in andere PSEs importiert werden. Die genutzte PSE kann man z.B. in dem ICM-Log sehen. Die verwendete SAPSSLC.pse entspricht hier der “SSL-Client (Standard)” im Trust-Manager.


Um das Zertifikat der Zertifikatsliste hinzuzufügen, auf “Zertifikat importieren” gehen.


Die Datei auswählen und “Binär” auswählen.


Danach das angezeigte Zertifikat in die Liste aufnehmen und sichern. Danach den ICM-Server durchstarten (smicm).

Nun sollte der Zugriff funktionieren. Wichtig ist, dass die Domain in der URL mit dem Common Name in dem Zertifikat übereinstimmt. Ansonsten gibt einen Fehler vergleichbar mit der IE-Zertifikatswarnung “Der Hostname stimmt nicht überein”, und die Verbindung schlägt fehl.

Im ICM-Log würde das so aussehen:

[Thr 1560] MatchTargetName(“t1234.example.com”, “CN=z99999.example.com, OU=Applications, O=”example.com, Inc.”, L=Hannover
[Thr 1560] SSL NI-sock: local=x.x.x.x:53253 peer=y.y.y.y:443
[Thr 1560] <<- ERROR: SapSSLSessionStart(sssl_hdl=000000000252FE20)==SSSLERR_SERVER_CERT_MISMATCH
[Thr 1560] *** ERROR => IcmConnInitClientSSL: SapSSLSessionStart failed (-30): SSSLERR_SERVER_CERT_MISMATCH {0003000b} [icxxconn

Tipp: In der SM59 eine “HTTP-Verbindung zu ext. Server” anlegen, damit kann man in der Regel schneller testen, als jedes Mal den Webservice zu debuggen.

HowTo

von | 18 Kommentare

ABAP-Webservices mit dem SOA-Manager anlegen

Gerade im SAP-Umfeld ist es interessant, im produktiven System verfügbare Informationen auch anderen Nicht-SAP-Systemen zugänglich machen zu können. Webservices sind ein effektives Mittel um Systeme ohne große Umwege direkt miteinander kommunizieren zu lassen. Mit SAP NetWeaver 7.0 SP14 steht nun auch die Transaktion SOAMANAGER zur Verfügung, die den Umgang mit Webservices deutlich einfacher macht. Dieses Howto beschreibt anhand eines einfachen Beispiels die Vorgehensweise, um mit ABAP und dem SOAMANAGER einen SAP Webservice zur Verfügung zu stellen.

Überblick

  1. Voraussetzungen
  2. Einen Funktionsbaustein und Webservice im ABAP anlegen
  3. Den Webservice mit soapUI nutzen

Voraussetzungen:

  • Eine funktionierende Transaktion SOAMANAGER (ab SAP NetWeaver 7.0 SP14)
  • Entwicklerzugriff und ABAP Kenntnisse , Transaktion SE80
  • Einen technischen User für den eingeschränkten Zugriff (Benutzertyp Kommunikation)
  • Einen Konsumenten, das heißt einen Webservice-Nutzer (zum Testen ist das Webservices-Test-Tool soapUI gut geeignet)

Einen Funktionsbaustein und Webservice im ABAP anlegen

Reihenfolge für das Anlegen eines Webservice im Überblick:

  1. RFC-fähigen Funktionsbaustein anlegen
  2. Input/Export-Parameter definieren
  3. Das Programm
  4. Webservice anlegen
  5. Service im SOAMANAGER browsen und WSDL-Link speichern
  • RFC-fähigen Funktionsbaustein anlegen

    Unser Beispiel wird ein Webservice sein, dem zwei Zahlen übergeben werden und der daraufhin die Summe der beiden Zahlen zurück gibt.
    Dafür in der Transaktion SE80 einen Funktionsbaustein anlegen und dabei in den Eigenschaften “Remote fähiger Baustein” anwählen.

  • Input/Export-Parameter definieren

    Die Parameter definieren den Webservice, die Verwendung von Tabellen und Changing sind hier nicht vorgesehen.

    Die Import-Parameter bestimmen die Werte, die an den Webservice übergeben werden. In dem Bespiel die beiden Zahlen, die von unserem Programm addiert werden sollen. Die Parameter sollten Optional sein, damit man später das WSDL-Dokument (siehe unten) abrufen kann und als Wert übergeben werden.


    Der Export-Parameter definiert die Rückgabe.


    Diese Parameter müssen unbedingt vorher festgelegt werden und sollten sich später auch nicht mehr ändern, da ansonsten sich die ganze Webservice-Definition ändert und somit für Konsumenten nicht mehr nutzbar ist.

  • Das Programm


    Das Programm sichern und aktivieren.

  • Webservice anlegen

    Über einen Rechts-klick auf den Funktionsbaustein kann man einen Web Service Wizard starten.









    Der Webservice ZTH_WS_TESTING ist damit definiert und einsatzbereit.

  • Service im SOAMANAGER browsen und WSDL-Link speichern

    Bevor der Webservice durch andere Systeme genutzt werden kann, benötigen diese eine Beschreibung, wie und mit welchem Parametern der Webservice funktioniert. Diese Definition steckt in einem WSDL-Dokument und wird zum Konsumieren des Webservices im ABAP und anderen externen System benötigt. Die Transaktion SOAMANAGER öffnet einen Browser für den Zugriff auf das SOA-Management und bietet die Möglichkeit eine Download-URL für das WSDL-Dokument zu ermitteln.



    Zunächst muss der neue Service selektiert werden.


    Der markierte Link öffnet das WSDL-Dokument. Hinweis: Das Browserfenster wird unter Umständen im Hintergrund geöffnet.


    Die URL aus der Adressleiste speichern.

Den Webservice mit soapUI nutzen

Das Webservice Testing Tool soapUI ist als OpenSource-Tool unter http://www.soapui.org/ verfügbar und bietet die Möglichkeit schnell einfacher Webservice Funktionstests durchzuführen. Ideal also, um unseren eben angelegten Webservice zu testen.


“New soapUI Project” auswählen und in dem Dialog die vorher gespeicherten WSDL-URL einfügen.


Technischen User angeben.


Es sollen die Zahlen 200 und 400 addiert werden. Wichtig ist etwaige Kommentare wie z.B. <!–OPTIONAL–> zu entfernen. Diese können beim Aufruf des Webservices Probleme bereiten.


Über den Button “Auth” am unteren Rand müssen die Benutzerdaten für den Aufruf hinterlegt werden.


Auf “Submit Request” links oben gehen. Die Antwort des Webservices (die Summe der beiden Zahlen) erscheint danach auf der rechten Seite. Damit ist der Webservice erfolgreich getestet!