Creación de clientes OPC UA con soporte de seguridad
Una de las características principales de OPC UA es el soporte para seguridad, lo que significa que obtenemos protocolo cifrado y firmado criptográficamente, autenticación de usuario y soporte de autorización.
Para que esto funcione, cada instancia de aplicación (instalación de un programa) necesita tener su propio Application Instance Certificate y la clave privada correspondiente.
Las aplicaciones pueden generar certificados autofirmados por sí mismas (véase Qt OPC UA X509 Support), obtener algunos de una autoridad de certificación utilizando OPC UA GDS, o simplemente pueden configurarse con certificados que hayan sido creados manualmente por el usuario.
Configuración de la aplicación UA
Para que el cliente pueda utilizar conexiones seguras, es importante
-
Configurar
- la identidad de aplicación correcta
m_identity = m_pkiConfig.applicationIdentity();
- Configurar las ubicaciones PKI para que el SDK pueda encontrar el certificado, la clave privada, la lista de confianza, etc.
Véase, por ejemplo, el código de Qt OPC UA Viewer Example:
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)); } }
En el ejemplo, extraemos certificados propios y de confianza preconfigurados del sistema de recursos Qt a una ubicación con permisos de escritura en el sistema de archivos. El resto de directorios para las listas de emisores (revocación) se crean manualmente.
Primera conexión
Cuando se conecta por primera vez, el cliente necesita confiar en el certificado del servidor.
El cliente debe mostrar un aviso de certificado (con los detalles del mismo) y ofrecer la posibilidad de guardar el certificado en su lista de confianza. Para ver un ejemplo, consulte Qt OPC UA Viewer Example.
Cuando el cliente haya aceptado el certificado del servidor, puede intentar conectarse de nuevo. Ahora el servidor puede rechazar el certificado del cliente. Esto se indica mediante el código de error genérico BadSecurityChecksFailed. Los servidores normalmente almacenan los certificados rechazados en una carpeta especial rejected. El administrador puede moverlos a la lista de confianza para confiar en los clientes. Esto evita copiar manualmente el certificado del cliente en la máquina del servidor.
En cuanto el servidor haya confiado en el cliente, debería poder conectarse con seguridad.
© 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.