QSslSocket Class
La classe QSslSocket fournit une socket cryptée SSL pour les clients et les serveurs. Plus d'informations...
| En-tête : | #include <QSslSocket> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Network)target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake : | QT += network |
| Hérite : | 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 |
Emplacements 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 |
Non-membres apparenté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 en mode client et en mode serveur, et il prend en charge les protocoles TLS modernes, y compris TLS 1.3. Par défaut, QSslSocket n'utilise que les protocoles TLS considérés comme sûrs (QSsl::SecureProtocols), mais vous pouvez changer de protocole TLS en appelant setProtocol(), à condition de le faire avant que la poignée de main n'ait commencé.
Le cryptage SSL s'ajoute au flux TCP existant une fois que la socket entre dans l'état connecté. Il existe deux façons simples d'établir une connexion sécurisée à l'aide de QSslSocket : Avec une poignée de main SSL immédiate, ou avec une poignée de main SSL retardée qui se produit après que la connexion a été établie en mode non crypté.
La façon la plus courante d'utiliser QSslSocket est de construire un objet et de démarrer une connexion sécurisée en appelant connectToHostEncrypted(). Cette méthode démarre une prise de contact SSL immédiate une fois la connexion établie.
QSslSocket *socket = new QSslSocket(this); connect(socket, &QSslSocket::encrypted, this, &Receiver::ready); socket->connectToHostEncrypted("imap.example.com", 993);
Comme avec un simple QTcpSocket, QSslSocket entre dans les états HostLookupState, ConnectingState et enfin ConnectedState, si la connexion est réussie. La poignée de main démarre alors automatiquement et, si elle réussit, le signal encrypted() est émis pour indiquer que la socket est entrée dans l'état crypté et qu'elle est prête à être utilisée.
Notez que des données peuvent être écrites sur la socket immédiatement après le retour de connectToHostEncrypted() (c'est-à-dire avant que le signal encrypted() ne soit émis). Les données sont mises en file d'attente dans QSslSocket jusqu'à ce que le signal encrypted() soit émis.
Un exemple d'utilisation du handshake SSL retardé 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 surchargeriez QTcpServer::incomingConnection() avec quelque chose comme l'exemple ci-dessous, qui construit d'abord une instance de QSslSocket et appelle ensuite setSocketDescriptor() pour définir le descripteur de la nouvelle socket avec celui existant qui lui a été transmis. Il initie ensuite la poignée de main 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; } }
En cas d'erreur, QSslSocket émet le signal sslErrors(). Dans ce cas, si aucune mesure n'est prise pour ignorer la ou les erreurs, la connexion est abandonnée. Pour continuer, malgré l'apparition d'une erreur, vous pouvez appeler ignoreSslErrors(), soit à l'intérieur de ce slot après l'apparition de l'erreur, soit à tout moment après la construction de QSslSocket et avant que la connexion ne soit tentée. Cela permettra à QSslSocket d'ignorer les erreurs rencontrées lors de l'établissement de l'identité de l'homologue. Ignorer les erreurs au cours d'une poignée de main SSL doit être utilisé avec prudence, car une caractéristique fondamentale des connexions sécurisées est qu'elles doivent être établies avec une poignée de main réussie.
Une fois la connexion cryptée, vous utilisez QSslSocket comme une QTcpSocket ordinaire. Lorsque readyRead() est émis, vous pouvez appeler read(), canReadLine() et readLine(), ou getChar() pour lire les données déchiffrées dans le tampon interne de QSslSocket, et vous pouvez appeler write() ou putChar() pour écrire des données à l'homologue. QSslSocket cryptera automatiquement les données écrites pour vous et émettra encryptedBytesWritten() une fois que les données auront été écrites à l'homologue.
Par commodité, QSslSocket prend en charge les fonctions bloquantes de QTcpSocket: waitForConnected(), waitForReadyRead(), waitForBytesWritten() et waitForDisconnected(). Il fournit également waitForEncrypted(), qui bloque le thread appelant jusqu'à ce qu'une connexion crypté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 gérer les codes cryptographiques, les clés privées et les certificats locaux, homologues et de l'autorité de certification (CA). Il fournit également une API pour gérer les erreurs qui se produisent pendant la phase d'échange.
Les fonctionnalités suivantes peuvent également être personnalisées :
- La suite de chiffrement cryptographique de la socket peut être personnalisée avant la phase d'échange avec QSslConfiguration::setCiphers().
- Le certificat local et la clé privée de la socket peuvent être personnalisés avant la phase d'échange avec setLocalCertificate() et setPrivateKey().
- La base de données des certificats CA peut être étendue et personnalisée avec QSslConfiguration::addCaCertificate(), QSslConfiguration::addCaCertificates().
Pour étendre la liste des certificats CA par défaut utilisés par les sockets SSL pendant le handshake SSL, vous devez mettre à jour la configuration par défaut, comme dans l'extrait 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 QSslConfiguration::defaultConfiguration().setCaCertificates() avant la première poignée de main SSL dans votre application (par exemple, en lui passant QSslSocket::systemCaCertificates()), soit appeler QSslConfiguration::defaultConfiguration()::setCaCertificates() sur votre instance de QSslSocket avant la poignée de main SSL.
Pour plus d'informations sur les algorithmes de chiffrement et les certificats, voir QSslCipher et QSslCertificate.
Ce produit comprend un logiciel développé par le projet OpenSSL pour une utilisation dans la boîte à outils OpenSSL(http://www.openssl.org/).
Remarque : faites attention à la différence entre le signal bytesWritten() et le signal encryptedBytesWritten(). Pour un QTcpSocket, bytesWritten() sera émis dès que des données auront été écrites sur la socket TCP. Pour une QSslSocket, bytesWritten() est émis lorsque les données sont cryptées et encryptedBytesWritten() est émis dès que les données ont été écrites sur la socket TCP.
Voir aussi 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 du QSocket::SslMode de la socket.
| Constante | Valeur | Description de la constante |
|---|---|---|
QSslSocket::VerifyNone | 0 | QSslSocket ne demande pas de certificat à l'homologue. Vous pouvez choisir ce mode si vous n'êtes pas intéressé par l'identité de l'autre côté de la connexion. La connexion sera toujours chiffrée et votre socket enverra son certificat local à l'homologue si celui-ci le demande. |
QSslSocket::QueryPeer | 1 | QSslSocket demande un certificat à l'homologue, mais n'exige pas que ce certificat soit valide. Ceci est utile lorsque vous voulez afficher les détails du certificat de l'homologue à l'utilisateur sans affecter la poignée de main SSL. Ce mode est le mode par défaut pour les serveurs. Remarque : dans Schannel, cette valeur est identique à VerifyNone. |
QSslSocket::VerifyPeer | 2 | QSslSocket demande un certificat à l'homologue au cours de la phase d'échange SSL et exige que ce certificat soit valide. En cas d'échec, QSslSocket émet le signal QSslSocket::sslErrors(). Ce mode est le mode par défaut pour les clients. |
QSslSocket::AutoVerifyPeer | 3 | QSslSocket utilise automatiquement QueryPeer pour les sockets du serveur et VerifyPeer pour les sockets du client. |
Voir aussi QSslSocket::peerVerifyMode().
enum QSslSocket::SslMode
Décrit les modes de connexion disponibles pour QSslSocket.
| Constante | Valeur | Description du mode de connexion |
|---|---|---|
QSslSocket::UnencryptedMode | 0 | La socket n'est pas cryptée. Son comportement est identique à celui de QTcpSocket. |
QSslSocket::SslClientMode | 1 | La socket est une socket SSL côté client. Elle est soit déjà cryptée, soit en phase d'échange SSL (voir QSslSocket::isEncrypted()). |
QSslSocket::SslServerMode | 2 | La socket est une socket SSL côté serveur. Elle est soit déjà cryptée, soit en phase d'échange SSL (voir QSslSocket::isEncrypted()). |
Documentation des fonctions membres
[explicit] QSslSocket::QSslSocket(QObject *parent = nullptr)
Construit un objet QSslSocket. parent est transmis au constructeur de QObject. La suite cipher de la nouvelle socket est définie sur celle renvoyée par la méthode statique defaultCiphers().
[virtual noexcept] QSslSocket::~QSslSocket()
Détruit le site QSslSocket.
[static, since 6.1] QString QSslSocket::activeBackend()
Renvoie le nom du backend utilisé par QSslSocket et les classes apparenté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 dans la liste des backends disponibles.
Remarque : lors de la sélection implicite d'un backend par défaut, QSslSocket préfère le backend OpenSSL s'il est disponible. S'il n'est pas disponible, le backend Schannel est implicitement sélectionné sous Windows, et Secure Transport sur les plateformes Darwin. Dans le cas contraire, si un backend TLS personnalisé est trouvé, il est utilisé. Si aucun autre backend n'est trouvé, le backend "certificat uniquement" est sélectionné. Pour plus d'informations sur les plugins TLS, veuillez consulter Activation et désactivation de la prise en charge de SSL lors de la construction de Qt à partir des sources.
Cette fonction a été introduite dans Qt 6.1.
Voir aussi 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 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 QSslSocket::alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslSocket émet ce signal si un message d'alerte a été envoyé à 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.
[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" (similaires aux noms des fonctionnalités déjà existantes pour les backends TLS dans Qt).
Cette fonction a été introduite dans Qt 6.1.
Voir aussi activeBackend().
[override virtual] qint64 QSslSocket::bytesAvailable() const
Réimplémente : QAbstractSocket::bytesAvailable() const.
Renvoie le nombre d'octets décryptés qui sont 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 qui attendent 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 (terminée par un seul caractère ASCII '\n') de caractères déchiffrés ; sinon, false est renvoyé.
[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)
Démarre une connexion cryptée avec le dispositif hostName sur port, en utilisant mode comme OpenMode. Cela équivaut à appeler connectToHost() pour établir la connexion, suivi d'un appel à startClientEncryption(). Le paramètre protocol peut être utilisé pour spécifier le protocole réseau à utiliser (par exemple, IPv4 ou IPv6).
QSslSocket entre d'abord dans l'état HostLookupState. Ensuite, après être entré dans la boucle d'événements ou dans l'une des fonctions waitFor...(), il entre dans l'état ConnectingState, émet connected(), puis initie la poignée de main du client SSL. À chaque changement d'état, QSslSocket émet le signal stateChanged().
Après avoir initié la poignée de main du client SSL, si l'identité de l'homologue ne peut pas être établie, le signal sslErrors() est émis. Si vous souhaitez ignorer les erreurs et continuer à vous connecter, vous devez appeler ignoreSslErrors(), soit à l'intérieur d'une fonction slot connectée au signal sslErrors(), soit avant d'entrer en mode crypté. Si ignoreSslErrors() n'est pas appelé, la connexion est abandonnée, le signal disconnected() est émis et QSslSocket retourne à l'état UnconnectedState.
Si la poignée de main SSL est réussie, QSslSocket émet 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'un texte peut être écrit sur la socket immédiatement après la demande de connexion crypté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 la socket après l 'établissement de la connexion et l'émission du signal encrypted().
La valeur par défaut de mode est ReadWrite.
Si vous souhaitez créer un QSslSocket du côté serveur d'une connexion, vous devez plutôt appeler startServerEncryption() après avoir reçu la connexion entrante via QTcpServer.
Voir aussi 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 original de 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 aussi connectToHostEncrypted().
[since 6.0] void QSslSocket::continueInterruptedHandshake()
Si une application souhaite conclure une poignée de main même après avoir reçu le signal handshakeInterruptedOnError(), elle doit appeler cette fonction. Cet appel doit être fait à partir d'une fonction slot attachée au signal. La connexion signal-fente doit être directe.
Cette fonction a été introduite dans Qt 6.0.
Voir aussi handshakeInterruptedOnError() et QSslConfiguration::setHandshakeMustInterruptOnError().
[override virtual] void QSslSocket::disconnectFromHost()
Réimplémente : QAbstractSocket::disconnectFromHost().
[signal] void QSslSocket::encrypted()
Ce signal est émis lorsque QSslSocket entre en mode crypté. Après l'émission de ce signal, QSslSocket::isEncrypted() retournera vrai, et toutes les transmissions ultérieures sur la socket seront cryptées.
Voir aussi QSslSocket::connectToHostEncrypted() et QSslSocket::isEncrypted().
qint64 QSslSocket::encryptedBytesAvailable() const
Renvoie le nombre d'octets cryptés en attente de décryptage. Normalement, cette fonction renvoie 0 car QSslSocket déchiffre les données entrantes dès qu'il le peut.
qint64 QSslSocket::encryptedBytesToWrite() const
Renvoie le nombre d'octets cryptés en attente d'écriture sur le réseau.
[signal] void QSslSocket::encryptedBytesWritten(qint64 written)
Ce signal est émis lorsque QSslSocket écrit ses données cryptées sur le réseau. Le paramètre written contient le nombre d'octets qui ont été écrits avec succès.
Voir aussi QIODevice::bytesWritten().
[signal] void QSslSocket::handshakeInterruptedOnError(const QSslError &error)
QSslSocket émet ce signal si une erreur de vérification de certificat a été trouvée et si le rapport d'erreur précoce 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 continueInterruptedHandshake(), sslErrors() et QSslConfiguration::setHandshakeMustInterruptOnError().
[slot] void QSslSocket::ignoreSslErrors()
Ce slot indique à QSslSocket d'ignorer les erreurs pendant la phase de poignée de main de QSslSocket et de poursuivre la connexion. Si vous souhaitez poursuivre la connexion même si des erreurs surviennent pendant la phase de poignée de main, vous devez appeler ce slot, soit à partir d'un slot connecté à sslErrors(), soit avant la phase de poignée de main. Si vous n'appelez pas ce slot, que ce soit en réponse à des erreurs ou avant la poignée de main, la connexion sera interrompue après l'émission du signal sslErrors().
S'il n'y a pas d'erreurs pendant la phase de poignée de main SSL (c'est-à-dire que l'identité de l'homologue est établie sans problème), QSslSocket n'émettra pas le signal sslErrors(), et il n'est pas nécessaire d'appeler cette fonction.
Attention : Veillez à toujours laisser l'utilisateur examiner les erreurs signalées par le signal sslErrors() et n'appelez cette méthode qu'après confirmation par l'utilisateur que tout se passe bien. En cas d'erreurs inattendues, la connexion doit être interrompue. Appeler cette méthode sans vérifier les erreurs réelles posera très probablement un risque de sécurité pour votre application. Utilisez-la avec précaution !
Note : Ce slot est surchargé. Pour se 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 aussi sslErrors().
void QSslSocket::ignoreSslErrors(const QList<QSslError> &errors)
Cette méthode indique à QSslSocket d'ignorer uniquement les erreurs indiquées dans 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 l'erreur SSL est liée. Si, par exemple, vous voulez vous connecter à un serveur qui utilise un certificat auto-signé, considérez l'extrait 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);
Plusieurs appels à 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 aussi sslErrors() et sslHandshakeErrors().
[static, since 6.1] QList<QSsl::ImplementedClass> QSslSocket::implementedClasses(const QString &backendName = {})
Cette fonction renvoie les classes spécifiques au backend mises en œuvre par le backend nommé backendName. Un backendName vide est compris comme une requête sur le backend actuellement actif.
Cette fonction a été introduite dans Qt 6.1.
Voir aussi QSsl::ImplementedClass, activeBackend(), et isClassImplemented().
[static, since 6.1] bool QSslSocket::isClassImplemented(QSsl::ImplementedClass cl, const QString &backendName = {})
Retourne vrai si une classe cl est implémentée par le backend nommé backendName. Un backendName vide est compris comme une requête sur le backend actuellement actif.
Cette fonction a été introduite dans Qt 6.1.
Voir aussi implementedClasses().
bool QSslSocket::isEncrypted() const
Renvoie true si la socket est cryptée ; sinon, false est renvoyé.
Une socket cryptée crypte toutes les données écrites en appelant write() ou putChar() avant que les données ne soient écrites sur le réseau, et décrypte toutes les données entrantes lorsque les données sont reçues du réseau, avant que vous n'appeliez read(), readLine() ou getChar().
QSslSocket émet encrypted() lorsqu'il passe en mode crypté.
Vous pouvez appeler sessionCipher() pour savoir 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 un résultat positif si la fonctionnalité ft est prise en charge par un backend nommé backendName. Un backendName vide est compris comme une requête sur le backend actuellement actif.
Cette fonction a été introduite dans Qt 6.1.
Voir aussi QSsl::SupportedFeature et supportedFeatures().
[static, since 6.1] bool QSslSocket::isProtocolSupported(QSsl::SslProtocol protocol, const QString &backendName = {})
Retourne vrai si protocol est supporté par un backend nommé backendName. Un backendName vide est compris comme une requête sur le backend actuellement actif.
Cette fonction a été introduite dans Qt 6.1.
Voir aussi 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 aussi setLocalCertificate() et privateKey().
QList<QSslCertificate> QSslSocket::localCertificateChain() const
Renvoie la chaîne locale certificate de la 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 manière identique à QTcpSocket, soit SslClientMode ou SslServerMode, où le client est soit en négociation, soit en mode crypté.
Lorsque le mode change, QSslSocket émet modeChanged()
Voir aussi SslMode.
[signal] void QSslSocket::modeChanged(QSslSocket::SslMode mode)
Ce signal est émis lorsque QSslSocket passe de QSslSocket::UnencryptedMode à QSslSocket::SslClientMode ou QSslSocket::SslServerMode. mode est le nouveau mode.
Voir aussi QSslSocket::mode().
[signal] void QSslSocket::newSessionTicketReceived()
Si le protocole TLS 1.3 a été négocié lors d'une poignée de main, QSslSocket émet ce signal après avoir reçu le message NewSessionTicket. La session et l'indice de durée de vie du ticket de session sont mis à 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) dans les futures connexions TLS.
Note : Cette fonctionnalité n'est possible qu'avec le backend OpenSSL et nécessite OpenSSL v 1.1.1 ou plus.
Voir aussi QSslSocket::sslConfiguration(), QSslConfiguration::sessionTicket(), et QSslConfiguration::sessionTicketLifeTimeHint().
QList<QOcspResponse> QSslSocket::ocspResponses() const
Cette fonction renvoie les réponses du protocole d'état des certificats en ligne qu'un serveur peut envoyer lors d'une poignée de main TLS utilisant l'agrafage OCSP. La liste est vide si aucune réponse définitive ou aucune réponse n'a été reçue.
Voir aussi QSslConfiguration::setOcspStaplingEnabled().
QSslCertificate QSslSocket::peerCertificate() const
Renvoie le certificat numérique de l'homologue (c'est-à-dire le certificat immédiat de l'hôte auquel vous êtes connecté) ou un certificat nul si l'homologue n'a pas attribué de certificat.
Le certificat de l'homologue est vérifié automatiquement au cours de la phase d'échange, de sorte que cette fonction est normalement utilisée pour récupérer le certificat à des fins d'affichage ou de diagnostic de la connexion. Il contient des informations sur l'homologue, notamment son nom d'hôte, l'émetteur du certificat et la clé publique de l'homologue.
Étant donné que le certificat de l'homologue est défini au cours de la phase d'échange, il n'y a aucun risque à accéder au certificat de l'homologue à partir d'un slot connecté au signal sslErrors() ou au signal encrypted().
Si un certificat nul est renvoyé, cela peut signifier que la poignée de main SSL a échoué, que l'hôte auquel vous êtes connecté n'a pas de certificat ou qu'il n'y a pas de connexion.
Si vous souhaitez vérifier la chaîne complète de certificats de l'homologue, utilisez peerCertificateChain() pour les obtenir tous en même temps.
Voir également peerCertificateChain().
QList<QSslCertificate> QSslSocket::peerCertificateChain() const
Renvoie la chaîne de certificats numériques de l'homologue ou une liste vide de certificats.
Les certificats de l'homologue sont vérifiés automatiquement pendant la phase d'échange. Cette fonction est normalement 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 l'homologue et les émetteurs de certificats, notamment le nom de l'hôte, les noms des émetteurs et les clés publiques des émetteurs.
Les certificats de l'homologue sont définis dans QSslSocket pendant la phase d'échange, il est donc prudent 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 l'échange SSL a échoué, que l'hôte auquel vous êtes connecté n'a pas de certificat ou qu'il n'y a pas de connexion.
Si vous souhaitez obtenir uniquement le certificat immédiat de l'homologue, utilisez peerCertificate().
Voir également peerCertificate().
int QSslSocket::peerVerifyDepth() const
Renvoie le nombre maximal de certificats de la chaîne de certificats de l'homologue à vérifier lors de la phase d'échange SSL, ou 0 (par défaut) si aucune profondeur maximale n'a été définie, ce qui indique que l'ensemble de la chaîne de certificats doit être vérifié.
Les certificats sont vérifiés dans l'ordre d'émission, en commençant par le certificat de l'homologue, puis le certificat 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 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 QSslSocket 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, QSslSocket émettra QSslSocket::sslErrors().
Voir aussi sslErrors().
QSslSocket::PeerVerifyMode QSslSocket::peerVerifyMode() const
Renvoie le mode de vérification de la socket. Ce mode détermine si QSslSocket doit demander un certificat à l'homologue (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, qui indique à QSslSocket d'utiliser VerifyPeer pour les clients et QueryPeer pour les serveurs.
Voir aussi setPeerVerifyMode(), peerVerifyDepth() et mode().
QString QSslSocket::peerVerifyName() const
Renvoie le nom d'hôte différent pour la validation du certificat, tel que défini par setPeerVerifyName ou par connectToHostEncrypted.
Voir aussi setPeerVerifyName() et connectToHostEncrypted().
[signal] void QSslSocket::preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
QSslSocket émet ce signal lorsqu'il négocie une suite de chiffrement PSK, et une authentification PSK est donc nécessaire.
Lors de l'utilisation de la PSK, le client doit envoyer au serveur une identité valide et une clé prépartagée valide, afin 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îne l'échec de la poignée de main et, par conséquent, l'interruption de la connexion.
Remarque : l'objet authenticator appartient à la socket et ne doit pas être supprimé par l'application.
Voir aussi QSslPreSharedKeyAuthenticator.
QSslKey QSslSocket::privateKey() const
Renvoie la clé privée de cette socket.
Voir aussi setPrivateKey() et localCertificate().
QSsl::SslProtocol QSslSocket::protocol() const
Renvoie le protocole SSL de la socket. Par défaut, QSsl::SecureProtocols est utilisé.
Voir aussi setProtocol().
[override virtual protected] qint64 QSslSocket::readData(char *data, qint64 maxlen)
Réimplémente : QAbstractSocket::readData(char *data, qint64 maxSize).
[override virtual] void QSslSocket::resume()
Réimplémente : QAbstractSocket::resume().
Poursuit le transfert de données sur la socket après qu'elle ait été mise en pause. Si "setPauseMode(QAbstractSocket::PauseOnSslErrors) ;" a été appelé sur cette socket et qu'un signal sslErrors() est reçu, il est nécessaire d'appeler cette méthode pour que la socket continue.
Voir aussi QAbstractSocket::pauseMode() et QAbstractSocket::setPauseMode().
QSslCipher QSslSocket::sessionCipher() const
Renvoie le code cryptographique de la socket cipher, ou un code cryptographique nul si la connexion n'est pas cryptée. Le chiffrement de la socket pour la session est défini lors de la phase d'échange de données. Le chiffrement est utilisé pour chiffrer et déchiffrer les données transmises par la socket.
QSslSocket fournit également des fonctions permettant de définir la liste ordonnée de chiffrements à partir de laquelle la phase de poignée de main sélectionnera finalement le chiffrement de la session. Cette liste ordonnée doit être en place avant le début de la phase d'échange.
Voir aussi QSslConfiguration::ciphers(), QSslConfiguration::setCiphers() et QSslConfiguration::supportedCiphers().
QSsl::SslProtocol QSslSocket::sessionProtocol() const
Renvoie le protocole SSL/TLS de la socket ou UnknownProtocol si la connexion n'est pas cryptée. Le protocole de la socket pour la session est défini lors de la phase d'échange.
Voir aussi protocol() et setProtocol().
[static, since 6.1] bool QSslSocket::setActiveBackend(const QString &backendName)
Renvoie un résultat positif si un backend portant le nom backendName a été défini comme backend actif. backendName doit être l'un des noms renvoyés par availableBackends().
Remarque : une application ne peut pas utiliser simultanément différents backends. Cela implique qu'un backend autre que celui par défaut doit être sélectionné avant toute utilisation de QSslSocket ou de classes apparentées, par exemple QSslCertificate ou QSslKey.
Cette fonction a été introduite dans Qt 6.1.
Voir aussi activeBackend() et availableBackends().
void QSslSocket::setLocalCertificate(const QSslCertificate &certificate)
Définit le certificat local de la socket à certificate. Le certificat local est nécessaire si vous devez confirmer votre identité à l'homologue. Il est utilisé 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 du serveur, mais ils sont aussi rarement utilisés par les sockets du client si le serveur exige que le client s'authentifie.
Remarque : le backend SSL Secure Transport sur macOS peut mettre à jour le trousseau de clés par défaut (la valeur par défaut est probablement votre trousseau de connexion) en important vos certificats et clés locaux. Cela peut également entraîner l'affichage de boîtes de dialogue système demandant une autorisation lorsque votre application utilise ces clés privées. Si un tel comportement n'est pas souhaité, définissez la variable d'environnement QT_SSL_USE_TEMPORARY_KEYCHAIN à une valeur non nulle ; cela invitera QSslSocket à utiliser son propre trousseau de clés temporaire.
Voir aussi localCertificate() et setPrivateKey().
void QSslSocket::setLocalCertificate(const QString &path, QSsl::EncodingFormat format = QSsl::Pem)
Fixe la valeur locale de la socket certificate à la première trouvée dans le fichier path, qui est analysé en fonction de la valeur spécifiée 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 à l'homologue au cours de la poignée de main SSL comme étant localChain.
Voir également localCertificateChain() et QSslConfiguration::setLocalCertificateChain().
void QSslSocket::setPeerVerifyDepth(int depth)
Définit le nombre maximum de certificats de la chaîne de certificats de l'homologue à vérifier pendant la phase de poignée de main SSL, à depth. La définition d'une profondeur de 0 signifie qu'aucune profondeur maximale n'est définie, ce qui indique que toute la chaîne de certificats doit être vérifiée.
Les certificats sont vérifiés dans l'ordre d'émission, en commençant par le certificat de l'homologue, puis le certificat 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 de la socket à mode. Ce mode détermine si QSslSocket doit demander un certificat à l'homologue (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 définition 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, donné par hostName, pour la validation du certificat au lieu de celui utilisé pour la connexion TCP.
Voir aussi peerVerifyName() et connectToHostEncrypted().
void QSslSocket::setPrivateKey(const QSslKey &key)
Définit la clé privée de la socket key à key. La clé privée et le certificat local certificate sont utilisés par les clients et les serveurs qui doivent prouver leur identité à leurs homologues SSL.
La clé et le certificat local sont nécessaires si vous créez une socket de serveur SSL. Si vous créez une socket client SSL, la clé et le certificat local sont nécessaires si votre client doit s'identifier auprès d'un serveur SSL.
Voir aussi 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 en utilisant une clé spécifiée algorithm et un encodage format pour construire une clé SSL key. Si la clé encodée est cryptée, passPhrase est utilisé pour la décrypter.
La clé privée de la socket est définie sur la clé construite. La clé privée et le certificat local certificate sont utilisés par les clients et les serveurs qui doivent prouver leur identité à leurs homologues SSL.
La clé et le certificat local sont nécessaires si vous créez une socket serveur SSL. Si vous créez une socket client SSL, la clé et le certificat local sont nécessaires si votre client doit s'identifier auprès d'un serveur SSL.
Il s'agit d'une fonction surchargée.
Voir aussi privateKey() et setLocalCertificate().
void QSslSocket::setProtocol(QSsl::SslProtocol protocol)
Définit le protocole SSL de la socket à protocol. Cela affectera la prochaine poignée de main initiée ; appeler cette fonction sur une socket déjà cryptée n'affectera pas le protocole de la socket.
Voir aussi protocol().
[override virtual] void QSslSocket::setReadBufferSize(qint64 size)
Réimplémente : QAbstractSocket::setReadBufferSize(qint64 size).
Fixe la taille du tampon de lecture interne de QSslSocket à size bytes.
[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 entre dans l'état de la socket spécifié par state.
Note : Il n'est pas possible d'initialiser deux sockets avec le même descripteur de socket natif.
Voir aussi socketDescriptor().
[override virtual] void QSslSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)
Réimplémente : QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value).
Définit la valeur donnée par option à la valeur décrite par value.
Voir aussi socketOption().
void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration)
Définit la configuration SSL de la socket comme étant le contenu de configuration. Cette fonction définit le certificat local, les algorithmes de chiffrement, la clé privée et les certificats de l'autorité de certification comme étant ceux stockés dans configuration.
Il n'est pas possible de définir les champs liés à l'état SSL.
Voir aussi sslConfiguration(), setLocalCertificate(), setPrivateKey(), QSslConfiguration::setCaCertificates() et QSslConfiguration::setCiphers().
[override virtual protected] qint64 QSslSocket::skipData(qint64 maxSize)
Réimplémente : QAbstractSocket::skipData(qint64 maxSize).
[override virtual] QVariant QSslSocket::socketOption(QAbstractSocket::SocketOption option)
Réimplémente : QAbstractSocket::socketOption(QAbstractSocket::SocketOption option).
Renvoie la valeur de l'option option.
Voir aussi setSocketOption().
QSslConfiguration QSslSocket::sslConfiguration() const
Renvoie l'état de la configuration SSL de la socket. La configuration SSL par défaut d'une socket consiste à utiliser les algorithmes de chiffrement par défaut, les certificats d'autorité de certification par défaut, aucune clé privée locale ni aucun certificat.
La configuration SSL contient également des champs qui peuvent changer avec le temps sans préavis.
Voir aussi 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 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 QSslSocket n'est pas en mesure d'identifier l'homologue de manière sécurisée. Si aucune mesure n'est prise, 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 également peerVerifyError().
QList<QSslError> QSslSocket::sslHandshakeErrors() const
Renvoie une liste des dernières erreurs SSL qui se sont produites. 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 aussi connectToHostEncrypted().
[static] long QSslSocket::sslLibraryBuildVersionNumber()
Renvoie le numéro de version de la bibliothèque SSL utilisée au moment de la compilation. Si aucun support SSL n'est disponible, cela renvoie -1.
Voir aussi sslLibraryVersionNumber().
[static] QString QSslSocket::sslLibraryBuildVersionString()
Renvoie la chaîne de version de la bibliothèque SSL utilisée au moment de la compilation. Si aucun support SSL n'est disponible, la valeur renvoyée sera vide.
Voir aussi 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 aucun support SSL n'est disponible, la valeur retournée est -1.
[static] QString QSslSocket::sslLibraryVersionString()
Renvoie la chaîne 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 aucun support SSL n'est disponible, la valeur renvoyée sera vide.
[slot] void QSslSocket::startClientEncryption()
Démarre un handshake SSL retardé pour une connexion client. Cette fonction peut être appelée lorsque la socket est dans ConnectedState mais toujours dans UnencryptedMode. Si elle n'est pas encore connectée, ou si elle est déjà cryptée, cette fonction n'a aucun effet.
Les clients qui implémentent la fonctionnalité STARTTLS utilisent souvent des handshakes SSL retardés. 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 aussi connectToHostEncrypted() et startServerEncryption().
[slot] void QSslSocket::startServerEncryption()
Démarre un handshake SSL retardé pour une connexion au serveur. Cette fonction peut être appelée lorsque la socket est dans ConnectedState mais toujours dans UnencryptedMode. Si elle n'est pas connectée ou si elle est déjà cryptée, la fonction n'a aucun effet.
Pour les sockets de serveur, l'appel de cette fonction est le seul moyen d'initier la poignée de main SSL. La plupart des serveurs appellent cette fonction immédiatement après avoir reçu une connexion, ou après avoir reçu une commande spécifique au protocole pour 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 manière la plus courante d'implémenter un serveur SSL est de créer une sous-classe de QTcpServer et de réimplémenter QTcpServer::incomingConnection(). Le descripteur de socket renvoyé est alors transmis à QSslSocket::setSocketDescriptor().
Voir aussi 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 backendName vide est compris comme une requête sur le backend actuellement actif.
Cette fonction a été introduite dans Qt 6.1.
Voir aussi QSsl::SupportedFeature et activeBackend().
[static, since 6.1] QList<QSsl::SslProtocol> QSslSocket::supportedProtocols(const QString &backendName = {})
Si un backend portant le nom backendName est disponible, cette fonction renvoie la liste des versions du protocole TLS prises en charge par ce backend. Si backendName est vide, il s'agit d'une interrogation sur le backend actuellement actif. Sinon, cette fonction renvoie une liste vide.
Cette fonction a été introduite dans Qt 6.1.
Voir aussi availableBackends(), activeBackend(), et isProtocolSupported().
[static] bool QSslSocket::supportsSsl()
Renvoie true si cette plate-forme prend en charge SSL ; sinon, renvoie false. Si la plateforme ne supporte pas SSL, la socket échouera dans la phase de connexion.
[override virtual] bool QSslSocket::waitForBytesWritten(int msecs = 30000)
Réimplémente : QAbstractSocket::waitForBytesWritten(int msecs).
[override virtual] bool QSslSocket::waitForConnected(int msecs = 30000)
Réimplémente : QAbstractSocket::waitForConnected(int msecs).
Attend que la socket soit connectée, ou msecs millisecondes, selon ce qui se produit en premier. Si la connexion a été établie, cette fonction renvoie true; sinon, elle renvoie false.
Voir aussi QAbstractSocket::waitForConnected().
[override virtual] bool QSslSocket::waitForDisconnected(int msecs = 30000)
Réimplémente : QAbstractSocket::waitForDisconnected(int msecs).
Attend la déconnexion de la socket ou msecs millisecondes, selon ce qui se produit en premier. Si la connexion a été déconnectée, cette fonction renvoie true; sinon, elle renvoie false.
Voir également QAbstractSocket::waitForDisconnected().
bool QSslSocket::waitForEncrypted(int msecs = 30000)
Attend que la socket ait terminé la poignée de main SSL et ait émis encrypted(), ou msecs millisecondes, selon ce qui se produit en premier. Si encrypted() a été émis, cette fonction renvoie true ; sinon (par exemple, la socket est déconnectée, ou la poignée de main SSL échoue), false est renvoyé.
L'exemple suivant attend jusqu'à une seconde que la socket soit cryptée :
socket->connectToHostEncrypted("imap", 993) ;if (socket->waitForEncrypted(1000)) qDebug("Encrypted!");
Si msecs est égal à -1, cette fonction n'est pas interrompue.
Voir aussi startClientEncryption(), startServerEncryption(), encrypted() et isEncrypted().
[override virtual] bool QSslSocket::waitForReadyRead(int msecs = 30000)
Réimplémente : QAbstractSocket::waitForReadyRead(int msecs).
[override virtual protected] qint64 QSslSocket::writeData(const char *data, qint64 len)
Réimplémente : QAbstractSocket::writeData(const char *data, qint64 size).
Non-membres apparenté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 envoyé ou reçu.
| Constante | Valeur | Description du message |
|---|---|---|
QSslSocket::AlertLevel::Warning | 0 | Message d'alerte non fatal |
QSslSocket::AlertLevel::Fatal | 1 | Message d'alerte fatale, le backend sous-jacent traitera cette alerte correctement et fermera la connexion. |
QSslSocket::AlertLevel::Unknown | 2 | Une alerte dont le niveau de gravité est inconnu. |
Cette liste a été introduite dans Qt 6.0.
[since 6.0] enum class AlertType
Enumère les codes possibles qu'un message d'alerte peut avoir
Voir RFC 8446, section 6 pour 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 qu'un backend TLS implémente
Dans QtNetwork, certaines classes ont une implémentation spécifique au backend et peuvent donc ne pas être implémentées. Les énumérateurs de cette énumération indiquent quelle classe a une implémentation fonctionnelle dans le backend.
| Constante | Valeur | Description de la classe |
|---|---|---|
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 caractéristiques possibles qu'un backend TLS prend en charge.
Sur QtNetwork, les classes liées à TLS ont une API publique qui peut ne pas être implémentée par certains backend. Par exemple, notre backend SecureTransport ne prend pas en charge l'ALPN côté serveur. Les énumérateurs de l'énumération SupportedFeature indiquent qu'une fonctionnalité particulière est prise en charge.
| Constante | Valeur | Description |
|---|---|---|
QSslSocket::SupportedFeature::CertificateVerification | 0 | Indique que QSslCertificate::verify() est implémenté par le backend. |
QSslSocket::SupportedFeature::ClientSideAlpn | 1 | ALPN (Application Layer Protocol Negotiation) côté client. |
QSslSocket::SupportedFeature::ServerSideAlpn | 2 | ALPN côté serveur. |
QSslSocket::SupportedFeature::Ocsp | 3 | Agrafage OCSP (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 liste 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.