Sichere Verbindungen mit Qt OPC UA

Inhalt
Qt OPC UA

Ab dem Qt 5.13 Release, das Ende Mai verfügbar sein wird, unterstützt die Qt OPC UA API in Kombination mit dem Unified Automation Backend offiziell sichere Verbindungen zu Servern (Sign oder SignAndEncrypt Message Security Mode). Der folgende Artikel beschreibt die Änderungen an der Qt OPC UA API und zeigt, wie man sichere Verbindungen auch mit dem open62541 Backend erhält.

Qt OPC UA

Sicherheitsbezogene Änderungen an der QOpcUaClient-API

Um sichere Verbindungen zu ermöglichen, waren eine Reihe von Änderungen an der API des QOpcUaClients erforderlich - einige davon verhinderten die Kompilierung von vorhandenem Code:

  • Die connectToEndpoint() Die einzige unterstützte Methode, um anzugeben, mit welchem Server eine Verbindung hergestellt werden soll, ist nun eine Endpunktbeschreibung, die mit anfordernEndpunkte().
  • supportedSecurityPolicies() gibt eine Liste mit den OPC UA Sicherheitsrichtlinien zurück, die vom aktuellen Backend unterstützt werden.
  • setPkiKonfiguration() wird verwendet, um QOpcUaClient mit einem Client-Zertifikat, einem entsprechenden privaten Schlüssel und den notwendigen Daten zur Überprüfung von Server-Zertifikaten zu konfigurieren.
  • setIdentity() konfiguriert die Identitätsinformationen, die QOpcUaClient dem Server während der Verbindung zur Verfügung stellt. Diese Informationen können auch aus dem Client-Zertifikat initialisiert werden.
  • Bis Qt 5.12 wurden die Anmeldedaten an QOpcUaClient durch Verschlüsselung von Benutzername und Passwort in der URL übermittelt. setAuthenticationInformation() ersetzt dies durch eine saubere API, die zur Auswahl von Anonymität, Benutzername und Kennwort oder zur Authentifizierung auf der Basis von X509-Zertifikaten verwendet werden kann.
  • Die connectError() Signal wird bei Ausfall einer Verbindung zu einem Server ausgegeben. Je nach Fehler kann der angeschlossene Slot diesen überschreiben (z.B. ein nicht vertrauenswürdiges oder nicht mehr gültiges Server-Zertifikat).
  • Wenn der private Schlüssel mit einem Passwort geschützt ist, muss das PasswortForPrivateKeyRequired() Der Benutzer kann dann das Passwort im angeschlossenen Slot eingeben.

Zustand des open62541-Backends

Das open62541-Backend unterstützt keine sicheren Verbindungen in Qt 5.13, da dies open62541 v0.4 erfordert, das noch nicht freigegeben ist.

Eine Vorschau auf die Sicherheitsunterstützung auf der Grundlage des open62541 Master Branch wurde bereits implementiert und ist auf gerrit verfügbar.
Die Vorschau implementiert sichere Verbindungen mit den folgenden Sicherheitsrichtlinien

  • http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15
  • http://opcfoundation.org/UA/SecurityPolicy#Basic256
  • http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256

und die folgenden Benutzerauthentifizierungstoken-Typen

  • Anonym
  • Benutzername

Die Verwendung von passwortgeschützten privaten Schlüsseln und das Überschreiben von Fehlern bei der Zertifikatsprüfung ist noch nicht verfügbar.

Probieren Sie es aus

Zusätzlich zu den üblichen Abhängigkeiten von Qt OPC UA erfordert die Vorschau mbedTLS die im Bibliothekssuchpfad des Systems verfügbar sein müssen.

Der Quellcode der Vorschau ist verfügbar unter gerritDer einfachste Weg, sie zu erstellen, ist, den Anweisungen in unserer allgemeinen Qt OPC UA zu folgen. TutorialAls zusätzlicher Schritt muss der letzte Patch-Satz von gerrit über das Anonyme HTTP heruntergeladen werden. Kasse Befehl (siehe den Gerrit-Link oben für die Details).

Stellen Sie sicher, dass die Ausgabe des Qmake-Schrittes "mbedtls ..... ja" enthält. Wenn dies nicht der Fall ist, wird das open62541-Backend ohne Sicherheitsunterstützung gebaut. In diesem Fall sollte die Datei config.log konsultiert werden, um herauszufinden, warum die Erkennung der mbedTLS-Bibliothek fehlgeschlagen ist.

Ausblick

Wir arbeiten darauf hin, sichere Verbindungen für das open62541-Backend in einer späteren Version von Qt offiziell zu ermöglichen. Bis dahin ermutigen wir Sie, diese Vorschau auszuprobieren und Rückmeldung über seinen derzeitigen Zustand.

5 Antworten

  1. Hallo,

    Ich wollte wissen, ob es möglich ist, dieses Bibliotheksupdate in die QT 5.12.5 Version von QtOpcUa einzubinden. Wenn ja, wie würde ich den Patch anwenden, da er bei mir nicht zu funktionieren schien.
    Beim Ausführen von qmake gibt es keine Zeile für die mbedTLS-Bibliothek, und laut den Log-Dateien wird sie nicht einmal durchsucht.

    Mit freundlichen Grüßen

    • Nun, am Ende war es meine eigene Dummheit, die mich davon abhielt, dies richtig zu machen. Ich habe den Patch falsch angewendet, was zu allen möglichen Fehlern führte. Ich musste LIBS+= -lmbedtls -lmbedx509 -lmbedcrypto zur Datei open62541.pri hinzufügen, um sie richtig nmake zu machen.

      Am Ende denke ich immer noch, dass etwas schief gelaufen ist, da client.supportedSecurityPolicies nur 1 zurückgibt, was keine ist.

      • Als Antwort auf meinen eigenen Kommentar war es wieder einmal AdvAPI32.lib, die der Zeile win32: LIBS += hinzugefügt wurde, anstatt der Sache, die ich zuvor geschrieben habe.

      • Ich poste immer wieder Probleme und löse sie dann einen Tag später, aber zumindest kann ich vielleicht helfen, wenn jemand anderes dieses Problem hat.
        Diesmal war das Problem erneut die fehlerhafte Anwendung des Patches. Da ich keine Erfahrung mit Gerrit hatte, dachte ich, es würde ausreichen, nur den verknüpften Patch zu installieren, was nicht der Fall war.
        In Wirklichkeit brauche ich auch den anderen, der auf der rechten Seite der Gerrit-Seite verlinkt ist.

  2. Ich würde diesen Patch gerne installieren und ausprobieren, aber ich habe einige Probleme.
    Nach einer Menge Arbeit, um qmake dazu zu bringen, endlich meine mbed-Libs zu akzeptieren und mir die lang erwarteten mbedtls zu geben......ja, der nmake-Schritt schlägt fehl.

    Ich bekomme diesen Fehler:
    mbedcrypto.lib(entropy_poll.obj) : Fehler LNK2019: nicht aufgelöstes externes Symbol __imp__CryptAcquireContextA@20 referenziert in Funktion _mbedtls_platform_entropy_poll

    Ich habe Ihr Tutorial zum Bau von Qt OPC UA verfolgt, obwohl ich vcvarsamd64_x86 statt vcvarsx86_amd64 verwendet habe, da ich für eine QT 32-Bit-Version baue.

    Nachdem ich das qtopcua-Verzeichnis geklont habe, führe ich
    git fetch "https://codereview.qt-project.org/qt/qtopcua" refs/Änderungen/11/226111/33 && git checkout FETCH_HEAD
    um den Patch anzuwenden
    226111: Korrektur von Build und Tests mit dem aktuellen open62541 v1.0.

    Wissen Sie, ob ich mich bei diesen Schritten geirrt haben könnte, oder ob es möglich ist, dass meine mbedtls libs in irgendeiner Weise korrupt sind?

    Ich hoffe auf Rückmeldung

    Vielen Dank.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Jannis Völker

Jannis Völker

Jannis Völker ist Software-Ingenieur bei der basysKom GmbH in Darmstadt. Seit seinem Eintritt in die basysKom im Jahr 2017 arbeitet er in Konnektivitätsprojekten für Embedded Devices, Azure-basierten Cloud-Projekten und hat Beiträge zu Qt OPC UA und open62541 geleistet.
Aktie auf facebook
Aktie auf twitter
Aktie auf linkedin
Aktie auf reddit
Aktie auf xing
Aktie auf email
Aktie auf stumbleupon
Aktie auf whatsapp
Aktie auf pocket