Auf dieser Seite

Erstellen von OPC UA Clients mit Sicherheitsunterstützung

Eines der Kernmerkmale von OPC UA ist die Unterstützung von Sicherheit, d.h. wir erhalten ein kryptographisch verschlüsseltes und signiertes Protokoll, Benutzerauthentifizierung und Autorisierungsunterstützung.

Damit dies funktioniert, muss jede Anwendungsinstanz (Installation eines Programms) ihre eigene Application Instance Certificate und den entsprechenden privaten Schlüssel haben.

Die Anwendungen können entweder selbst signierte Zertifikate generieren (siehe Qt OPC UA X509 Support), einige von einer Zertifizierungsstelle unter Verwendung von OPC UA GDS erhalten, oder einfach mit Zertifikaten konfiguriert werden, die vom Benutzer manuell erstellt wurden.

Konfigurieren der UA Anwendung

Um den Client in die Lage zu versetzen, sichere Verbindungen zu nutzen, ist es wichtig, dass

  • Konfigurieren Sie die richtige Anwendungsidentität
    m_identity = m_pkiConfig.applicationIdentity();
  • Konfigurieren Sie die PKI-Speicherorte, damit das SDK das Zertifikat, den privaten Schlüssel, die Vertrauensliste usw. finden kann.

    Siehe z. B. den Code aus dem Qt OPC UA Viewer-Beispiel:

    void MainWindow::setupPkiConfiguration() { const QDir pkidir =QDir(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/pki"); if (!pkidir.exists() && !copyDirRecursively(":/pki", pkidir.path()))        qFatal("Could not set up directory %s!", qUtf8Printable(pkidir.path()));
    
        m_pkiConfig.setClientCertificateFile(pkidir.absoluteFilePath("own/certs/opcuaviewer.der")); m_pkiConfig.setPrivateKeyFile(pkidir.absoluteFilePath("own/private/opcuaviewer.pem")); m_pkiConfig.setTrustListDirectory(pkidir.absoluteFilePath("trusted/certs")); m_pkiConfig.setRevocationListDirectory(pkidir.absoluteFilePath("trusted/crl")); m_pkiConfig.setIssuerListDirectory(pkidir.absoluteFilePath("issuers/certs")); m_pkiConfig.setIssuerRevocationListDirectory(pkidir.absoluteFilePath("issuers/crl")); const QStringList toCreate = { m_pkiConfig.issuerListDirectory(),m_pkiConfig.issuerRevocationListDirectory() }; for(const QString &dir: toCreate) { if (!QDir().mkpath(dir))            qFatal("Could not create directory %s!", qUtf8Printable(dir));
        } }

    Im Beispiel extrahieren wir vorkonfigurierte eigene und vertrauenswürdige Zertifikate aus dem Qt-Ressourcensystem an einen beschreibbaren Ort im Dateisystem. Die übrigen Verzeichnisse für Aussteller-(Sperr-)Listen werden manuell erstellt.

Erste Verbindung

Beim ersten Verbindungsaufbau muss der Client dem Serverzertifikat vertrauen.

Der Client sollte eine Zertifikatswarnung (mit Zertifikatsdetails) anzeigen und die Möglichkeit bieten, das Zertifikat in seiner Vertrauensliste zu speichern. Ein Beispiel finden Sie unter Qt OPC UA Viewer Example.

Wenn der Client das Serverzertifikat akzeptiert hat, können Sie erneut versuchen, eine Verbindung herzustellen. Nun kann es sein, dass der Server das Zertifikat des Clients ablehnt. Dies wird durch den generischen Fehlercode BadSecurityChecksFailed angezeigt. Server speichern abgelehnte Zertifikate normalerweise in einem speziellen Ordner rejected. Der Administrator kann diese in die Vertrauensliste verschieben, um den Clients zu vertrauen. Dies erspart das manuelle Kopieren des Client-Zertifikats auf den Server.

Sobald der Server dem Client vertraut hat, sollten Sie eine sichere Verbindung herstellen können.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.