Sur cette page

QSslServer Class

Implémente un serveur TCP sécurisé et chiffré via TLS. En savoir plus...

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 de : 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 implémenter un serveur TCP utilisant le protocole TLS (Transport Layer Security).

Pour configurer les paramètres de négociation sécurisée, utilisez les fonctions de définition appropriées sur un objet ` QSslConfiguration `, puis utilisez-le comme argument de la fonction ` setSslConfiguration()`. Toutes les connexions entrantes traité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 de définition héritées de la classe ` QTcpServer `.

Connectez-vous aux signaux de cette classe pour répondre aux tentatives de connexion entrantes. Ils sont identiques aux signaux de QSslSocket, mais transmettent également un pointeur vers le socket concerné.

Lorsque vous répondez au signal ` pendingConnectionAvailable()`, utilisez la fonction ` nextPendingConnection()` pour récupérer la prochaine connexion entrante et la retirer de la file d’attente des connexions en attente. L’objet ` QSslSocket ` est un enfant de `QSslServer` et sera supprimé lorsque `QSslServer` sera supprimé. Il est toutefois recommandé de détruire explicitement l’objet lorsque vous n’en avez plus besoin, afin d’éviter tout gaspillage de mémoire.

Voir également QTcpServer, QSslConfiguration et QSslSocket.

Documentation des fonctions membres

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

Crée un nouvel objet QSslServer avec l'parent spécifiée.

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

Supprime l'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 l'socket e de la part d'un pair. 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 : ce signal est principalement destiné à des fins d’information et de débogage et ne nécessite aucune gestion au niveau de l’application. Si l’alerte était fatale, le backend sous-jacent la gérera et fermera la connexion.

Remarque : tous les backendsne prennentpas en charge cette fonctionnalité.

Voir également 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é depuis socket à un pair. level indique s'il s'agissait d'un avertissement ou d'une erreur fatale. type fournit 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 principalement informatif et peut être utilisé à des fins de débogage ; en règle générale, il ne nécessite aucune action de la part de l'application.

Remarque : tous les backendsne prennentpas en charge cette fonctionnalité.

Voir également 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 au cours de la phase d'établissement de la connexion. Le paramètre « socketError » décrit le type d'erreur survenue.

L’ socket est automatiquement supprimée après l’émission de ce signal si l’établissement de la connexion socket n’a pas atteint l’état chiffré. En revanche, si l’ socket est chiffrée avec succès, elle est insérée dans la file d’attente des connexions en attente de l’ QSslServer. Lorsque l’utilisateur a appelé la fonction QTcpServer::nextPendingConnection(), il lui incombe de détruire l’ socket; sinon, l’ socket ne sera pas détruite tant que l’objet QSslServer n’aura pas été détruit. Si une erreur survient sur une socket après son insertion dans la file d’attente des connexions en attente, ce signal ne sera pas émis, et l’ socket ne sera ni supprimée ni détruite.

Remarque : vous ne pouvez pas utiliser ` Qt::QueuedConnection ` lorsque vous vous connectez à ce signal, sinon l’objet ` socket ` aura déjà été détruit au moment où le signal sera géré.

Voir également 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 la notification précoce des erreurs a été activée dans QSslConfiguration. L'application doit examiner la valeur de error et décider si elle souhaite poursuivre la négociation de connexion ou l'interrompre et envoyer un message d'alerte au pair. La connexion signal-slot doit être directe.

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

int QSslServer::handshakeTimeout() const

Renvoie le délai d'expiration de la négociation de connexion actuellement configuré.

Voir également setHandshakeTimeout().

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

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

Appelée lorsqu’une nouvelle connexion est établie.

Convertit ` socket ` en un ` QSslSocket`.

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

QSslServer peut émettre ce signal à plusieurs reprises au cours de la négociation SSL, avant que le chiffrement ne soit établi, pour signaler qu'une erreur s'est produite lors de la vérification de l'identité du pair. Le signal « error » indique généralement que socket n'est pas en mesure d'identifier le pair de manière sécurisée.

Ce signal vous alerte rapidement lorsqu’un problème survient. En vous connectant à ce signal, vous pouvez choisir manuellement de rompre la connexion depuis l’intérieur du slot connecté avant que la négociation ne soit terminée. Si aucune action n’est entreprise, ` QSslServer ` émettra alors ` sslErrors()` ().

Voir également sslErrors().

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

QSslServer émet ce signal lorsque socket négocie un ensemble de chiffrement PSK ; l'authentification PSK est alors requise.

Lors de l’utilisation d’une clé pré-partagée (PSK), le serveur doit fournir une identité valide et une clé pré-partagée valide pour que la négociation SSL puisse se poursuivre. Les applications peuvent fournir ces informations dans un slot connecté à ce signal, en remplissant l’objet ` authenticator ` transmis en fonction de leurs besoins.

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

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

Voir aussi QSslPreSharedKeyAuthenticator.

void QSslServer::setHandshakeTimeout(int timeout)

Définit la durée de la phase de négociation ( timeout ) à utiliser pour toutes les connexions entrantes, en millisecondes.

Ceci s'applique dans le cas où un client, qu'il soit malveillant ou qu'il s'agisse d'une connexion accidentelle, se connecte au serveur sans tenter de communiquer ni d'initier une procédure de connexion. QSslServer mettra alors automatiquement fin à la connexion après l'écoulement de timeout millisecondes.

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

Remarque : le framework TLS sous-jacent peut disposer de sa propre logique de délai d’expiration, actuellement ou à l’avenir ; cette fonction n’a aucune incidence sur celle-ci.

Remarque : le paramètre ` timeout ` transmis à cette fonction ne s'appliquera qu'aux nouvelles connexions. Si un client est déjà connecté, il utilisera le délai d'expiration défini lors de sa connexion.

Voir également handshakeTimeout().

void QSslServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)

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

Cette fonction doit être appelée avant listen() afin de garantir que la configuration souhaitée a bien été utilisée pendant toutes les procédures d'établissement de connexion.

Voir également ` 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 négociation SSL pour indiquer qu'une ou plusieurs erreurs se sont produites lors de l'établissement de l'identité du pair. Ces erreurs indiquent généralement que ` socket ` est incapable d'identifier le pair de manière sécurisée. À moins qu'une action ne soit entreprise, la connexion sera interrompue après l'émission de ce signal.

Si vous souhaitez poursuivre la connexion malgré les erreurs survenues, vous devez appeler la fonction ` QSslSocket::ignoreSslErrors()` depuis un slot connecté à ce signal. Si vous avez besoin d’accéder à la liste des erreurs ultérieurement, vous pouvez appeler la fonction `sslHandshakeErrors()`.

errors contient une ou plusieurs erreurs qui empêchent ` QSslSocket ` de vérifier l’identité du pair.

Remarque : vous ne pouvez pas utiliser ` Qt::QueuedConnection ` lors de la connexion à ce signal, sinon l'appel à ` QSslSocket::ignoreSslErrors()` n'aura aucun effet.

Voir également peerVerifyError().

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

Ce signal est émis lorsque le client, connecté à socket, lance la procédure d'établissement de la connexion 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.