PDA

View Full Version : QSYS2.http_post mit Zertifikat



mk
28-07-22, 12:15
Hallo zusammen,

ich hoffe das jemand das Thema kennt :-)

Wir starten im RPG einige QSYS2.HTTP_POST Anfragen.
Auf den Textsystemen die im Modus http laufen klappen die Anfragen einwandfrei.

Jetzt sollen die gleichen Abfragen mit https gegen ein zweites System laufen das.

Bei den Abfragen kommt folgender Fehler hoch:

Nachricht . . . : Fehler bei benutzerdefinierter Funktion in Teildatei QSQPTABL.Ursache . . . . : Beim Aufrufen der benutzerdefinierten Funktion HTTP_POST in Bibliothek QSYS2 ist ein Fehler aufgetreten. Der Fehler trat beim Aufrufen des zugeordneten externen Programms oder Serviceprogramms QSQAXISC in Bibliothek QSYS, Programmeingangspunkt bzw. externem Namen axiscPostClob, spezieller Name HTTP_POST, auf. Der Fehler trat bei Teildatei QSQPTABL Datei QSQPTABL in Bibliothek QSYS2 auf. Der Fehlercode ist 1. Fehlercodes und ihre Bedeutung: 1 -- Das externe Programm oder Serviceprogramm hat SQLSTATE 38501 zurückgegeben. Die vom Programm zurückgegebene

Textnachricht ist: AXISC ERROR : HTTPTransportException: Cannot initialize a channel to the remoteend.Failed to establish SSL connection to server, the operation gsk_secure_soc_init() failed.GSKit Error is 6000 - Das Zertifikat wurde nicht von einer anerkannten Zertifizierungsinstanz signiert. .

2 -- Das externe Programm ist vor seiner Beendigung fehlgeschlagen. 3 -- Bei der Datenbank trat ein Zeitüberschreitungsfehler beim Warten auf die Rückkehr zum Hauptprogramm auf. Der von der Datenbank verwendete Zeitüberschreitungswert betrug 0 Minuten und 30 Sekunden. 4 -- Das externe Programm ist nicht mehr vorhanden oder wurde nicht gefunden. 5 -- Bei einem der Eingabeparameter der Funktion ist ein Datenabgleichungsfehler aufgetreten. 6 bis 26 -- Die vorangegangenen Nachrichten im Jobprotokoll beachten. Für ein externes Programm ist der angezeigte Programmeingangspunkt *NFehlerbeseitigung: Bei Fehlercodes 1 und 2 die Fehlerursache anhand von SQLSTATE oder einer zuvor aufgelisteten Nachricht feststellen. Bei Fehlercode 3 entweder den Zeitüberschreitungswert mit Hilfe der QAQQINI-Dateieinstellung erhöhen oder feststellen, weshalb das externe Programm oder das Serviceprogramm nicht innerhalb der zugeordneten Zeit zurückgekehrt ist. Bei Fehlercode 4 sicherstellen, dass das Programm oder Serviceprogramm für die Dauer der Abfrage vorhanden ist. Bei Fehlercode 5 die Ursache für den Datenabgleichungsfehler bestimmen. Bei Fehlercode 6 bis 26 die vorangegangenen Nachrichten im Jobprotokoll beachten. Weitere Informationen über benutzerdefinierte Funktionen enthält die Themensammlung "DB2 for IBM i SQL Programming" in der Kategorie Datenbank im


Die Fehlerursache ist klar. Das zweite Testsystem hat nur ein internes Zertifikat.

Kann man die IBM i dazu bringen das Zertifikat zu akzeptieren ?

Gruß an *ALL

Fuerchau
28-07-22, 12:28
"Das Zertifikat wurde nicht von einer anerkannten Zertifizierungsinstanz signiert. ."
https://www.ibm.com/docs/de/i/7.2?topic=concepts-certificate-authority
Ggf. hilft dies:
https://www.ibm.com/docs/en/i/7.3?topic=dcm-defining-ca-trust-list-application

Wichtig ist, dass das sog. Root-Zertfikat mit der entsprechenden Domain z.B. "meinedomain.de" eingetragen ist.
Mit selbst erstellten Zertifikaten gibt es immer wieder diesbezüglich Probleme.

Andreas_Prouza
29-07-22, 07:38
Du musst auf der IBM i in den DCM (Digital Certificat Manager: https://www.ibm.com/docs/en/i/7.3?topic=dcm-starting-digital-certificate-manager#rzahu66a-dcm_start).
Dort muss du den *SYSTEM Keystore auswählen (falls nicht vorhanden, dann einfach erstellen).
Im *SYSTEM Keystore musst du dann nur noch das selbstsignierte Zertifikat importieren.
Sollte das Serverzertifikat mit einer CA (Zertifizierungsinstanz=Root-Zertifikat) verpackt sein, dann reicht es wenn du lediglich das Root-Zertifikat importierst.
Generell ist das Konzept mit dem Root-Zertifikat immer zu bevorzugen, da es dann alles viel einfacher und sicherer macht.

Im Zertifikat selbst steht auch drinnen für welche Domain das Zertifikat erstellt wurde. Wenn du aber versucht via IP den Request abzusetzen, dann wirft der SSL Check auch eine Fehlermeldung.

lg Andreas