Sur cette page

QSslServer Class

Implémente un serveur TCP crypté et sécurisé via TLS. Plus d'informations...

En-tête : #include <QSslServer>
CMake : find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake : QT += network
Depuis : Qt 6.4
Hérite : QTcpServer

Fonctions publiques

QSslServer(QObject *parent = nullptr)
virtual ~QSslServer() override
int handshakeTimeout() const
void setHandshakeTimeout(int timeout)
void setSslConfiguration(const QSslConfiguration &sslConfiguration)
QSslConfiguration sslConfiguration() const

Signaux

void alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
void alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
void errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError)
void handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error)
void peerVerifyError(QSslSocket *socket, const QSslError &error)
void preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator)
void sslErrors(QSslSocket *socket, const QList<QSslError> &errors)
void startedEncryptionHandshake(QSslSocket *socket)

Fonctions protégées réimplémentées

virtual void incomingConnection(qintptr socket) override

Description détaillée

Classe à utiliser à la place de QTcpServer pour mettre en œuvre un serveur TCP utilisant la sécurité de la couche transport (TLS).

Pour configurer les paramètres de l'échange sécurisé, utilisez les fonctions setter applicables sur un objet QSslConfiguration, puis utilisez-le comme argument de la fonction setSslConfiguration(). Toutes les connexions entrantes qui seront gérées par la suite utiliseront ces paramètres.

Pour commencer à écouter les connexions entrantes, utilisez la fonction listen() héritée de QTcpServer. D'autres paramètres peuvent être configurés à l'aide des fonctions setter héritées de la classe QTcpServer.

Connectez-vous aux signaux de cette classe pour répondre aux tentatives de connexion entrantes. Ces signaux sont les mêmes que ceux de la classe QSslSocket, mais ils transmettent également un pointeur vers le socket en question.

Lorsque vous répondez au signal pendingConnectionAvailable(), utilisez la fonction nextPendingConnection() pour récupérer la prochaine connexion entrante et la sortir de la file d'attente des connexions en attente. La fonction QSslSocket est un enfant du QSslServer et sera supprimée lorsque le QSslServer sera supprimé. C'est toujours une bonne idée de détruire l'objet explicitement quand vous en avez fini avec lui, pour éviter de gaspiller de la mémoire.

Voir aussi QTcpServer, QSslConfiguration, et QSslSocket.

Documentation des fonctions membres

[explicit] QSslServer::QSslServer(QObject *parent = nullptr)

Construit un nouveau QSslServer avec l'adresse parent.

[override virtual noexcept] QSslServer::~QSslServer()

Détruit le site QSslServer.

Toutes les connexions ouvertes sont fermées.

[signal] void QSslServer::alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)

QSslServer émet ce signal si un message d'alerte a été reçu par socket de la part d'un homologue. level indique si l'alerte était fatale ou s'il s'agissait d'un avertissement. type est le code expliquant pourquoi l'alerte a été envoyée. Lorsqu'une description textuelle du message d'alerte est disponible, elle est fournie dans description.

Remarque : le signal est principalement utilisé à des fins d'information et de débogage et ne nécessite aucune manipulation dans l'application. Si l'alerte est fatale, le backend sous-jacent la traitera et fermera la connexion.

Remarque : tous les backends ne prennent pas en charge cette fonctionnalité.

Voir aussi alertSent(), QSsl::AlertLevel, et QSsl::AlertType.

[signal] void QSslServer::alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)

QSslServer émet ce signal si un message d'alerte a été envoyé par socket à un homologue. level indique s'il s'agit d'un avertissement ou d'une erreur fatale. type donne le code du message d'alerte. Lorsqu'une description textuelle du message d'alerte est disponible, elle est fournie dans description.

Remarque : ce signal est essentiellement informatif et peut être utilisé à des fins de débogage ; normalement, il n'exige aucune action de la part de l'application.

Note : Tous les backends ne supportent pas cette fonctionnalité.

Voir aussi alertReceived(), QSsl::AlertLevel, et QSsl::AlertType.

[signal] void QSslServer::errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError)

Ce signal est émis lorsqu'une erreur s'est produite lors de la prise de contact. Le paramètre socketError décrit le type d'erreur qui s'est produite.

L'adresse socket est automatiquement supprimée après l'émission de ce signal si le handshake de la socket n'a pas atteint l'état crypté. Mais si le socket est crypté avec succès, il est inséré dans la file d'attente des connexions en attente du QSslServer. Lorsque l'utilisateur a appelé QTcpServer::nextPendingConnection(), il lui incombe de détruire l'objet socket, sinon l'objet socket ne sera pas détruit tant que l'objet QSslServer ne l'aura pas été. Si une erreur survient sur un objet socket après qu'il a été inséré dans la file d'attente des connexions en attente, ce signal n'est pas émis et l'objet socket n'est ni supprimé ni détruit.

Remarque : vous ne pouvez pas utiliser Qt::QueuedConnection lorsque vous vous connectez à ce signal, sinon l'objet socket aura déjà été détruit lorsque le signal sera traité.

Voir aussi QSslSocket::error() et errorString().

[signal] void QSslServer::handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error)

QSslServer émet ce signal si une erreur de vérification de certificat a été détectée par socket et si le signalement précoce des erreurs a été activé dans QSslConfiguration. Une application est censée inspecter le site error et décider si elle souhaite poursuivre la poignée de main ou l'interrompre et envoyer un message d'alerte à l'homologue. La connexion signal-slot doit être directe.

Voir également QSslSocket::continueInterruptedHandshake(), sslErrors() et QSslConfiguration::setHandshakeMustInterruptOnError().

int QSslServer::handshakeTimeout() const

Renvoie le délai d'attente de la poignée de main actuellement configuré.

Voir aussi setHandshakeTimeout().

[override virtual protected] void QSslServer::incomingConnection(qintptr socket)

Réimplémente : QTcpServer::incomingConnection(qintptr socketDescriptor).

Appelé lorsqu'une nouvelle connexion est établie.

Convertit socket en QSslSocket.

[signal] void QSslServer::peerVerifyError(QSslSocket *socket, const QSslError &error)

QSslServer peut émettre ce signal plusieurs fois au cours de la poignée de main SSL, avant que le cryptage n'ait été établi, pour indiquer qu'une erreur s'est produite lors de l'établissement de l'identité de l'homologue. Le signal error indique généralement que socket n'est pas en mesure d'identifier l'homologue de manière sécurisée.

Ce signal vous permet de savoir rapidement si quelque chose ne va pas. En vous connectant à ce signal, vous pouvez choisir manuellement de couper la connexion à partir du slot connecté avant que la poignée de main ne soit terminée. Si aucune action n'est entreprise, QSslServer émettra sslErrors().

Voir aussi sslErrors().

[signal] void QSslServer::preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator)

QSslServer émet ce signal lorsque socket négocie une suite de chiffrement PSK, et que l'authentification PSK est donc requise.

Lors de l'utilisation de la PSK, le serveur doit fournir une identité valide et une clé prépartagée valide pour que la poignée de main SSL puisse se poursuivre. Les applications peuvent fournir ces informations dans un slot connecté à ce signal, en remplissant l'objet authenticator en fonction de leurs besoins.

Remarque : le fait d'ignorer ce signal ou de ne pas fournir les informations d'identification requises entraînera l'échec de la poignée de main et, par conséquent, l'interruption de la connexion.

Remarque : l'objet authenticator appartient à socket et ne doit pas être supprimé par l'application.

Voir également QSslPreSharedKeyAuthenticator.

void QSslServer::setHandshakeTimeout(int timeout)

Définit l'adresse timeout à utiliser pour toutes les prises de contact entrantes, en millisecondes.

Ceci est important dans le cas où un client, qu'il soit malveillant ou accidentel, se connecte au serveur mais ne tente pas de communiquer ou d'initier une poignée de main. QSslServer mettra alors automatiquement fin à la connexion après que timeout millisecondes se soient écoulées.

Par défaut, le délai d'attente est de 5000 millisecondes (5 secondes).

Note : La structure TLS sous-jacente peut avoir sa propre logique de temporisation maintenant ou dans le futur, cette fonction ne l'affecte pas.

Note : Le timeout passé à cette fonction ne s'appliquera qu'aux nouvelles connexions. Si un client est déjà connecté, il utilisera le délai d'attente défini lors de la connexion.

Voir aussi handshakeTimeout().

void QSslServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)

Définit le sslConfiguration à utiliser pour toutes les connexions entrantes suivantes.

Il doit être appelé avant listen() pour s'assurer que la configuration souhaitée a été utilisée lors de tous les échanges.

Voir aussi sslConfiguration() et QSslSocket::setSslConfiguration().

QSslConfiguration QSslServer::sslConfiguration() const

Renvoie la configuration ssl actuelle.

Voir aussi setSslConfiguration().

[signal] void QSslServer::sslErrors(QSslSocket *socket, const QList<QSslError> &errors)

QSslServer émet ce signal après la poignée de main SSL pour indiquer qu'une ou plusieurs erreurs se sont produites lors de l'établissement de l'identité de l'homologue. Ces erreurs indiquent généralement que socket n'est pas en mesure d'identifier l'homologue de manière sécurisée. Si aucune action n'est entreprise, la connexion sera interrompue après l'émission de ce signal.

Si vous voulez continuer à vous connecter malgré les erreurs qui se sont produites, vous devez appeler QSslSocket::ignoreSslErrors() à partir d'un slot connecté à ce signal. Si vous devez accéder à la liste des erreurs ultérieurement, vous pouvez appeler sslHandshakeErrors().

errors contient une ou plusieurs erreurs qui empêchent QSslSocket de vérifier l'identité de l'homologue.

Remarque : vous ne pouvez pas utiliser Qt::QueuedConnection lorsque vous vous connectez à ce signal, sinon l'appel à QSslSocket::ignoreSslErrors() n'aura aucun effet.

Voir aussi peerVerifyError().

[signal] void QSslServer::startedEncryptionHandshake(QSslSocket *socket)

Ce signal est émis lorsque le client, connecté à socket, initie la poignée de main TLS.

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