SAP Jobsuche bei DV-Treff
Thomas Tausend
vor 4 Jahre
Hallo werte Gemeinde!

Eine kleine Herausforderung für VBA/Access/Zertifikats-Profis:

Für eine Access-Datenbank brauche ich Zugriff auf die API von SAP. Die benötigten Aufrufe wurden bereits erfolgreich via Postman getestet und funktionieren einwandfrei.

Ähnliche Schnittstellen zu JIRA und Confluence (ebenfalls über https - sogar beim selben Kunden!) habe ich bereits erfolgreich umgesetzt - OHNE Zertifikate anzugeben!

Mit folgendem Code versuche ich den Zugriff:

Code:

Zitat:

Dim SAP As New WinHttp.WinHttpRequest

Dim json As String

Dim SAPuser As String

Dim SAPpw As String

SAPuser = ""

SAPpw = ""

json = json & "{"

json = json & " ""top"": ""1"""

json = json & "}"

payload = "/API_PURCHASEREQ_PROCESS_SRV/A_PurchaseRequisitionHeader"

myURL = "https://xxxxxx.yyyyyyyyy.com:20400/sap/opu/odata/sap" & payload

(Server nur im lokalen Netz erreichbar - was mit Postman auch funktioniert!)

With SAP

.SetClientCertificate "LOCAL_MACHINEMYxxx.yyy.zzz.com"

.Option(4) = 13056 ' SSL-Zertifikate nicht reklamieren (eigentlich...)

.Open "GET", myURL, False

.setRequestHeader "Content-Type", "application/json"

.setRequestHeader "Accept", "application/json"

.setRequestHeader "x-csrf-token", "fetch"

.setRequestHeader "Authorization", "Basic"

.SetCredentials SAPuser, SAPpw, 0

.Send json <== Hier tritt der Fehler auf!

Versuche ich dieses Script aufzurufen, dann bekomme ich - je nach Konstellation eine Fehlermeldung:

1) Kein Client-Zertifikat (oder ungültigen Pfad) übergeben:

==> Die Zertifizierungsstelle ist ungültig oder fehlerhaft (80072f0d)

2) Zertifikat NICHT angegeben UND Option(4) = 13056 (was angeblich Meldungen wegen Zerti-Problemen unterdrücken soll):

==> Beim Verarbeiten des Zertifikats ist ein unbekannter Fehler aufgetreten (80090327)

3) Zertifikat angegeben EGAL ob Option(4) = 13056 aktiv ist oder NICHT:

==> Die Anmeldeinformation im Clientzertifikat wurde nicht erkannt (80072f9a)

Am Proxy dürfte es nicht liegen, da es sich um eine interne Adresse handelt und auch Postman egal ist, ob Proxy aktiviert wurde oder nicht.

Eigentlich hatte ich große Hoffnungen in die Option(4) = 13056 gesetzt, die laut diverser Foren eigentlich Zertifikatsprobleme ignorieren sollte. Ausgeschrieben: Option(WinHttpRequestOption_SslErrorIgnoreFlags) = SslErrorFlag_Ignore_All)

Das Client-Zertifikat wurde vom Unternehmen installiert, aber auch selbst-erstellte und -signierte Zertifikate an gleichem Pfad ergeben genau das selbe Ergebnis.

Wer kann mir Tipps bzw. Denkanstöße geben?

Warum funktioniert die Option(4) nicht?

Kann es am exotischen Port 20400 (auf den ich keinen Einfluss nehmen kann) liegen?

Wer hat mit Access schon erfolgreich eine SAP-API genutzt?!

1000(s) Dank im Voraus!

Thomas Tausend

Förderer

Johannes Gerbershagen
vor 4 Jahre
Der Zertifikatshandshake läuft Server und Clientseitig und hier scheint es zu klemmen.

Der Client (VBA-Applikation) überprüft, ob das Serverzertifikat von einer Ihr bekannten Zertifikatsstelle signiert wurde.

Clientzertifikat:

Ist dieses überhaupt notwendig. Benutzer und Password werden bereits übergeben. In der Transaktion SICF Reiter Anmelde-Daten kannst du dies prüfen. Nur wenn das Anmeldeverfahren "Obligatorisch mit SSL-Zertifikat" gewählt ist, brauchst du überhaupt ein Client-Zertifikat. Die Anmeldedaten werden damit quasi doppelt übergeben.

Zitat:

1) Kein Client-Zertifikat (oder ungültigen Pfad) übergeben:

==> Die Zertifizierungsstelle ist ungültig oder fehlerhaft (80072f0d)

Die VBA-Applikation kennt die Zertifizierungsstelle, die das Serverzertifikat signiert hat, höchstwahrscheinlich nicht. Hier wurde ich zuerst probieren, das Zertifizierungsstellenzertifikat zu installieren.

Die Option(4) = 13056:

Laut Microsoftdoku  bedeutet dies, das Serverzertifikat wird nicht geprüft.

Zitat:

2) Zertifikat NICHT angegeben UND Option(4) = 13056 (was angeblich Meldungen wegen Zerti-Problemen unterdrücken soll):

==> Beim Verarbeiten des Zertifikats ist ein unbekannter Fehler aufgetreten (80090327)

Dieses Problem habe ich genau so bekommen bei Verwendung von TLS 1.2

Verwendet dein SAP-System auch TLS 1.2?

Der KBA-Hinweis 

könnte hier eine Hilfe sein.


Thomas Tausend
vor 4 Jahre
Hallo Johannes,

danke für Deine Tipps - ich werde meine SAP-Admins mal ins Gebet nehmen, sobald diese wieder aus dem Urlaub zurück sind...

Inzwischen versuche ich das VBA-seitig zu knacken. Es will mir nicht einleuchten, warum Postman die Requests wuppt und VBA da solche Probleme macht...

1000(s) Grüße

Thomas Tausend