collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 27
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 14662
  • stats Beiträge insgesamt: 74468
  • stats Themen insgesamt: 10020
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 933

Autor Thema: winHTTP meldet Zertifikatsprobleme  (Gelesen 220 mal)

Offline thomas1000

  • Newbie
  • Beiträge: 5
winHTTP meldet Zertifikatsprobleme
« am: Januar 02, 2020, 11:39:59 »
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:



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
 

Offline PhilS

  • Global Moderator
  • Access-Meister
  • *****
  • Beiträge: 733
    • Tipps zu Access, VBA, SQL und Co.
Re: winHTTP meldet Zertifikatsprobleme
« Antwort #1 am: Januar 02, 2020, 12:18:13 »
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)
Disclaimer: Ich bin kein VBA/Access/Zertifikats-Profi und habe mit Client-Zertifikaten bisher keine eigenen Erfahrungen.

Ich habe den Eindruck, dass bei dir ein Missverständnis bzgl. Zertifikate vorliegt.

Alle Optionen, die du auf dem Client bzgl. dem Ignorieren von Zertifikatsproblemen setzen kannst, betreffen das serverseitige Zertifikat. Du kannst den Client anweisen Fehler zu ignorieren wie abgelaufene, ungültige, oder Serverzertifikate für eine falsche Domain.

Du kannst damit natürlich nicht den Server anweisen, ein Problem mit deinem Client-Zertifikat zu ignorieren, wenn der Server ein gültiges Zertifikat verlangt.

Ebensowenig kannst du Fehler unterdrücken, die bei der Zuweisung des Client-Zertifikats entstehen. Das geht einfach mit On Error Resume Next, hilft dir aber rein gar nichts, wenn der Server das Zertifikat erwartet. (s.o.)


Aus meiner Sicht solltest du dich auf das .SetClientCertificate konzentrieren. Welches Zertifikat gibst du den in Postman zu Authentifizierung an?

Hast du schon versucht, mit einem Tool wie Fiddler die HTTP-Request von Postman mit deinen zu vergleichen? Gibt es signifikante Unterschiede?

 

Offline thomas1000

  • Newbie
  • Beiträge: 5
Re: winHTTP meldet Zertifikatsprobleme
« Antwort #2 am: Januar 02, 2020, 14:28:29 »
Hallo und danke für die schnelle Antwort!

Der Postman "stolpert" auch über Probleme mit dem lokalen Zertifikat, ignoriert diese aber den "unverbindlichen Wunsch" nach einem lokalen Client-Zertifikat und schafft es trotzdem, mit dem Server zu kommunizieren:

tls: {…}
authorizationError: "UNABLE_TO_GET_ISSUER_CERT_LOCALLY"
authorized: false
cipher: {…}
ephemeralKeyInfo: {…}
peerCertificate: {…}
protocol: "TLSv1.2"
reused: false

Nach meinen bisherigen Recherchen FRAGT der Server zwar, ob ein lokales Zertifikat vorliegt, dies kann jedoch ignoriert/verneint werden (Postman hat ja auch ein "authorized: false"), aber die Kommunikation sollte trotzdem möglich sein... VBA wird allerdings panisch, wirft einen Fehler und das war's dann mit dem Dialog...

Ein tolles 2020 noch!

Thomas

PS: Müssen denn die Captchas wirklich SO schwer zu lesen sein?! Ist Euer Forum wirklich soviel Spam ausgesetzt?! Man kann es ja auch übertreiben...
 

Offline PhilS

  • Global Moderator
  • Access-Meister
  • *****
  • Beiträge: 733
    • Tipps zu Access, VBA, SQL und Co.
Re: winHTTP meldet Zertifikatsprobleme
« Antwort #3 am: Januar 02, 2020, 16:23:37 »
Nach meinen bisherigen Recherchen FRAGT der Server zwar, ob ein lokales Zertifikat vorliegt, dies kann jedoch ignoriert/verneint werden (Postman hat ja auch ein "authorized: false"), aber die Kommunikation sollte trotzdem möglich sein... VBA wird allerdings panisch, wirft einen Fehler und das war's dann mit dem Dialog...
Schau mal ob du das folgende implementieren kannst (und ob es hilft):
With SAP
      .Option(WINHTTP_OPTION_CLIENT_CERT_CONTEXT) = WINHTTP_NO_CLIENT_CERT_CONTEXT
Das ist nur freihändig aus der Doku übernommen. Die Werte der Konstanten etc. musst du recherchieren/ergänzen.
Siehe: SSL in WinHTTP - Optional Client SSL Certificates

PS: Müssen denn die Captchas wirklich SO schwer zu lesen sein?! Ist Euer Forum wirklich soviel Spam ausgesetzt?! Man kann es ja auch übertreiben...
Es gab durchaus verschiedene Vorfälle in dieser Richtung, die unserer Meinung nach diese strikte Verifizierung erforderlich machen. - Bei deinem nächsten Beitrag solltest du allerdings zum letzten Mal zur Verifizierung aufgefordert werden.
 

Offline thomas1000

  • Newbie
  • Beiträge: 5
Re: winHTTP meldet Zertifikatsprobleme
« Antwort #4 am: Januar 03, 2020, 10:18:15 »
Hallo PhilS!

Tausend(s) Dank für den Hinweis. Sieht vielversprechend aus - leider sind die Konstanten WINHTTP_NO_CLIENT_CERT_CONTEXT  bzw. WINHTTP_NO_CLIENT_CERT_CONTEXT im VBA-Kontext nicht definiert - aber ich werde in dieser Richtung weiterforschen...

Leider sind inzwischen in der Microsoft-Doc praktisch alle Codebeispiele nur noch in C++ / C#

Sollte ich das Problem knacken, werde ich den entsprechenden Code natürlich veröffentlichen...

1000(s) Grüße

Thomas Tausend
 

Offline PhilS

  • Global Moderator
  • Access-Meister
  • *****
  • Beiträge: 733
    • Tipps zu Access, VBA, SQL und Co.
Re: winHTTP meldet Zertifikatsprobleme
« Antwort #5 am: Januar 03, 2020, 13:12:30 »
Tausend(s) Dank für den Hinweis. Sieht vielversprechend aus - leider sind die Konstanten WINHTTP_NO_CLIENT_CERT_CONTEXT  bzw. WINHTTP_NO_CLIENT_CERT_CONTEXT im VBA-Kontext nicht definiert - aber ich werde in dieser Richtung weiterforschen...
Wenn solche Konstanten online nicht (einfach) zu finden sind, kann man sie in den entsprechenden Header Dateien der Windows API finden (hier winhttp.h). Alle Header kann man mit dem kostenlosen Windows SDK herunterladen. -> Windows 10 SDK

 

Offline thomas1000

  • Newbie
  • Beiträge: 5
Re: winHTTP meldet Zertifikatsprobleme
« Antwort #6 am: Januar 03, 2020, 14:56:23 »
Danke für Deine Ausdauer!

in der winhttp.h gibt es ein passendes #define

#define WINHTTP_OPTION_CLIENT_CERT_CONTEXT              47
bzw.
#define WINHTTP_NO_CLIENT_CERT_CONTEXT NULL

Allerdings liefert ein

.Option(47) = Null
nur ein

Laufzeitfehler 5 - "Ungültiger Prozeduraufruf oder ungültiges Argument"

Auch an einem Haltepunkt bringt ein

? .option(47)
im Direktbereich (wo ? .option(0) usw. dann prima funktioniert) nur ein "Falscher Parameter"

Es macht übrigens keinen nennenswerten Unterschied, ob ich mein winhttp-Objekt als "WinHttpRequest" oder "WinHttpRequest.5.1" deklariere.
 

Offline PhilS

  • Global Moderator
  • Access-Meister
  • *****
  • Beiträge: 733
    • Tipps zu Access, VBA, SQL und Co.
Re: winHTTP meldet Zertifikatsprobleme
« Antwort #7 am: Januar 03, 2020, 17:10:15 »
Allerdings liefert ein

.Option(47) = Null
nur ein

Laufzeitfehler 5 - "Ungültiger Prozeduraufruf oder ungültiges Argument"

Probier mal:
.Option(47) = 0
Es macht übrigens keinen nennenswerten Unterschied, ob ich mein winhttp-Objekt als "WinHttpRequest" oder "WinHttpRequest.5.1" deklariere.
Mit "WinHttpRequest" wird bei CreateObject in die Standard-Version gemäß Registry instanziert. Wenn das 5.1 entspricht, oder eine Version 5.1 nicht explizit registriert ist, kommt das auf dasselbe raus.
 

Offline thomas1000

  • Newbie
  • Beiträge: 5
Re: winHTTP meldet Zertifikatsprobleme
« Antwort #8 am: Januar 13, 2020, 10:04:59 »
Sorry für das späte reply - war in Urlaub...

Bereits ein

Debug.Print "47: "; .Option(47)

liefert "Laufzeitfehler - Falscher Parameter".

Access-Basic scheint also eine Option in diesem Wertebereich nicht zu kennen!

Das treibt mich noch in den Wahnsinn...
 

Offline markus888

  • Access-Profi
  • **
  • Beiträge: 350
Re: winHTTP meldet Zertifikatsprobleme
« Antwort #9 am: Januar 13, 2020, 10:40:13 »
Access-Basic scheint also eine Option in diesem Wertebereich nicht zu kennen!


Was hat das mit Access zu tun?
Du verwendest hier die WinHttpRequest Klasse.
Diese COM KLasse hat mit Access überhaupt nichts zu tun.
Außerdem, solltest du mit EarlyBinding arbeiten,
zeigt die Intellisens doch alle möglichen Werte an.
Du findest die auch alle im Objektkatalog aufgelistet.
Da bist du nicht aufs "Probieren" angewiesen.

Edit: Einfach mal nach der Konstanten googeln.
Mein erster Treffer: https://docs.microsoft.com/en-us/windows/win32/winhttp/option-flags
« Letzte Änderung: Januar 13, 2020, 10:47:51 von markus888 »
10 Jahre Access
 

 

WinHttp.WinHttpRequest.5.1. Response Fehler

Begonnen von Malte123Board Access Programmierung

Antworten: 2
Aufrufe: 2596
Letzter Beitrag März 06, 2013, 15:55:37
von Malte123
WinHttp.WinHttpRequest.5.1 streikt mit Win7, Win10 ist iO

Begonnen von ernie55Board Access Programmierung

Antworten: 0
Aufrufe: 1709
Letzter Beitrag Juli 19, 2017, 09:06:11
von ernie55

Advertisment / Werbung - Amazon Affiliate Links