Sur cette page

Qt OPC UA Prise en charge de X509

Explique comment générer des clés et des demandes de signature de certificat.

Cet exemple montre comment les applications clientes peuvent générer leur propre certificat auto-signé ou générer une demande de signature de certificat.

Génération d'une clé RSA

Dans un premier temps, une clé RSA est générée :

QOpcUaKeyPair key;
key.generateRsaKey(QOpcUaKeyPair::RsaKeyStrength::Bits2048);

La clé privée peut être enregistrée dans un fichier pour une utilisation ultérieure :

QByteArray keyData = key.privateKeyToByteArray(QOpcUaKeyPair::Cipher::Unencrypted, QString());

QFile keyFile(u"privateKey.pem"_s);
if (!keyFile.open(QFile::WriteOnly))
    return EXIT_FAILURE;

keyFile.write(keyData);
keyFile.close();

Génération d’une demande de signature de certificat

Ensuite, une demande de signature de certificat est créée. Il est également nécessaire de définir le sujet du certificat et d'ajouter toutes les extensions requises pour OPC UA.

QOpcUaX509CertificateSigningRequest csr;

// Set the subject of the certificate
QOpcUaX509DistinguishedName dn;
dn.setEntry(QOpcUaX509DistinguishedName::Type::CommonName, u"QtOpcUaViewer"_s);
dn.setEntry(QOpcUaX509DistinguishedName::Type::CountryName, u"DE"_s);
dn.setEntry(QOpcUaX509DistinguishedName::Type::LocalityName, u"Berlin"_s);
dn.setEntry(QOpcUaX509DistinguishedName::Type::StateOrProvinceName, u"Berlin"_s);
dn.setEntry(QOpcUaX509DistinguishedName::Type::OrganizationName, u"The Qt Company"_s);
csr.setSubject(dn);

Deux options s’offrent alors à vous :

1. Si vous devez faire signer votre demande de signature de certificat par une autorité de certification, vous devez utiliser les données de la demande.

QByteArray certificateSigningRequestData = csr.createRequest(key);

2. En l’absence d’autorité de certification, vous devez autosigner la demande.

QByteArray selfSignedCertificateData = csr.createSelfSignedCertificate(key);

Exemple de projet sur code.qt.io

© 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.