Auf dieser Seite

Erstellen von OPC-UA-Clients mit Sicherheitsunterstützung

Eine der Kernfunktionen von OPC UA ist die Sicherheitsunterstützung, d. h. wir erhalten ein kryptografisch verschlüsseltes und signiertes Protokoll sowie Unterstützung für die Benutzerauthentifizierung und -autorisierung.

Damit dies funktioniert, muss jede Anwendungsinstanz (Programminstallation) über eine eigene „ Application Instance Certificate “ und den dazugehörigen privaten Schlüssel verfügen.

Die Anwendungen können entweder selbst signierte Zertifikate eigenständig generieren (siehe „Qt OPC UA X509 Support“), über OPC UA GDS Zertifikate von einer Zertifizierungsstelle beziehen oder einfach mit Zertifikaten konfiguriert werden, die vom Benutzer manuell erstellt wurden.

Konfiguration der UA-Anwendung

Damit der Client sichere Verbindungen nutzen kann, ist es wichtig,

  • die richtige Anwendungsidentität zu konfigurieren:
    m_identity = m_pkiConfig.applicationIdentity();
  • die PKI-Speicherorte so zu konfigurieren, dass das SDK das Zertifikat, den privaten Schlüssel, die Vertrauensliste usw. finden kann.

    Siehe beispielsweise den Code aus dem Beispiel „Qt OPC UA Viewer“:

    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));
        }
    }

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

Erste Verbindung

Bei der ersten Verbindung 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-Beispiel“.

Nachdem der Client das Serverzertifikat akzeptiert hat, können Sie erneut versuchen, eine Verbindung herzustellen. Nun kann es vorkommen, 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. Dadurch wird das manuelle Kopieren des Clientzertifikats auf den Server vermieden.

Sobald der Server dem Client vertraut, 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.