QSslServer Class
Implementiert einen verschlüsselten, sicheren TCP-Server über TLS. Mehr...
Kopfzeile: | #include <QSslServer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
Seit: | Qt 6.4 |
Vererbt: | QTcpServer |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QSslServer ist Teil der Netzwerk Programmier API.
Öffentliche Funktionen
QSslServer(QObject *parent = nullptr) | |
virtual | ~QSslServer() override |
int | handshakeTimeout() const |
void | setHandshakeTimeout(int timeout) |
void | setSslConfiguration(const QSslConfiguration &sslConfiguration) |
QSslConfiguration | sslConfiguration() const |
Signale
void | alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
void | alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
void | errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError) |
void | handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error) |
void | peerVerifyError(QSslSocket *socket, const QSslError &error) |
void | preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator) |
void | sslErrors(QSslSocket *socket, const QList<QSslError> &errors) |
void | startedEncryptionHandshake(QSslSocket *socket) |
Reimplementierte geschützte Funktionen
virtual void | incomingConnection(qintptr socket) override |
Detaillierte Beschreibung
Klasse, die anstelle von QTcpServer zu verwenden ist, um einen TCP-Server mit Transport Layer Security (TLS) zu implementieren.
Um die Einstellungen für den sicheren Handshake zu konfigurieren, verwenden Sie die entsprechenden Setter-Funktionen für ein QSslConfiguration -Objekt, und verwenden Sie es dann als Argument für die Funktion setSslConfiguration(). Alle folgenden eingehenden Verbindungen, die behandelt werden, verwenden diese Einstellungen.
Um das Abhören eingehender Verbindungen zu starten, verwenden Sie die von QTcpServer geerbte Funktion listen(). Andere Einstellungen können mit Hilfe der von der Klasse QTcpServer geerbten Setter-Funktionen konfiguriert werden.
Verbinden Sie sich mit den Signalen dieser Klasse, um auf die eingehenden Verbindungsversuche zu reagieren. Sie sind identisch mit den Signalen von QSslSocket, übergeben aber zusätzlich einen Zeiger auf das betreffende Socket.
Wenn Sie auf das Signal pendingConnectionAvailable() reagieren, verwenden Sie die Funktion nextPendingConnection(), um die nächste eingehende Verbindung zu holen und sie aus der Warteschlange für ausstehende Verbindungen zu nehmen. Die QSslSocket ist ein Kind des QSslServers und wird gelöscht, wenn der QSslServer gelöscht wird. Es ist immer noch eine gute Idee, das Objekt explizit zu zerstören, wenn man es nicht mehr benötigt, um Speicherverschwendung zu vermeiden.
Siehe auch QTcpServer, QSslConfiguration, und QSslSocket.
Dokumentation der Mitgliedsfunktionen
[explicit]
QSslServer::QSslServer(QObject *parent = nullptr)
Konstruiert einen neuen QSslServer mit der angegebenen parent.
[override virtual noexcept]
QSslServer::~QSslServer()
Zerstört die QSslServer.
Alle offenen Verbindungen werden geschlossen.
[signal]
void QSslServer::alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslServer gibt dieses Signal aus, wenn socket eine Warnmeldung von einer Gegenstelle erhalten hat. level gibt an, ob es sich um eine schwerwiegende oder um eine Warnung handelt. type ist der Code, der erklärt, warum die Warnmeldung gesendet wurde. Wenn eine textuelle Beschreibung der Warnmeldung verfügbar ist, wird sie in description angegeben.
Hinweis: Das Signal dient hauptsächlich zu Informations- und Debugging-Zwecken und erfordert keine Behandlung in der Anwendung. Wenn der Alarm fatal war, wird das zugrundeliegende Backend ihn behandeln und die Verbindung schließen.
Hinweis: Nicht alle Backends unterstützen diese Funktion.
Siehe auch alertSent(), QSsl::AlertLevel, und QSsl::AlertType.
[signal]
void QSslServer::alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslServer gibt dieses Signal aus, wenn eine Warnmeldung von socket an einen Peer gesendet wurde. level beschreibt, ob es sich um eine Warnung oder einen schwerwiegenden Fehler handelt. type gibt den Code der Warnmeldung an. Wenn eine textuelle Beschreibung der Warnmeldung verfügbar ist, wird sie in description angegeben.
Hinweis: Dieses Signal hat hauptsächlich informativen Charakter und kann zu Debugging-Zwecken verwendet werden; normalerweise erfordert es keine Aktionen seitens der Anwendung.
Hinweis: Nicht alle Backends unterstützen diese Funktionalität.
Siehe auch alertReceived(), QSsl::AlertLevel, und QSsl::AlertType.
[signal]
void QSslServer::errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError)
Dieses Signal wird ausgegeben, wenn beim Handshake ein Fehler aufgetreten ist. Der Parameter socketError beschreibt die Art des aufgetretenen Fehlers.
Das socket wird automatisch gelöscht, nachdem dieses Signal ausgegeben wurde, wenn der Socket-Handshake nicht den verschlüsselten Zustand erreicht hat. Wenn socket jedoch erfolgreich verschlüsselt wurde, wird es in die Warteschlange der ausstehenden Verbindungen von QSslServer eingefügt. Wenn der Benutzer QTcpServer::nextPendingConnection() aufgerufen hat, liegt es in seiner Verantwortung, socket zu zerstören, da socket erst zerstört wird, wenn das Objekt QSslServer zerstört ist. Tritt bei socket ein Fehler auf, nachdem es in die Warteschlange für ausstehende Verbindungen eingefügt wurde, wird dieses Signal nicht ausgegeben, und socket wird nicht entfernt oder zerstört.
Hinweis: Sie können nicht Qt::QueuedConnection verwenden, wenn Sie eine Verbindung zu diesem Signal herstellen, da sonst die socket bereits zerstört ist, wenn das Signal verarbeitet wird.
Siehe auch QSslSocket::error() und errorString().
[signal]
void QSslServer::handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error)
QSslServer gibt dieses Signal aus, wenn ein Fehler bei der Zertifikatsüberprüfung durch socket festgestellt wurde und wenn die frühzeitige Fehlerberichterstattung in QSslConfiguration aktiviert wurde. Von einer Anwendung wird erwartet, dass sie error überprüft und entscheidet, ob sie den Handshake fortsetzt oder abbricht und eine Warnmeldung an die Gegenstelle sendet. Die Signal-Slot-Verbindung muss direkt sein.
Siehe auch QSslSocket::continueInterruptedHandshake(), sslErrors(), und QSslConfiguration::setHandshakeMustInterruptOnError().
int QSslServer::handshakeTimeout() const
Gibt den aktuell konfigurierten Handshake-Timeout zurück.
Siehe auch setHandshakeTimeout().
[override virtual protected]
void QSslServer::incomingConnection(qintptr socket)
Reimplements: QTcpServer::incomingConnection(qintptr socketDescriptor).
Wird aufgerufen, wenn eine neue Verbindung aufgebaut wird.
Konvertiert socket in ein QSslSocket.
[signal]
void QSslServer::peerVerifyError(QSslSocket *socket, const QSslError &error)
QSslServer kann dieses Signal mehrmals während des SSL-Handshakes aussenden, bevor die Verschlüsselung aufgebaut ist, um anzuzeigen, dass bei der Feststellung der Identität der Gegenstelle ein Fehler aufgetreten ist. Die error ist in der Regel ein Hinweis darauf, dass socket nicht in der Lage ist, die Gegenstelle sicher zu identifizieren.
Dieses Signal gibt Ihnen einen frühen Hinweis darauf, dass etwas nicht in Ordnung ist. Wenn Sie eine Verbindung zu diesem Signal herstellen, können Sie manuell entscheiden, ob Sie die Verbindung innerhalb des angeschlossenen Slots abbauen wollen, bevor der Handshake abgeschlossen ist. Wird nichts unternommen, fährt QSslServer mit der Ausgabe von sslErrors() fort.
Siehe auch sslErrors().
[signal]
void QSslServer::preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator)
QSslServer sendet dieses Signal, wenn socket eine PSK-Ciphersuite aushandelt, so dass eine PSK-Authentifizierung erforderlich ist.
Bei der Verwendung von PSK muss der Server eine gültige Identität und einen gültigen Pre-Shared Key bereitstellen, damit der SSL-Handshake fortgesetzt werden kann. Anwendungen können diese Informationen in einem mit diesem Signal verbundenen Slot bereitstellen, indem sie das übergebene authenticator Objekt entsprechend ihren Bedürfnissen ausfüllen.
Hinweis: Das Ignorieren dieses Signals oder die Nichtbereitstellung der erforderlichen Anmeldeinformationen führt zum Scheitern des Handshakes und damit zum Abbruch der Verbindung.
Hinweis: Das Objekt authenticator ist Eigentum von socket und darf von der Anwendung nicht gelöscht werden.
Siehe auch QSslPreSharedKeyAuthenticator.
void QSslServer::setHandshakeTimeout(int timeout)
Legt die für alle eingehenden Handshakes zu verwendende timeout in Millisekunden fest.
Dies ist für den Fall relevant, dass ein Client, ob böswillig oder versehentlich, eine Verbindung zum Server herstellt, aber keinen Versuch unternimmt, zu kommunizieren oder einen Handshake zu initiieren. QSslServer beendet die Verbindung dann automatisch nach Ablauf von timeout Millisekunden.
Standardmäßig beträgt die Zeitüberschreitung 5000 Millisekunden (5 Sekunden).
Hinweis: Das zugrundeliegende TLS-Framework kann jetzt oder in Zukunft seine eigene Timeout-Logik haben, diese Funktion hat keinen Einfluss darauf.
Hinweis: Die an diese Funktion übergebene timeout gilt nur für neue Verbindungen. Wenn ein Client bereits verbunden ist, wird er die Zeitüberschreitung verwenden, die beim Verbindungsaufbau festgelegt wurde.
Siehe auch handshakeTimeout().
void QSslServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)
Legt die sslConfiguration fest, die für alle folgenden eingehenden Verbindungen verwendet wird.
Dies muss vor listen() aufgerufen werden, um sicherzustellen, dass die gewünschte Konfiguration während aller Handshakes verwendet wurde.
Siehe auch sslConfiguration() und QSslSocket::setSslConfiguration().
QSslConfiguration QSslServer::sslConfiguration() const
Gibt die aktuelle ssl-Konfiguration zurück.
Siehe auch setSslConfiguration().
[signal]
void QSslServer::sslErrors(QSslSocket *socket, const QList<QSslError> &errors)
QSslServer gibt dieses Signal nach dem SSL-Handshake aus, um anzuzeigen, dass ein oder mehrere Fehler bei der Feststellung der Identität der Gegenstelle aufgetreten sind. Die Fehler sind in der Regel ein Hinweis darauf, dass socket nicht in der Lage ist, die Gegenstelle sicher zu identifizieren. Wenn keine Maßnahmen ergriffen werden, wird die Verbindung nach dem Ausgeben dieses Signals abgebrochen.
Wenn Sie die Verbindung trotz der aufgetretenen Fehler fortsetzen wollen, müssen Sie QSslSocket::ignoreSslErrors() aus einem mit diesem Signal verbundenen Slot heraus aufrufen. Wenn Sie zu einem späteren Zeitpunkt auf die Fehlerliste zugreifen müssen, können Sie sslHandshakeErrors() aufrufen.
errors enthält einen oder mehrere Fehler, die QSslSocket daran hindern, die Identität der Gegenstelle zu überprüfen.
Hinweis: Sie können Qt::QueuedConnection nicht verwenden, wenn Sie eine Verbindung zu diesem Signal herstellen, oder der Aufruf von QSslSocket::ignoreSslErrors() hat keine Wirkung.
Siehe auch peerVerifyError().
[signal]
void QSslServer::startedEncryptionHandshake(QSslSocket *socket)
Dieses Signal wird ausgegeben, wenn der Client, der mit socket verbunden ist, den TLS-Handshake einleitet.
© 2025 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.