QSslSocket Class
La classe QSslSocket fournit un socket crypté SSL destiné aussi bien aux clients qu'aux serveurs. En savoir plus...
| En-tête : | #include <QSslSocket> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake : | QT += network |
| Hérite de : | QTcpSocket |
- Liste de tous les membres, y compris les membres hérités
- QSslSocket fait partie de l'API de programmation réseau.
Remarque : toutes les fonctions de cette classe sont réentrantes.
Types publics
| enum | PeerVerifyMode { VerifyNone, QueryPeer, VerifyPeer, AutoVerifyPeer } |
| enum | SslMode { UnencryptedMode, SslClientMode, SslServerMode } |
Fonctions publiques
| QSslSocket(QObject *parent = nullptr) | |
| virtual | ~QSslSocket() |
| void | connectToHostEncrypted(const QString &hostName, quint16 port, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol) |
| void | connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol) |
(since 6.0) void | continueInterruptedHandshake() |
| qint64 | encryptedBytesAvailable() const |
| qint64 | encryptedBytesToWrite() const |
| void | ignoreSslErrors(const QList<QSslError> &errors) |
| bool | isEncrypted() const |
| QSslCertificate | localCertificate() const |
| QList<QSslCertificate> | localCertificateChain() const |
| QSslSocket::SslMode | mode() const |
| QList<QOcspResponse> | ocspResponses() const |
| QSslCertificate | peerCertificate() const |
| QList<QSslCertificate> | peerCertificateChain() const |
| int | peerVerifyDepth() const |
| QSslSocket::PeerVerifyMode | peerVerifyMode() const |
| QString | peerVerifyName() const |
| QSslKey | privateKey() const |
| QSsl::SslProtocol | protocol() const |
| QSslCipher | sessionCipher() const |
| QSsl::SslProtocol | sessionProtocol() const |
| void | setLocalCertificate(const QSslCertificate &certificate) |
| void | setLocalCertificate(const QString &path, QSsl::EncodingFormat format = QSsl::Pem) |
| void | setLocalCertificateChain(const QList<QSslCertificate> &localChain) |
| void | setPeerVerifyDepth(int depth) |
| void | setPeerVerifyMode(QSslSocket::PeerVerifyMode mode) |
| void | setPeerVerifyName(const QString &hostName) |
| void | setPrivateKey(const QSslKey &key) |
| void | setPrivateKey(const QString &fileName, QSsl::KeyAlgorithm algorithm = QSsl::Rsa, QSsl::EncodingFormat format = QSsl::Pem, const QByteArray &passPhrase = QByteArray()) |
| void | setProtocol(QSsl::SslProtocol protocol) |
| void | setSslConfiguration(const QSslConfiguration &configuration) |
| QSslConfiguration | sslConfiguration() const |
| QList<QSslError> | sslHandshakeErrors() const |
| bool | waitForEncrypted(int msecs = 30000) |
Fonctions publiques réimplémentées
| virtual bool | atEnd() const override |
| virtual qint64 | bytesAvailable() const override |
| virtual qint64 | bytesToWrite() const override |
| virtual bool | canReadLine() const override |
| virtual void | close() override |
| virtual void | connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol) override |
| virtual void | disconnectFromHost() override |
| virtual void | resume() override |
| virtual void | setReadBufferSize(qint64 size) override |
| virtual bool | setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite) override |
| virtual void | setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) override |
| virtual QVariant | socketOption(QAbstractSocket::SocketOption option) override |
| virtual bool | waitForBytesWritten(int msecs = 30000) override |
| virtual bool | waitForConnected(int msecs = 30000) override |
| virtual bool | waitForDisconnected(int msecs = 30000) override |
| virtual bool | waitForReadyRead(int msecs = 30000) override |
Slots publics
| void | ignoreSslErrors() |
| void | startClientEncryption() |
| void | startServerEncryption() |
Signaux
| void | alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
| void | alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
| void | encrypted() |
| void | encryptedBytesWritten(qint64 written) |
| void | handshakeInterruptedOnError(const QSslError &error) |
| void | modeChanged(QSslSocket::SslMode mode) |
| void | newSessionTicketReceived() |
| void | peerVerifyError(const QSslError &error) |
| void | preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator) |
| void | sslErrors(const QList<QSslError> &errors) |
Membres publics statiques
(since 6.1) QString | activeBackend() |
(since 6.1) QList<QString> | availableBackends() |
(since 6.1) QList<QSsl::ImplementedClass> | implementedClasses(const QString &backendName = {}) |
(since 6.1) bool | isClassImplemented(QSsl::ImplementedClass cl, const QString &backendName = {}) |
(since 6.1) bool | isFeatureSupported(QSsl::SupportedFeature ft, const QString &backendName = {}) |
(since 6.1) bool | isProtocolSupported(QSsl::SslProtocol protocol, const QString &backendName = {}) |
(since 6.1) bool | setActiveBackend(const QString &backendName) |
| long | sslLibraryBuildVersionNumber() |
| QString | sslLibraryBuildVersionString() |
| long | sslLibraryVersionNumber() |
| QString | sslLibraryVersionString() |
(since 6.1) QList<QSsl::SupportedFeature> | supportedFeatures(const QString &backendName = {}) |
(since 6.1) QList<QSsl::SslProtocol> | supportedProtocols(const QString &backendName = {}) |
| bool | supportsSsl() |
Fonctions protégées réimplémentées
| virtual qint64 | readData(char *data, qint64 maxlen) override |
| virtual qint64 | skipData(qint64 maxSize) override |
| virtual qint64 | writeData(const char *data, qint64 len) override |
Éléments non membres associés
(since 6.0) enum class | AlertLevel { Warning, Fatal, Unknown } |
(since 6.0) enum class | AlertType { CloseNotify, UnexpectedMessage, BadRecordMac, RecordOverflow, DecompressionFailure, …, UnknownAlertMessage } |
(since 6.1) enum class | ImplementedClass { Key, Certificate, Socket, DiffieHellman, EllipticCurve, …, DtlsCookie } |
(since 6.1) enum class | SupportedFeature { CertificateVerification, ClientSideAlpn, ServerSideAlpn, Ocsp, Psk, …, Alerts } |
Description détaillée
QSslSocket établit une connexion TCP sécurisée et chiffrée que vous pouvez utiliser pour transmettre des données chiffrées. Il peut fonctionner aussi bien en mode client qu’en mode serveur, et prend en charge les protocoles TLS modernes, y compris TLS 1.3. Par défaut, QSslSocket utilise uniquement les protocoles TLS considérés comme sécurisés (QSsl::SecureProtocols), mais vous pouvez modifier le protocole TLS en appelant la fonction setProtocol() à condition de le faire avant le début de la négociation de connexion.
Le chiffrement SSL s’applique au flux TCP existant une fois que la socket est passée à l’état ConnectedState. Il existe deux méthodes simples pour établir une connexion sécurisée à l’aide de QSslSocket : avec une négociation SSL immédiate, ou avec une négociation SSL différée intervenant après l’établissement de la connexion en mode non chiffré.
La manière la plus courante d’utiliser QSslSocket consiste à créer un objet et à lancer une connexion sécurisée en appelant la méthode ` connectToHostEncrypted()`. Cette méthode lance une négociation SSL immédiate dès que la connexion est établie.
QSslSocket *socket = new QSslSocket(this);
connect(socket, &QSslSocket::encrypted, this, &Receiver::ready);
socket->connectToHostEncrypted("imap.example.com", 993);Comme pour une fonction ` QTcpSocket` standard, `QSslSocket` passe par les états `HostLookupState`, `ConnectingState`, puis enfin `ConnectedState` si la connexion aboutit. La négociation commence alors automatiquement et, en cas de succès, le signal ` encrypted()` est émis pour indiquer que la socket est passée à l’état chiffré et est prête à être utilisée.
Notez que des données peuvent être écrites sur la socket immédiatement après le retour de la fonction ` connectToHostEncrypted()` (c'est-à-dire avant l'émission du signal ` encrypted()`). Les données sont mises en file d'attente dans `QSslSocket` jusqu'à ce que le signal ` encrypted()` soit émis.
Un exemple d’utilisation de la négociation SSL différée pour sécuriser une connexion existante est le cas où un serveur SSL sécurise une connexion entrante. Supposons que vous créiez une classe de serveur SSL en tant que sous-classe de ` QTcpServer`. Vous redéfiniriez alors la méthode ` QTcpServer::incomingConnection()` avec un code similaire à l’exemple ci-dessous, qui construit d’abord une instance de `QSslSocket`, puis appelle ` setSocketDescriptor()` pour attribuer au nouveau socket le descripteur existant qui lui a été transmis. Il lance ensuite la négociation SSL en appelant ` startServerEncryption()`.
void SslServer::incomingConnection(qintptr socketDescriptor)
{
QSslSocket *serverSocket = new QSslSocket;
if (serverSocket->setSocketDescriptor(socketDescriptor)) {
addPendingConnection(serverSocket);
connect(serverSocket, &QSslSocket::encrypted, this, &SslServer::ready);
serverSocket->startServerEncryption();
} else {
delete serverSocket;
}
}Si une erreur se produit, QSslSocket émet le signal sslErrors(). Dans ce cas, si aucune mesure n’est prise pour ignorer la ou les erreurs, la connexion est interrompue. Pour continuer malgré la survenue d’une erreur, vous pouvez appeler ` ignoreSslErrors()` soit depuis ce slot après la survenue de l’erreur, soit à tout moment après la création de l’objet `QSslSocket` et avant toute tentative de connexion. Cela permettra à `QSslSocket` d’ignorer les erreurs rencontrées lors de l’établissement de l’identité du pair. L’ignorance des erreurs lors d’une poignée de main SSL doit être utilisée avec prudence, car l’une des caractéristiques fondamentales des connexions sécurisées est qu’elles doivent être établies à l’issue d’une poignée de main réussie.
Une fois le chiffrement effectué, vous utilisez QSslSocket comme un objet ` QTcpSocket` classique. Lorsque ` readyRead()` est appelé, vous pouvez appeler ` read()`, ` canReadLine()` et ` readLine()`, ou encore ` getChar()` pour lire les données déchiffrées à partir du tampon interne de QSslSocket, et vous pouvez appeler ` write()` ou ` putChar()` pour renvoyer des données au pair. QSslSocket se chargera automatiquement de chiffrer les données écrites et émettra l'encryptedBytesWritten() une fois que les données auront été écrites vers le pair.
Pour plus de commodité, QSslSocket prend en charge les fonctions bloquantes de QTcpSocket: waitForConnected(), waitForReadyRead(), waitForBytesWritten() et waitForDisconnected(). Il fournit également la fonction waitForEncrypted(), qui bloque le thread appelant jusqu’à ce qu’une connexion chiffrée ait été établie.
QSslSocket socket;
socket.connectToHostEncrypted("http.example.com", 443);
if (!socket.waitForEncrypted()) {
qDebug() << socket.errorString();
return false;
}
socket.write("GET / HTTP/1.0\r\n\r\n");
while (socket.waitForReadyRead())
qDebug() << socket.readAll().data();QSslSocket fournit une API complète et facile à utiliser pour la gestion des algorithmes de chiffrement, des clés privées et des certificats locaux, de pair à pair et d'autorité de certification (CA). Il fournit également une API permettant de gérer les erreurs survenant pendant la phase d'établissement de la connexion.
Les fonctionnalités suivantes peuvent également être personnalisées :
- La suite de chiffrements de la socket peut être personnalisée avant la phase d'établissement de la connexion à l'aide de la fonction ` QSslConfiguration::setCiphers()`.
- Le certificat local et la clé privée de la socket peuvent être personnalisés avant la phase d'établissement de la connexion à l'aide des fonctions ` setLocalCertificate()` et ` setPrivateKey()`.
- La base de données des certificats d’autorité de certification (CA) peut être étendue et personnalisée à l’aide des fonctions ` QSslConfiguration::addCaCertificate()` et ` QSslConfiguration::addCaCertificates()`.
Pour étendre la liste des certificats d'autorité de certification (CA) par défaut utilisés par les sockets SSL lors de la négociation SSL, vous devez mettre à jour la configuration par défaut, comme dans l'extrait de code ci-dessous :
QList<QSslCertificate> certificates = getCertificates();
QSslConfiguration configuration = QSslConfiguration::defaultConfiguration();
configuration.addCaCertificates(certificates);
QSslConfiguration::setDefaultConfiguration(configuration);Remarque : s’ils sont disponibles, les certificats racine sous Unix (à l’exception de macOS) seront chargés à la demande à partir des répertoires de certificats standard. Si vous ne souhaitez pas charger les certificats racine à la demande, vous devez appeler soit la méthode ` QSslConfiguration::defaultConfiguration()`.setCaCertificates()` avant que la première négociation SSL n’ait lieu dans votre application (par exemple, en lui transmettant QSslSocket::systemCaCertificates()), soit d’appeler QSslConfiguration::defaultConfiguration()::setCaCertificates() sur votre instance QSslSocket avant la négociation SSL.
Pour plus d’informations sur les algorithmes de chiffrement et les certificats, consultez QSslCipher et QSslCertificate.
Ce produit inclut un logiciel développé par le projet OpenSSL destiné à être utilisé dans la boîte à outils OpenSSL (http://www.openssl.org/).
Remarque : veillez à bien distinguer le signal bytesWritten() du signal encryptedBytesWritten(). Pour un ` QTcpSocket`, le signal ` bytesWritten()` est émis dès que des données ont été écrites dans la socket TCP. Pour un `QSslSocket`, le signal ` bytesWritten()` est émis lorsque les données sont en cours de chiffrement et le signal ` encryptedBytesWritten()` est émis dès que les données ont été écrites dans la socket TCP.
Voir également QSslCertificate, QSslCipher et QSslError.
Documentation sur les types de membres
enum QSslSocket::PeerVerifyMode
Décrit les modes de vérification des pairs pour ` QSslSocket`. Le mode par défaut est `AutoVerifyPeer`, qui sélectionne un mode approprié en fonction de la propriété `QSocket::SslMode` du socket.
| Constante | Valeur | Description |
|---|---|---|
QSslSocket::VerifyNone | 0 | QSslSocket ne demandera pas de certificat au pair. Vous pouvez définir ce mode si l’identité de l’autre partie de la connexion ne vous intéresse pas. La connexion restera chiffrée, et votre socket enverra tout de même son certificat local au pair si celui-ci le demande. |
QSslSocket::QueryPeer | 1 | QSslSocket demandera un certificat au pair, mais n’exige pas que ce certificat soit valide. Ceci est utile lorsque vous souhaitez afficher les détails du certificat du pair à l’utilisateur sans affecter la négociation SSL proprement dite. Ce mode est le mode par défaut pour les serveurs. Remarque : dans Schannel, cette valeur se comporte de la même manière que VerifyNone. |
QSslSocket::VerifyPeer | 2 | QSslSocket demandera un certificat au pair pendant la phase de négociation SSL et exigera que ce certificat soit valide. En cas d’échec, ` QSslSocket ` émettra le signal ` QSslSocket::sslErrors()`. Ce mode est le mode par défaut pour les clients. |
QSslSocket::AutoVerifyPeer | 3 | QSslSocket utilisera automatiquement « QueryPeer » pour les sockets serveur et « VerifyPeer » pour les sockets client. |
Voir également QSslSocket::peerVerifyMode().
enum QSslSocket::SslMode
Décrit les modes de connexion disponibles pour QSslSocket.
| Constante | Valeur | Description |
|---|---|---|
QSslSocket::UnencryptedMode | 0 | Le socket n'est pas chiffré. Son comportement est identique à celui de QTcpSocket. |
QSslSocket::SslClientMode | 1 | Le socket est un socket SSL côté client. Il est soit déjà chiffré, soit en phase d’établissement de la connexion SSL (voir QSslSocket::isEncrypted()). |
QSslSocket::SslServerMode | 2 | Le socket est un socket SSL côté serveur. Il est soit déjà chiffré, soit en phase de négociation SSL (voir QSslSocket::isEncrypted()). |
Documentation des fonctions membres
[explicit] QSslSocket::QSslSocket(QObject *parent = nullptr)
Crée un objet QSslSocket. L'objet ` parent ` est transmis au constructeur de ` QObject`. La suite de chiffrement ` cipher ` de la nouvelle socket est définie sur celle renvoyée par la méthode statique `defaultCiphers()`.
[virtual noexcept] QSslSocket::~QSslSocket()
Supprime l'QSslSocket.
[static, since 6.1] QString QSslSocket::activeBackend()
Renvoie le nom du backend utilisé par ` QSslSocket ` et les classes associées. Si le backend actif n’a pas été défini explicitement, cette fonction renvoie le nom d’un backend par défaut que ` QSslSocket ` sélectionne implicitement parmi la liste des backends disponibles.
Remarque : lors de la sélection implicite d’un backend par défaut, QSslSocket privilégie le backend OpenSSL s’il est disponible. S’il n’est pas disponible, le backend Schannel est sélectionné implicitement sous Windows, et Secure Transport sur les plateformes Darwin. À défaut, si un backend TLS personnalisé est détecté, celui-ci est utilisé. Si aucun autre backend n’est détecté, le backend « certificat uniquement » est sélectionné. Pour plus d’informations sur les plugins TLS, veuillez consulter la section Activation et désactivation de la prise en charge SSL lors de la compilation de Qt à partir du code source.
Cette fonction a été introduite dans Qt 6.1.
Voir également setActiveBackend() et availableBackends().
[signal] void QSslSocket::alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslSocket émet ce signal si un message d'alerte a été reçu 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 particulière au sein de l’application. Si l’alerte est 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 QSslSocket::alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslSocket émet ce signal si un message d'alerte a été envoyé à un pair. Le paramètre « level » indique s'il s'agissait d'un avertissement ou d'une erreur fatale. Le paramètre « type » fournit le code du message d'alerte. Lorsqu'une description textuelle du message d'alerte est disponible, elle est fournie dans le paramètre « 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.
[override virtual] bool QSslSocket::atEnd() const
Réimplémente : QIODevice::atEnd() const.
[static, since 6.1] QList<QString> QSslSocket::availableBackends()
Renvoie les noms des backends actuellement disponibles. Ces noms sont en minuscules, par exemple « openssl », « securetransport », « schannel » (à l'instar des noms de fonctionnalités déjà existants pour les backends TLS dans Qt).
Cette fonction a été introduite dans Qt 6.1.
Voir également activeBackend().
[override virtual] qint64 QSslSocket::bytesAvailable() const
Réimplémente : ` QAbstractSocket::bytesAvailable()` const.
Renvoie le nombre d’octets déchiffrés immédiatement disponibles pour la lecture.
[override virtual] qint64 QSslSocket::bytesToWrite() const
Réimplémente : QAbstractSocket::bytesToWrite() const.
Renvoie le nombre d'octets non chiffrés en attente d'être chiffrés et écrits sur le réseau.
[override virtual] bool QSslSocket::canReadLine() const
Réimplémente : QIODevice::canReadLine() const.
Renvoie ` true ` si vous pouvez lire une ligne « while » (terminée par un seul caractère ASCII «\n ») de caractères déchiffrés ; sinon, renvoie `false`.
[override virtual] void QSslSocket::close()
Réimplémente : QAbstractSocket::close().
[override virtual] void QSslSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
Réimplémente : QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode, QAbstractSocket::NetworkLayerProtocol protocol).
void QSslSocket::connectToHostEncrypted(const QString &hostName, quint16 port, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
Lance une connexion chiffrée vers le périphérique hostName sur port, en utilisant mode comme OpenMode. Cela équivaut à appeler connectToHost() pour établir la connexion, puis à appeler startClientEncryption(). Le paramètre protocol permet de spécifier le protocole réseau à utiliser (par exemple, IPv4 ou IPv6).
QSslSocket passe d’abord à l’état HostLookupState. Ensuite, après être entré soit dans la boucle d’événements, soit dans l’une des fonctions waitFor...(), il passe à l’état ConnectingState, émet connected(), puis lance la négociation client SSL. À chaque changement d’état, QSslSocket émet le signal stateChanged().
Une fois la négociation client SSL lancée, si l’identité du pair ne peut être établie, le signal sslErrors() est émis. Si vous souhaitez ignorer les erreurs et poursuivre la connexion, vous devez appeler ` ignoreSslErrors()`, soit depuis une fonction de slot connectée au signal ` sslErrors()`, soit avant de passer en mode chiffré. Si ` ignoreSslErrors()` n’est pas appelé, la connexion est interrompue, le signal ` disconnected()` est émis et ` QSslSocket ` revient à l’état `UnconnectedState`.
Si la négociation SSL aboutit, ` QSslSocket ` émet le signal ` encrypted()`.
QSslSocket socket;
connect(&socket, &QSslSocket::encrypted, receiver, &Receiver::socketEncrypted);
socket.connectToHostEncrypted("imap", 993);
socket->write("1 CAPABILITY\r\n");Remarque : l’exemple ci-dessus montre qu’il est possible d’écrire du texte sur le socket immédiatement après avoir demandé la connexion chiffrée, avant que le signal encrypted() n’ait été émis. Dans ce cas, le texte est mis en file d’attente dans l’objet et écrit sur le socket une fois la connexion établie et le signal encrypted() émis.
La valeur par défaut de ` mode ` est ` ReadWrite`.
Si vous souhaitez créer un « QSslSocket » côté serveur d’une connexion, vous devez plutôt appeler la fonction ` startServerEncryption()` dès la réception de la connexion entrante via ` QTcpServer`.
Voir également connectToHost(), startClientEncryption(), waitForConnected() et waitForEncrypted().
void QSslSocket::connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
En plus du comportement d'origine de la méthode `connectToHostEncrypted`, cette méthode surchargée permet d'utiliser un nom d'hôte différent (sslPeerName) pour la validation du certificat, au lieu de celui utilisé pour la connexion TCP (hostName).
Il s'agit d'une fonction surchargée.
Voir également connectToHostEncrypted().
[since 6.0] void QSslSocket::continueInterruptedHandshake()
Si une application souhaite mener à bien une négociation de connexion même après avoir reçu le sign handshakeInterruptedOnError(), elle doit appeler cette fonction. Cet appel doit être effectué depuis une fonction de slot associée au signal. La connexion signal-slot doit être directe.
Cette fonction a été introduite dans Qt 6.0.
Voir également ` handshakeInterruptedOnError()` et ` QSslConfiguration::setHandshakeMustInterruptOnError()`.
[override virtual] void QSslSocket::disconnectFromHost()
Réimplémente : QAbstractSocket::disconnectFromHost().
[signal] void QSslSocket::encrypted()
Ce signal est émis lorsque QSslSocket passe en mode crypté. Une fois ce signal émis, la fonction QSslSocket::isEncrypted() renverra la valeur « true », et toutes les transmissions ultérieures sur le socket seront cryptées.
Voir également QSslSocket::connectToHostEncrypted() et QSslSocket::isEncrypted().
qint64 QSslSocket::encryptedBytesAvailable() const
Renvoie le nombre d'octets chiffrés en attente de déchiffrement. En règle générale, cette fonction renvoie 0, car QSslSocket déchiffre les données qu'il reçoit dès que possible.
qint64 QSslSocket::encryptedBytesToWrite() const
Renvoie le nombre d'octets chiffrés en attente d'écriture sur le réseau.
[signal] void QSslSocket::encryptedBytesWritten(qint64 written)
Ce signal est émis lorsque la fonction ` QSslSocket ` écrit ses données chiffrées sur le réseau. Le paramètre ` written ` contient le nombre d'octets qui ont été écrits avec succès.
Voir également QIODevice::bytesWritten().
[signal] void QSslSocket::handshakeInterruptedOnError(const QSslError &error)
QSslSocket émet ce signal si une erreur de vérification de certificat a été détectée et si la notification précoce des erreurs a été activée dans QSslConfiguration. Une application doit analyser l’ 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 continueInterruptedHandshake(), sslErrors() et QSslConfiguration::setHandshakeMustInterruptOnError().
[slot] void QSslSocket::ignoreSslErrors()
Ce slot indique à QSslSocket d'ignorer les erreurs survenant pendant la phase d'établissement de la connexion de QSslSocket et de poursuivre la connexion. Si vous souhaitez poursuivre la connexion même en cas d'erreurs pendant la phase d'établissement, vous devez appeler ce slot, soit depuis un slot lié à sslErrors(), soit avant la phase d'établissement. Si vous n’appelez pas ce slot, que ce soit en réponse à des erreurs ou avant l’établissement de la connexion, la connexion sera interrompue après l’émission du signal ` sslErrors()`.
S’il n’y a pas d’erreurs pendant la phase d’établissement de la connexion SSL (c’est-à-dire que l’identité du pair est établie sans problème), QSslSocket n’émettra pas le signal sslErrors(), et il n’est pas nécessaire d’appeler cette fonction.
Avertissement : veillez à toujours laisser l’utilisateur examiner les erreurs signalées par le signal sslErrors(), et n’appelez cette méthode qu’après confirmation de la part de l’utilisateur qu’il accepte de poursuivre. En cas d’erreurs inattendues, la connexion doit être interrompue. Appeler cette méthode sans examiner les erreurs réelles constituera très probablement un risque de sécurité pour votre application. Utilisez-la avec la plus grande prudence !
Remarque : ce slot est surchargé. Pour vous connecter à ce slot :
// Connect using qOverload:
connect(sender, &SenderClass::signal,
sslSocket, qOverload<>(&QSslSocket::ignoreSslErrors));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
sslSocket, [receiver = sslSocket]() { receiver->ignoreSslErrors(); });Voir également sslErrors().
void QSslSocket::ignoreSslErrors(const QList<QSslError> &errors)
Cette méthode indique à QSslSocket de ne prendre en compte que les erreurs répertoriées à l'adresse errors.
Remarque : comme la plupart des erreurs SSL sont associées à un certificat, vous devez, pour la plupart d’entre elles, définir le certificat attendu auquel cette erreur SSL est liée. Si, par exemple, vous souhaitez vous connecter à un serveur utilisant un certificat auto-signé, considérez l’extrait de code suivant :
QList<QSslCertificate> cert = QSslCertificate::fromPath("server-certificate.pem"_L1);
QSslError error(QSslError::SelfSignedCertificate, cert.at(0));
QList<QSslError> expectedSslErrors;
expectedSslErrors.append(error);
QSslSocket socket;
socket.ignoreSslErrors(expectedSslErrors);
socket.connectToHostEncrypted("server.tld", 443);Les appels multiples à cette fonction remplaceront la liste des erreurs transmises lors des appels précédents. Vous pouvez effacer la liste des erreurs que vous souhaitez ignorer en appelant cette fonction avec une liste vide.
Il s'agit d'une fonction surchargée.
Voir également sslErrors() et sslHandshakeErrors().
[static, since 6.1] QList<QSsl::ImplementedClass> QSslSocket::implementedClasses(const QString &backendName = {})
Cette fonction renvoie les classes spécifiques au backend implémentées par le backend nommé « backendName ». Un argument « backendName » vide est interprété comme une requête concernant le backend actuellement actif.
Cette fonction a été introduite dans Qt 6.1.
Voir également QSsl::ImplementedClass, activeBackend() et isClassImplemented().
[static, since 6.1] bool QSslSocket::isClassImplemented(QSsl::ImplementedClass cl, const QString &backendName = {})
Renvoie « true » si une classe cl est implémentée par le backend nommé backendName. Un backendName vide est interprété comme une requête concernant le backend actuellement actif.
Cette fonction a été introduite dans Qt 6.1.
Voir également implementedClasses().
bool QSslSocket::isEncrypted() const
Renvoie ` true ` si le socket est chiffré ; sinon, renvoie `false`.
Un socket chiffré chiffre toutes les données écrites à l’aide des fonctions ` write()` ou ` putChar()` avant que celles-ci ne soient transmises sur le réseau, et déchiffre toutes les données entrantes au fur et à mesure de leur réception depuis le réseau, avant que vous n’appeliez les fonctions ` read()`, ` readLine()` ou ` getChar()`.
QSslSocket émet encrypted() lorsqu’il passe en mode chiffré.
Vous pouvez appeler sessionCipher() pour déterminer quel algorithme de chiffrement est utilisé pour chiffrer et déchiffrer vos données.
Voir également mode().
[static, since 6.1] bool QSslSocket::isFeatureSupported(QSsl::SupportedFeature ft, const QString &backendName = {})
Renvoie « true » si une fonctionnalité ft est prise en charge par un backend nommé backendName. Un backendName vide est interprété comme une requête concernant le backend actuellement actif.
Cette fonction a été introduite dans Qt 6.1.
Voir également QSsl::SupportedFeature et supportedFeatures().
[static, since 6.1] bool QSslSocket::isProtocolSupported(QSsl::SslProtocol protocol, const QString &backendName = {})
Renvoie « true » si la méthode « protocol » est prise en charge par un backend nommé « backendName ». Une chaîne vide (« backendName ») est interprétée comme une requête concernant le backend actuellement actif.
Cette fonction a été introduite dans Qt 6.1.
Voir également supportedProtocols().
QSslCertificate QSslSocket::localCertificate() const
Renvoie le certificat local de la socket certificate, ou un certificat vide si aucun certificat local n'a été attribué.
Voir également setLocalCertificate() et privateKey().
QList<QSslCertificate> QSslSocket::localCertificateChain() const
Renvoie la chaîne d'certificate s locaux du socket, ou une liste vide si aucun certificat local n'a été attribué.
Voir aussi setLocalCertificateChain().
QSslSocket::SslMode QSslSocket::mode() const
Renvoie le mode actuel de la socket ; soit « UnencryptedMode », où « QSslSocket » se comporte de la même manière que « QTcpSocket », soit l’un des modes suivants : « SslClientMode » ou « SslServerMode », où le client est soit en phase de négociation, soit en mode chiffré.
Lorsque le mode change, QSslSocket émet modeChanged()
Voir également SslMode.
[signal] void QSslSocket::modeChanged(QSslSocket::SslMode mode)
Ce signal est émis lorsque la valeur de « QSslSocket » passe de « QSslSocket::UnencryptedMode » à « QSslSocket::SslClientMode » ou « QSslSocket::SslServerMode ». « mode » correspond au nouveau mode.
Voir également QSslSocket::mode().
[signal] void QSslSocket::newSessionTicketReceived()
Si le protocole TLS 1.3 a été négocié lors d’une poignée de main, la fonction ` QSslSocket ` émet ce signal après avoir reçu le message `NewSessionTicket`. La durée de vie de la session et celle du ticket de session sont mises à jour dans la configuration de la socket. La session peut être utilisée pour la reprise de session (et une poignée de main raccourcie) lors de futures connexions TLS.
Remarque : cette fonctionnalité n’est disponible qu’avec le backend OpenSSL et nécessite OpenSSL v 1.1.1 ou une version ultérieure.
Voir également QSslSocket::sslConfiguration(), QSslConfiguration::sessionTicket() et QSslConfiguration::sessionTicketLifeTimeHint().
QList<QOcspResponse> QSslSocket::ocspResponses() const
Cette fonction renvoie les réponses du protocole OCSP (Online Certificate Status Protocol) qu'un serveur peut envoyer au cours d'une négociation TLS utilisant l'OCSP stapling. La liste est vide si aucune réponse définitive ou aucune réponse n'a été reçue.
Voir également ` QSslConfiguration::setOcspStaplingEnabled()`.
QSslCertificate QSslSocket::peerCertificate() const
Renvoie le certificat numérique du pair (c'est-à-dire le certificat direct de l'hôte auquel vous êtes connecté), ou un certificat nul si le pair n'a pas attribué de certificat.
Le certificat du pair est vérifié automatiquement pendant la phase d'établissement de la connexion ; cette fonction est donc généralement utilisée pour récupérer le certificat à des fins d'affichage ou de diagnostic de la connexion. Il contient des informations sur le pair, notamment son nom d'hôte, l'émetteur du certificat et la clé publique du pair.
Le certificat du pair étant défini pendant la phase d'établissement de la connexion, il est possible d'y accéder en toute sécurité à partir d'un slot connecté au signal ` sslErrors()` ou au signal ` encrypted()`.
Si un certificat nul est renvoyé, cela peut signifier que la négociation SSL a échoué, que l’hôte auquel vous êtes connecté ne dispose pas de certificat, ou qu’il n’y a pas de connexion.
Si vous souhaitez vérifier la chaîne complète de certificats du pair, utilisez la fonction peerCertificateChain() pour les récupérer tous en une seule fois.
Voir également peerCertificateChain().
QList<QSslCertificate> QSslSocket::peerCertificateChain() const
Renvoie la chaîne de certificats numériques du pair, ou une liste vide de certificats.
Les certificats des pairs sont vérifiés automatiquement pendant la phase d'établissement de la connexion. Cette fonction est généralement utilisée pour récupérer des certificats à des fins d'affichage ou pour effectuer des diagnostics de connexion. Les certificats contiennent des informations sur le pair et les émetteurs de certificats, notamment le nom d'hôte, les noms des émetteurs et leurs clés publiques.
Les certificats du pair sont définis dans ` QSslSocket ` pendant la phase d'établissement de la connexion ; il est donc sans risque d'appeler cette fonction à partir d'un slot connecté au signal ` sslErrors()` ou au signal ` encrypted()`.
Si une liste vide est renvoyée, cela peut signifier que la négociation SSL a échoué, que l’hôte auquel vous êtes connecté ne dispose pas de certificat, ou qu’il n’y a pas de connexion.
Si vous souhaitez obtenir uniquement le certificat immédiat du pair, utilisez ` peerCertificate()`.
Voir également peerCertificate().
int QSslSocket::peerVerifyDepth() const
Renvoie le nombre maximal de certificats de la chaîne de certificats du pair à vérifier pendant la phase de négociation SSL, ou 0 (valeur par défaut) si aucune profondeur maximale n’a été définie, ce qui indique que la chaîne de certificats doit être vérifiée dans son intégralité.
Les certificats sont vérifiés dans l'ordre d'émission, en commençant par le certificat du pair lui-même, puis celui de son émetteur, et ainsi de suite.
Voir également setPeerVerifyDepth() et peerVerifyMode().
[signal] void QSslSocket::peerVerifyError(const QSslError &error)
QSslSocket 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 QSslSocket n’est pas en mesure d’identifier le pair de manière sécurisée.
Ce signal vous alerte rapidement en cas de problème. En vous connectant à ce signal, vous pouvez choisir manuellement de rompre la connexion depuis l’intérieur du slot connecté avant la fin de la négociation. Si aucune action n’est entreprise, ` QSslSocket ` émettra alors ` QSslSocket::sslErrors()`.
Voir également sslErrors().
QSslSocket::PeerVerifyMode QSslSocket::peerVerifyMode() const
Renvoie le mode de vérification du socket. Ce mode détermine si QSslSocket doit demander un certificat au pair (c'est-à-dire si le client demande un certificat au serveur, ou si le serveur demande un certificat au client), et s'il doit exiger que ce certificat soit valide.
Le mode par défaut est « AutoVerifyPeer », ce qui indique à QSslSocket d’utiliser « VerifyPeer » pour les clients et « QueryPeer » pour les serveurs.
Voir également setPeerVerifyMode(), peerVerifyDepth() et mode().
QString QSslSocket::peerVerifyName() const
Renvoie le nom d'hôte utilisé pour la validation du certificat, tel que défini par setPeerVerifyName ou par connectToHostEncrypted.
Voir également setPeerVerifyName() et connectToHostEncrypted().
[signal] void QSslSocket::preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
QSslSocket émet ce signal lorsqu'il négocie un ensemble de chiffrement PSK ; une authentification PSK est alors requise.
Lorsqu’il utilise la PSK, le client doit envoyer au serveur 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 au socket et ne doit pas être supprimé par l’application.
Voir également QSslPreSharedKeyAuthenticator.
QSslKey QSslSocket::privateKey() const
Renvoie la clé privée de ce socket.
Voir également setPrivateKey() et localCertificate().
QSsl::SslProtocol QSslSocket::protocol() const
Renvoie le protocole SSL de la socket. Par défaut, c'est le protocole « QSsl::SecureProtocols » qui est utilisé.
Voir aussi setProtocol().
[override virtual protected] qint64 QSslSocket::readData(char *data, qint64 maxlen)
Réimplémentation de : QAbstractSocket::readData(char *data, qint64 maxSize).
[override virtual] void QSslSocket::resume()
Réimplémente : QAbstractSocket::resume().
Reprend le transfert de données sur le socket après une pause. Si la méthode « setPauseMode(QAbstractSocket::PauseOnSslErrors); » a été appelée sur ce socket et qu'un signal « sslErrors() » est reçu, il est nécessaire d'appeler cette méthode pour que le socket reprenne son fonctionnement.
Voir également QAbstractSocket::pauseMode() et QAbstractSocket::setPauseMode().
QSslCipher QSslSocket::sessionCipher() const
Renvoie l'cipher cryptographique de la socket, ou un chiffrement nul si la connexion n'est pas chiffrée. Le chiffrement de la socket pour la session est défini pendant la phase d'établissement de la connexion. Ce chiffrement est utilisé pour chiffrer et déchiffrer les données transmises via la socket.
QSslSocket Fournit également des fonctions permettant de définir la liste ordonnée des algorithmes de chiffrement parmi lesquels la phase d’établissement de la connexion sélectionnera finalement l’algorithme de chiffrement de la session. Cette liste ordonnée doit être en place avant le début de la phase d’établissement de la connexion.
Voir également QSslConfiguration::ciphers(), QSslConfiguration::setCiphers() et QSslConfiguration::supportedCiphers().
QSsl::SslProtocol QSslSocket::sessionProtocol() const
Renvoie le protocole SSL/TLS du socket ou « UnknownProtocol » si la connexion n'est pas chiffrée. Le protocole du socket pour la session est défini pendant la phase d'établissement de la connexion.
Voir également protocol() et setProtocol().
[static, since 6.1] bool QSslSocket::setActiveBackend(const QString &backendName)
Renvoie « true » si un backend nommé « backendName » a été défini comme backend actif. « backendName » doit figurer parmi les noms renvoyés par la fonction availableBackends().
Remarque : une application ne peut pas utiliser simultanément plusieurs backends différents. Cela implique qu'un backend autre que celui par défaut doit être sélectionné avant toute utilisation de QSslSocket ou des classes associées, par exemple QSslCertificate ou QSslKey.
Cette fonction a été introduite dans Qt 6.1.
Voir également ` activeBackend()` et ` availableBackends()`.
void QSslSocket::setLocalCertificate(const QSslCertificate &certificate)
Définit le certificat local du socket sur certificate. Le certificat local est nécessaire si vous devez confirmer votre identité auprès du pair. Il est utilisé conjointement avec la clé privée ; si vous définissez le certificat local, vous devez également définir la clé privée.
Le certificat local et la clé privée sont toujours nécessaires pour les sockets serveur, mais sont également rarement utilisés par les sockets client si le serveur exige que le client s'authentifie.
Remarque : le backend SSL «Secure Transport » sous macOS peut mettre à jour le trousseau par défaut (il s’agit probablement de votre trousseau de connexion) en y important vos certificats et clés locaux. Cela peut également entraîner l'affichage de boîtes de dialogue système vous demandant une autorisation lorsque votre application utilise ces clés privées. Si ce comportement n’est pas souhaité, définissez la variable d’environnement QT_SSL_USE_TEMPORARY_KEYCHAIN sur une valeur non nulle ; cela incitera QSslSocket à utiliser son propre trousseau temporaire.
Voir également localCertificate() et setPrivateKey().
void QSslSocket::setLocalCertificate(const QString &path, QSsl::EncodingFormat format = QSsl::Pem)
Définit l'certificate locale du socket sur la première trouvée dans le fichier path, qui est analysée conformément à la spécification format.
Il s'agit d'une fonction surchargée.
void QSslSocket::setLocalCertificateChain(const QList<QSslCertificate> &localChain)
Définit la chaîne de certificats à présenter au pair lors de la négociation SSL sur localChain.
Voir également localCertificateChain() et QSslConfiguration::setLocalCertificateChain().
void QSslSocket::setPeerVerifyDepth(int depth)
Définit le nombre maximal de certificats de la chaîne de certificats du pair à vérifier pendant la phase de négociation SSL, à depth. Une valeur de 0 signifie qu'aucune profondeur maximale n'est définie, ce qui indique que la chaîne de certificats doit être vérifiée dans son intégralité.
Les certificats sont vérifiés dans l'ordre d'émission, en commençant par le certificat du pair lui-même, puis celui de son émetteur, et ainsi de suite.
Voir également peerVerifyDepth() et setPeerVerifyMode().
void QSslSocket::setPeerVerifyMode(QSslSocket::PeerVerifyMode mode)
Définit le mode de vérification du socket sur « mode ». Ce mode détermine si QSslSocket doit demander un certificat au pair (c'est-à-dire si le client demande un certificat au serveur, ou si le serveur demande un certificat au client), et s'il doit exiger que ce certificat soit valide.
Le mode par défaut est « AutoVerifyPeer », ce qui indique à QSslSocket d’utiliser « VerifyPeer » pour les clients et « QueryPeer » pour les serveurs.
La configuration de ce mode après le début du chiffrement n’a aucun effet sur la connexion en cours.
Voir également peerVerifyMode(), setPeerVerifyDepth() et mode().
void QSslSocket::setPeerVerifyName(const QString &hostName)
Définit un nom d'hôte différent, fourni par hostName, pour la validation du certificat, à la place de celui utilisé pour la connexion TCP.
Voir également peerVerifyName() et connectToHostEncrypted().
void QSslSocket::setPrivateKey(const QSslKey &key)
Définit l'key privée du socket sur key. La clé privée et l'certificate locale sont utilisées par les clients et les serveurs qui doivent prouver leur identité à leurs pairs SSL.
La clé et le certificat local sont tous deux obligatoires si vous créez un socket serveur SSL. Si vous créez un socket client SSL, la clé et le certificat local sont obligatoires si votre client doit s’identifier auprès d’un serveur SSL.
Voir également privateKey() et setLocalCertificate().
void QSslSocket::setPrivateKey(const QString &fileName, QSsl::KeyAlgorithm algorithm = QSsl::Rsa, QSsl::EncodingFormat format = QSsl::Pem, const QByteArray &passPhrase = QByteArray())
Lit la chaîne contenue dans le fichier fileName et la décode à l'aide d'un algorithm et d'un encoding format spécifiés afin de construire une SSL key. Si la clé encodée est chiffrée, passPhrase est utilisé pour la déchiffrer.
La clé privée du socket est définie sur la clé ainsi créée. La clé privée et l'certificate t local sont utilisés par les clients et les serveurs qui doivent prouver leur identité à leurs pairs SSL.
La clé et le certificat local sont tous deux requis si vous créez une socket serveur SSL. Si vous créez une socket client SSL, la clé et le certificat local sont requis si votre client doit s’identifier auprès d’un serveur SSL.
Il s’agit d’une fonction surchargée.
Voir également ` privateKey()` et ` setLocalCertificate()`.
void QSslSocket::setProtocol(QSsl::SslProtocol protocol)
Définit le protocole SSL du socket sur protocol. Cela affectera la prochaine négociation de connexion ; l'appel de cette fonction sur un socket déjà chiffré n'aura aucune incidence sur le protocole du socket.
Voir également protocol().
[override virtual] void QSslSocket::setReadBufferSize(qint64 size)
Réimplémente : QAbstractSocket::setReadBufferSize(taille en qint64).
Définit la taille du tampon de lecture interne de ` QSslSocket` à size octets.
[override virtual] bool QSslSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
Réimplémente : QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState, QIODeviceBase::OpenMode openMode).
Initialise ` QSslSocket ` avec le descripteur de socket natif ` socketDescriptor`. Renvoie ` true ` si ` socketDescriptor ` est accepté comme descripteur de socket valide ; sinon, renvoie ` false`. La socket est ouverte dans le mode spécifié par ` openMode` et passe à l’état de socket spécifié par ` state`.
Remarque : il n’est pas possible d’initialiser deux sockets avec le même descripteur de socket natif.
Voir également socketDescriptor().
[override virtual] void QSslSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)
Réimplémentation de : QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value).
Définit l'option « option » donnée sur la valeur décrite par value.
Voir aussi socketOption().
void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration)
Définit la configuration SSL du socket en utilisant le contenu du fichier configuration. Cette fonction définit le certificat local, les algorithmes de chiffrement, la clé privée et les certificats d'autorité de certification (CA) en utilisant ceux stockés dans le fichier configuration.
Il n’est pas possible de définir les champs liés à l’état SSL.
Voir également sslConfiguration(), setLocalCertificate(), setPrivateKey(), QSslConfiguration::setCaCertificates() et QSslConfiguration::setCiphers().
[override virtual protected] qint64 QSslSocket::skipData(qint64 maxSize)
Réimplémentation de : QAbstractSocket::skipData(qint64 maxSize).
[override virtual] QVariant QSslSocket::socketOption(QAbstractSocket::SocketOption option)
Réimplémente : QAbstractSocket::socketOption(option QAbstractSocket::SocketOption).
Renvoie la valeur de l'option option.
Voir aussi setSocketOption().
QSslConfiguration QSslSocket::sslConfiguration() const
Renvoie l'état de la configuration SSL du socket. Par défaut, la configuration SSL d'un socket consiste à utiliser les algorithmes de chiffrement par défaut, les certificats d'autorité de certification (CA) par défaut, sans clé privée ni certificat local.
La configuration SSL contient également des champs susceptibles d’évoluer au fil du temps sans préavis.
Voir également setSslConfiguration(), localCertificate(), peerCertificate(), peerCertificateChain(), sessionCipher(), privateKey(), QSslConfiguration::ciphers() et QSslConfiguration::caCertificates().
[signal] void QSslSocket::sslErrors(const QList<QSslError> &errors)
QSslSocket émet ce signal après la négociation SSL pour indiquer qu’une ou plusieurs erreurs se sont produites lors de la vérification de l’identité du pair. Ces erreurs indiquent généralement que ` QSslSocket ` 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 de ` QSslSocket::ignoreSslErrors()` n’aura aucun effet.
Voir également peerVerifyError().
QList<QSslError> QSslSocket::sslHandshakeErrors() const
Renvoie une liste des dernières erreurs SSL survenues. Il s’agit de la même liste que celle transmise par ` QSslSocket ` via le signal ` sslErrors()`. Si la connexion a été chiffrée sans erreur, cette fonction renvoie une liste vide.
Voir également ` connectToHostEncrypted()`.
[static] long QSslSocket::sslLibraryBuildVersionNumber()
Renvoie le numéro de version de la bibliothèque SSL utilisée au moment de la compilation. Si la prise en charge SSL n'est pas disponible, cette fonction renvoie -1.
Voir également sslLibraryVersionNumber().
[static] QString QSslSocket::sslLibraryBuildVersionString()
Renvoie la chaîne de version de la bibliothèque SSL utilisée au moment de la compilation. Si la prise en charge SSL n'est pas disponible, cette fonction renvoie une valeur vide.
Voir également sslLibraryVersionString().
[static] long QSslSocket::sslLibraryVersionNumber()
Renvoie le numéro de version de la bibliothèque SSL utilisée. Notez qu'il s'agit de la version de la bibliothèque utilisée au moment de l'exécution, et non au moment de la compilation. Si la prise en charge SSL n'est pas disponible, cette fonction renvoie -1.
[static] QString QSslSocket::sslLibraryVersionString()
Renvoie la chaîne de caractères correspondant à la version de la bibliothèque SSL utilisée. Notez qu'il s'agit de la version de la bibliothèque utilisée au moment de l'exécution, et non au moment de la compilation. Si la prise en charge SSL n'est pas disponible, cette fonction renverra une valeur vide.
[slot] void QSslSocket::startClientEncryption()
Lance une négociation SSL différée pour une connexion client. Cette fonction peut être appelée lorsque le socket se trouve dans l'état « ConnectedState » mais est encore en phase d'« UnencryptedMode ». S'il n'est pas encore connecté, ou s'il est déjà chiffré, cette fonction n'a aucun effet.
Les clients qui implémentent la fonctionnalité STARTTLS ont souvent recours aux poignées de main SSL différées. La plupart des autres clients peuvent éviter d’appeler directement cette fonction en utilisant plutôt connectToHostEncrypted(), qui effectue automatiquement la poignée de main.
Voir également connectToHostEncrypted() et startServerEncryption().
[slot] void QSslSocket::startServerEncryption()
Lance une négociation SSL différée pour une connexion au serveur. Cette fonction peut être appelée lorsque le socket est en mode « ConnectedState » mais toujours en état « UnencryptedMode ». S'il n'est pas connecté ou s'il est déjà chiffré, la fonction n'a aucun effet.
Pour les sockets serveur, l'appel de cette fonction est le seul moyen de lancer la négociation SSL. La plupart des serveurs appellent cette fonction dès qu’ils reçoivent une connexion, ou après avoir reçu une commande spécifique au protocole leur demandant de passer en mode SSL (par exemple, le serveur peut répondre à la réception de la chaîne « STARTTLS\r\n » en appelant cette fonction).
La méthode la plus courante pour implémenter un serveur SSL consiste à créer une sous-classe de ` QTcpServer ` et à réimplémenter la fonction ` QTcpServer::incomingConnection()`. Le descripteur de socket renvoyé est ensuite transmis à la fonction ` QSslSocket::setSocketDescriptor()`.
Voir également connectToHostEncrypted() et startClientEncryption().
[static, since 6.1] QList<QSsl::SupportedFeature> QSslSocket::supportedFeatures(const QString &backendName = {})
Cette fonction renvoie les fonctionnalités prises en charge par un backend nommé « backendName ». Un argument « backendName » vide est interprété comme une requête concernant le backend actuellement actif.
Cette fonction a été introduite dans Qt 6.1.
Voir également QSsl::SupportedFeature et activeBackend().
[static, since 6.1] QList<QSsl::SslProtocol> QSslSocket::supportedProtocols(const QString &backendName = {})
Si un backend nommé « backendName » est disponible, cette fonction renvoie la liste des versions du protocole TLS prises en charge par ce backend. Un backendName vide est interprété comme une requête concernant le backend actuellement actif. Dans le cas contraire, cette fonction renvoie une liste vide.
Cette fonction a été introduite dans Qt 6.1.
Voir également availableBackends(), activeBackend() et isProtocolSupported().
[static] bool QSslSocket::supportsSsl()
Renvoie ` true ` si cette plateforme prend en charge le protocole SSL ; sinon, renvoie `false`. Si la plateforme ne prend pas en charge le protocole SSL, la connexion via le socket échouera lors de la phase de connexion.
[override virtual] bool QSslSocket::waitForBytesWritten(int msecs = 30000)
Réimplémentation de : QAbstractSocket::waitForBytesWritten(int msecs).
[override virtual] bool QSslSocket::waitForConnected(int msecs = 30000)
Réimplémentation de : QAbstractSocket::waitForConnected(int msecs).
Attend que le socket soit connecté, ou pendant msecs millisecondes, selon la première éventualité. Si la connexion a été établie, cette fonction renvoie true; sinon, elle renvoie false.
Voir également QAbstractSocket::waitForConnected().
[override virtual] bool QSslSocket::waitForDisconnected(int msecs = 30000)
Réimplémentation de : QAbstractSocket::waitForDisconnected(int msecs).
Attend que la connexion soit interrompue ou que msecs millisecondes se soient écoulées, selon la première éventualité. Si la connexion a été interrompue, cette fonction renvoie true; sinon, elle renvoie false.
Voir également QAbstractSocket::waitForDisconnected().
bool QSslSocket::waitForEncrypted(int msecs = 30000)
Attend que le socket ait terminé la négociation SSL et ait émis la fonction ` encrypted()` ou que msecs millisecondes se soient écoulées, selon la première éventualité. Si la fonction ` encrypted()` a été émise, cette fonction renvoie `true` ; dans le cas contraire (par exemple, si le socket est déconnecté ou si la négociation SSL échoue), elle renvoie `false`.
L'exemple suivant attend jusqu’à une seconde que la socket soit chiffrée :
socket->connectToHostEncrypted("imap", 993);
if (socket->waitForEncrypted(1000))
qDebug("Encrypted!");Si « msecs » vaut -1, cette fonction n'aura pas de délai d'expiration.
Voir également startClientEncryption(), startServerEncryption(), encrypted() et isEncrypted().
[override virtual] bool QSslSocket::waitForReadyRead(int msecs = 30000)
Réimplémentation de : QAbstractSocket::waitForReadyRead(int msecs).
[override virtual protected] qint64 QSslSocket::writeData(const char *data, qint64 len)
Réimplémentation de : QAbstractSocket::writeData(const char *data, qint64 size).
Éléments non membres associés
[since 6.0] enum class AlertLevel
Décrit le niveau d'un message d'alerte
Cette énumération décrit le niveau d'un message d'alerte qui a été envoyé ou reçu.
| Constante | Valeur | Description |
|---|---|---|
QSslSocket::AlertLevel::Warning | 0 | Message d'alerte non critique |
QSslSocket::AlertLevel::Fatal | 1 | Message d'alerte critique : le backend sous-jacent gérera correctement ce type d'alerte et fermera la connexion. |
QSslSocket::AlertLevel::Unknown | 2 | Alerte dont le niveau de gravité est inconnu. |
Cette énumération a été introduite dans Qt 6.0.
[since 6.0] enum class AlertType
Énumère les codes possibles d'un message d'alerte
Voir la section 6 de la RFC 8446 pour connaître les valeurs possibles et leur signification.
| Constante | Valeur | Description |
|---|---|---|
QSslSocket::AlertType::CloseNotify | 0 | , |
QSslSocket::AlertType::UnexpectedMessage | 10 | |
QSslSocket::AlertType::BadRecordMac | 20 | |
QSslSocket::AlertType::RecordOverflow | 22 | |
QSslSocket::AlertType::DecompressionFailure | 30 | |
QSslSocket::AlertType::HandshakeFailure | 40 | |
QSslSocket::AlertType::NoCertificate | 41 | |
QSslSocket::AlertType::BadCertificate | 42 | |
QSslSocket::AlertType::UnsupportedCertificate | 43 | |
QSslSocket::AlertType::CertificateRevoked | 44 | |
QSslSocket::AlertType::CertificateExpired | 45 | |
QSslSocket::AlertType::CertificateUnknown | 46 | |
QSslSocket::AlertType::IllegalParameter | 47 | |
QSslSocket::AlertType::UnknownCa | 48 | |
QSslSocket::AlertType::AccessDenied | 49 | |
QSslSocket::AlertType::DecodeError | 50 | |
QSslSocket::AlertType::DecryptError | 51 | |
QSslSocket::AlertType::ExportRestriction | 60 | |
QSslSocket::AlertType::ProtocolVersion | 70 | |
QSslSocket::AlertType::InsufficientSecurity | 71 | |
QSslSocket::AlertType::InternalError | 80 | |
QSslSocket::AlertType::InappropriateFallback | 86 | |
QSslSocket::AlertType::UserCancelled | 90 | |
QSslSocket::AlertType::NoRenegotiation | 100 | |
QSslSocket::AlertType::MissingExtension | 109 | |
QSslSocket::AlertType::UnsupportedExtension | 110 | |
QSslSocket::AlertType::CertificateUnobtainable | 111 | |
QSslSocket::AlertType::UnrecognizedName | 112 | |
QSslSocket::AlertType::BadCertificateStatusResponse | 113 | |
QSslSocket::AlertType::BadCertificateHashValue | 114 | |
QSslSocket::AlertType::UnknownPskIdentity | 115 | |
QSslSocket::AlertType::CertificateRequired | 116 | |
QSslSocket::AlertType::NoApplicationProtocol | 120 | |
QSslSocket::AlertType::UnknownAlertMessage | 255 |
Cette énumération a été introduite dans Qt 6.0.
[since 6.1] enum class ImplementedClass
Énumère les classes implémentées par un backend TLS
Dans QtNetwork, certaines classes ont une implémentation spécifique au backend et peuvent donc rester non implémentées. Les éléments de cette énumération indiquent quelles classes disposent d'une implémentation fonctionnelle dans le backend.
| Constante | Valeur | Description |
|---|---|---|
QSslSocket::ImplementedClass::Key | 0 | Classe QSslKey. |
QSslSocket::ImplementedClass::Certificate | 1 | Classe QSslCertificate. |
QSslSocket::ImplementedClass::Socket | 2 | Classe QSslSocket. |
QSslSocket::ImplementedClass::DiffieHellman | 3 | Classe QSslDiffieHellmanParameters. |
QSslSocket::ImplementedClass::EllipticCurve | 4 | Classe QSslEllipticCurve. |
QSslSocket::ImplementedClass::Dtls | 5 | Classe QDtls. |
QSslSocket::ImplementedClass::DtlsCookie | 6 | Classe QDtlsClientVerifier. |
Cette énumération a été introduite dans Qt 6.1.
[since 6.1] enum class SupportedFeature
Énumère les fonctionnalités possibles prises en charge par un backend TLS
Dans QtNetwork, les classes liées au protocole TLS disposent d’une API publique qui peut ne pas être implémentée par certains backends. Par exemple, notre backend SecureTransport ne prend pas en charge l’ALPN côté serveur. Les éléments de l’énumération SupportedFeature indiquent qu’une fonctionnalité particulière est prise en charge.
| Constante | Valeur | Description |
|---|---|---|
QSslSocket::SupportedFeature::CertificateVerification | 0 | Indique que la méthode QSslCertificate::verify() est implémentée par le backend. |
QSslSocket::SupportedFeature::ClientSideAlpn | 1 | ALPN côté client (négociation du protocole au niveau de la couche application). |
QSslSocket::SupportedFeature::ServerSideAlpn | 2 | ALPN côté serveur. |
QSslSocket::SupportedFeature::Ocsp | 3 | OCSP Stapling (Online Certificate Status Protocol). |
QSslSocket::SupportedFeature::Psk | 4 | Clés pré-partagées. |
QSslSocket::SupportedFeature::SessionTicket | 5 | Tickets de session. |
QSslSocket::SupportedFeature::Alerts | 6 | Informations sur les messages d'alerte envoyés et reçus. |
Cette énumération a été introduite dans Qt 6.1.
© 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.