[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Mar 2020
    Beiträge
    10

    Webserice Client RPG aktuell an https erzeugt Fehler

    Moin,
    bin leider mit meinem griechisch (latein ist langweilig) am Ende.
    Bekomme folgenden Log Datei Inhalt, wenn ich versuche, eine https://... Verbindung aufzubauen.
    Kann mich da irgendwer auf die richtige Spur setzen???
    (ich habe keinen Zeitdruck...ich doch nicht...)
    PHP-Code:
    30/03/2020 17:14:07:280   00004502  transport  TCPChannel::open(): 
    30/03/2020 17:14:07:281   00004502  transport  TCPChannel::doSSLHandshake(): 
    30/03/2020 17:14:07:281   00004502  transport  TCPChannel::createGSKitEnvironment(): 
    30/03/2020 17:14:07:281   00004502  transport  D TCPChannel::createGSKitEnvironment(): Attempting to set keyring file using ''
    30/03/2020 17:14:07:282   00004502  transport  D TCPChannel::createGSKitEnvironment(): Enabled SSLV2
    30
    /03/2020 17:14:07:282   00004502  transport  D TCPChannel::createGSKitEnvironment(): Enabled SSLV3
    30
    /03/2020 17:14:07:283   00004502  transport  D TCPChannel::createGSKitEnvironment(): Enabled TLSV1
    30
    /03/2020 17:14:07:283   00004502  transport  D TCPChannel::createGSKitEnvironment(): Enabled TLSV11
    30
    /03/2020 17:14:07:283   00004502  transport  D TCPChannel::createGSKitEnvironment(): Enabled TLSV12
    30
    /03/2020 17:14:07:284   00004502  transport  D TCPChannel::createGSKitEnvironment(): Failed to initialize the SSL environmentGSKit Error is 202 - Die Schlüsseldatenbankdatei wurde nicht gefunden.
    30/03/2020 17:14:07:284   00004502  transport  TCPChannel::createGSKitEnvironment(): Exit with return code of AXIS_FAIL
    30
    /03/2020 17:14:07:284   00004502  transport  X TCPChannel::doSSLHandshake(): Line=855File=/build/axiscpp/src/ws-axis/c/src/transport/TCPChannel/TCPChannel.cpp:
    HTTPTransportException SERVER_TRANSPORT_CHANNEL_INIT_ERRORGSKit Error is 202 - Die Schlüsseldatenbankdatei wurde nicht gefunden.
    30/03/2020 17:14:07:284   00004502  transport  TCPChannel::doSSLHandshake(): 
    30/03/2020 17:14:07:285   00004502  engine     axiscTransportFlush(): 
    30/03/2020 17:14:07:285   00004502  engine     axiscTransportReceive(): 

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Guten Morgen!

    "Schlüsseldatenbankdatei wurde nicht gefunden." Klingt danach als ob er keinen Keystore mit den Trusted Certificates finden könnte.
    Habt ihr einen System-Keystore angelegt? Am besten geht das über den DCM. Im Navigator for i kommst du dort hin. Oder via http://host:2001/QIBM/ICSS/Cert/Admin/qycucm1.ndm/main0

    Hier sollten im *SYSTEM key store alle offiziellen Zertifizierungsinstanzen enthalten sein, damit die offiziellen Zertifikate erlaubt sind.
    Falls dein HTTPS ein self signed certificate ist, dann musst du dieses ebenfalls in deinen Keystore hinzufügen.

    lg Andreas

  3. #3
    Registriert seit
    Mar 2020
    Beiträge
    10
    Hallo Andreas,

    sorry, aber geht es etwas genauer? Kann ich den *System key store einfach so anlegen? Hat das Seiteneffekte? Was muss ich dabei beachten? Für mich ist das Thema keystore völlig neu....
    Das ist übrigens ein DHL track and trace Aufruf...

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Für einen erfolgreichen SSL Handshake muss (als einer von mehreren Steps) das Zertifikat geprüft werden.
    Jeder Browser (Firefox, Chrom) aber auch diverse Clients, wie z.B. wenn du mit Java oder RPG auf ein WebService via HTTPS zugreifen willst, muss auf einen Keystore zugreifen können um das Zertifikat zu prüfen.

    Im Windows gibt es einen System-Keystore, manche jedoch haben auch einen eigenen (z.B. Java).
    In diesem Keystore ist die sogenannten Root-Zertifikate drinnen.
    Eines dieser Root-Zertifikate ist DST Root CA X3.
    Ich habe für meine eigene homepage (https://www.prouza.at) ein Zertifikat von Let's Encrypt ausstellen lassen. Die haben übergeordnet DST Root CA X3.
    Jeder "Standard" Keystore im Windows, Java oder auch IBM i das Zertifikat von DST Root CA X3 enthalten.
    Dadurch werden automatisch alle Zertifikate aktzeptiert, die dieses als Root Zert. besitzen.

    Im DCM kannst du den *SYSTEM Speicher ohne weiteres anlegen.
    Wenn du im RPG dann deinen Web Service Aufruf machst, sollte zumindest dieses Problem einmal gelöst sein.

  5. #5
    Registriert seit
    Mar 2020
    Beiträge
    10
    Der *System key store ist anglegt. Auch des DHL Zertifikat ist dort eingetragen.
    Das ändert aber leider gar nichts an der Fehlermeldung. Diese kommt nach wie vor.
    Ich bitte um andere Vorschläge.
    Es ist wirklich dringend...

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    1.508

  7. #7
    Registriert seit
    Mar 2020
    Beiträge
    10
    gestern noch stand ich am Abgrund...jetzt bin ich inzwischen etwas weiter...
    Mir fehlte noch der Aufruf für axiscTransportSetProperty für das Property AXISC_PROPERTY_HTTP_SSL.
    Hier habe ich dann die Keyring Datei eingetragen...und jetzt bekomme ich den nächsten Fehler...
    PHP-Code:
    15/04/2020 09:51:02:227   00012485  transport  TCPChannel::close(): 
    15/04/2020 09:51:02:228   00012485  transport  TCPChannel::close(): 
    15/04/2020 09:51:02:228   00012485  transport  HTTPTransport::closeConnection(): 
    15/04/2020 09:51:02:229   00012485  transport  TCPChannel::open(): 
    15/04/2020 09:51:02:229   00012485  transport  D TCPChannel::open(): Connecting tocig.dhl.de:443
    15
    /04/2020 09:51:02:290   00012485  transport  TCPChannel::open(): 
    15/04/2020 09:51:02:290   00012485  transport  TCPChannel::doSSLHandshake(): 
    15/04/2020 09:51:02:291   00012485  transport  TCPChannel::createGSKitEnvironment(): 
    15/04/2020 09:51:02:291   00012485  transport  D TCPChannel::createGSKitEnvironment(): Attempting to set keyring file using '/QIBM/USERDATA/ICSS/CERT/SERVER/DEFAULT.KDB'
    15/04/2020 09:51:02:292   00012485  transport  D TCPChannel::createGSKitEnvironment(): Enabled SSLV2
    15
    /04/2020 09:51:02:292   00012485  transport  D TCPChannel::createGSKitEnvironment(): Enabled SSLV3
    15
    /04/2020 09:51:02:292   00012485  transport  D TCPChannel::createGSKitEnvironment(): Enabled TLSV1
    15
    /04/2020 09:51:02:293   00012485  transport  D TCPChannel::createGSKitEnvironment(): Enabled TLSV11
    15
    /04/2020 09:51:02:293   00012485  transport  D TCPChannel::createGSKitEnvironment(): Enabled TLSV12
    15
    /04/2020 09:51:02:294   00012485  transport  TCPChannel::createGSKitEnvironment(): Exit with return code of AXIS_SUCCESS
    15
    /04/2020 09:51:02:345   00012485  transport  TCPChannel::close(): 
    15/04/2020 09:51:02:346   00012485  transport  TCPChannel::close(): 
    15/04/2020 09:51:02:346   00012485  transport  X TCPChannel::doSSLHandshake(): Line=958File=/build/axiscpp/src/ws-axis/c/src/transport/TCPChannel/TCPChannel.cpp:
    HTTPTransportException SERVER_TRANSPORT_SOCKET_CONNECT_ERRORFailed to open connection to serverthe operation gsk_secure_soc_init() failed.
    GSKit Error is 6000 Das Zertifikat wurde nicht von einer anerkannten Zertifizierungsinstanz signiert.
    15/04/2020 09:51:02:346   00012485  transport  TCPChannel::doSSLHandshake(): 
    15/04/2020 09:51:02:347   00012485  engine     axiscTransportFlush(): 
    15/04/2020 09:51:26:066   00012485  engine     axiscTransportReceive(): 
    15/04/2020 09:51:26:067   00012485  engine     D axiscTransportReceive(): user buffer length is 65535
    15
    /04/2020 09:51:26:067   00012485  engine     D axiscTransportReceive(): reading transport data
    15
    /04/2020 09:51:26:067   00012485  transport  HTTPTransport::getBytes(): 
    15/04/2020 09:51:26:068   00012485  transport  D HTTPTransport::getBytes(): number of bytes to read is 65536
    15
    /04/2020 09:51:26:068   00012485  transport  D HTTPTransport::getBytes(): GetBytesStateeWaitingForHTTPHeader
    15
    /04/2020 09:51:26:069   00012485  transport  D HTTPTransport::getBytes(): No data to readso read HTTP header
    15
    /04/2020 09:51:26:069   00012485  transport  HTTPTransport::readHTTPHeader(): 
    15/04/2020 09:51:26:069   00012485  transport  HTTPTransport::resetInputStateMachine(): 
    15/04/2020 09:51:26:070   00012485  transport  HTTPTransport::resetInputStateMachine(): 
    15/04/2020 09:51:26:070   00012485  transport  TCPChannel::readBytes(): 
    15/04/2020 09:51:26:070   00012485  transport  X TCPChannel::readBytes(): Line=398File=/build/axiscpp/src/ws-axis/c/src/transport/TCPChannel/TCPChannel.cpp:
    HTTPTransportException SERVER_TRANSPORT_INVALID_SOCKETUnable to perform read operation.
    15/04/2020 09:51:26:071   00012485  transport  TCPChannel::readBytes(): 
    15/04/2020 09:51:26:071   00012485  engine     axiscTransportReceive(): 
    15/04/2020 09:51:37:335   00012485  engine     axiscTransportDestroy(): 
    ...und wieder steh' ich da wie blöd....
    warum steht in der Fehlermeldung nicht einfah mal drin, welches Zertifikat gemeint ist??
    Was fehlt denn jetzt noch??

  8. #8
    Registriert seit
    Mar 2017
    Beiträge
    12
    Hallo, ich steh vor dem selben Problem und könnte Hilfe gebrauchen!
    Den *SYSTEM Keystore hab ich angelgt.. Aber wie geht es weiter?

    Wir haben jetzt erst angefangen mit der AXIS Api zu arbeiten. Diese nutze ich für meinen Zugriff auf einen REST-Service vom Kunden.
    Das setzen der HTTP Properties funktioniert nun, jedoch bekomme ich beim Request senden auch den SSL-Fehler.

    Hilfe?

  9. #9
    Registriert seit
    Nov 2020
    Beiträge
    315
    Wie machst du den HTTP Request? Via RPG, SQL?
    Wie ist die Verbindung, von der IBM i zu einem externen Server?
    Ist das Zertifikat ein Self-Signed Zertifikat?

    Antwort? :-)

  10. #10
    Registriert seit
    Mar 2017
    Beiträge
    12
    Guten morgen,

    Ich mach den HTTP Request via RPG.
    Das Zertifikat ist kein Self-Signed, sondern soweit ich weiß ist es ein Standard Zertifikat. Der Zugriff auf die Api über Postman funktioniert einwandfrei..
    Das mit der Verbindung von der IBMi zum externen Server musst du mir genauer erklären... Für mich sind das böhmische Dörfer /)_(\

  11. #11
    Registriert seit
    Nov 2020
    Beiträge
    315
    Bei einer HTTPS Verbindung wird zuerst mal der SSL-Handshake durchgeführt.
    Hierbei werden ein paar Aktionen getätigt:
    * Es wird sich das höchst mögliche Verschlüsselungsprotokoll ausverhandelt (dies sollte eines der aktuellen TLS Versionen sein)
    * Der höchst mögliche Chiffrieralgorithmus (Cipher) ausverhandelt (das wo z.B. RSA, SHA usw. im Text steht)
    * Dann wird das Zertifikat geprüft
    ** Stimmt das Zertifikat mit dem Hostnamen überein (Wenn man hier die IP benützt, gibt es meistens ein Problem)
    ** Ist das Zertifikat allgemein gültig (self-signed, ablaufdatum usw.)
    ** Ist die Zertifikatsstelle (CA) im Keystore enthalten?

    Bei den ersten beiden Punkten kann es auch sein, wenn eines der beiden Server nicht halbwegs aktuell ist und irgendwelche SSL/TLS Versionen oder Cipher verwendet, die vom anderen Server nicht unterstützt werden (weil schon sehr alt oder weil die Updates fehlen), kann es zu Problemen führen.

    Normal hat jedes System eine sehr große Liste von unterstützten Cipher.
    In den nicht so optimalen Programmen (sowohl Client als auch Server) gibt es auch die Möglichkeit die Version des Verschlüsselungsprotokolls oder den Cipher, hardcoded zu hinterlegen.
    Das ist dann ganz super, wenn irgendwann diese nicht mehr unterstützt werden und die Software nicht angepasst wird.

    Wenn auf eurer IBM i in der QSH OpenSSL installiert ist kannst du die Verbindung damit testen:
    openssl s_client -connect prouza.at:https
    Hier bekommst du alle Details zur SSL-Verbindung und dem Zertifikat.
    Bei mir z.B.:
    Verification: OK
    Verify return code: 0 (ok)

    Ich hoffe das liefert dir ein paar Anhaltspunkte.

    lg Andreas

  12. #12
    Registriert seit
    Mar 2017
    Beiträge
    12
    Hallo Andreas,

    danke für die Hilfe. openSSL ist leider nicht bei uns installiert, wäre aber scheinbar klug dies nach zu installieren.

    Danke dir!

Similar Threads

  1. Antworten: 7
    Letzter Beitrag: 10-11-19, 15:00
  2. order by case when :a = 12 then a35#07 else feldB end, erzeugt Fehler
    By sauerm in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 09-03-18, 09:49
  3. Client Access Fehler in Lizenzverwaltung
    By jwolfart in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 12-04-14, 09:38
  4. Antworten: 0
    Letzter Beitrag: 16-09-02, 12:31
  5. Client Access Fehler
    By Arbi in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 25-09-01, 23:40

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •