QSslServer Class
Implementiert einen verschlüsselten, sicheren TCP-Server über TLS. Mehr...
| Header: | #include <QSslServer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Seit: | Qt 6.4 |
| Erbt von: | QTcpServer |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QSslServer ist Teil der Netzwerkprogrammier-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) |
Neu implementierte geschützte Funktionen
| virtual void | incomingConnection(qintptr socket) override |
Ausführliche Beschreibung
Klasse, die anstelle von „ QTcpServer “ verwendet wird, 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 übergeben Sie dieses anschließend als Argument an die Funktion ` setSslConfiguration()`. Alle nachfolgend verarbeiteten eingehenden Verbindungen verwenden diese Einstellungen.
Um auf eingehende Verbindungen zu warten, verwenden Sie die Funktion ` listen()`, die von ` QTcpServer` geerbt wurde. Weitere Einstellungen können mithilfe der von der Klasse ` QTcpServer ` geerbten Setter-Funktionen konfiguriert werden.
Verbinden Sie sich mit den Signalen dieser Klasse, um auf eingehende Verbindungsversuche zu reagieren. Diese entsprechen den Signalen von ` QSslSocket`, übergeben jedoch zusätzlich einen Zeiger auf den betreffenden Socket.
Wenn Sie auf das Signal „ pendingConnectionAvailable()“ reagieren, verwenden Sie die Funktion „ nextPendingConnection()“, um die nächste eingehende Verbindung abzurufen und aus der Warteschlange für ausstehende Verbindungen zu entfernen. Das „ QSslSocket “-Objekt ist ein untergeordnetes Objekt des „QSslServer“ und wird gelöscht, wenn der „QSslServer“ gelöscht wird. Es empfiehlt sich dennoch, das Objekt explizit zu zerstören, wenn Sie es nicht mehr benötigen, um Speicherplatzverschwendung zu vermeiden.
Siehe auch „ QTcpServer “, „ QSslConfiguration “ und „ QSslSocket “.
Dokumentation zu den Mitgliedsfunktionen
[explicit] QSslServer::QSslServer(QObject *parent = nullptr)
Erstellt einen neuen QSslServer mit dem angegebenen „ parent “.
[override virtual noexcept] QSslServer::~QSslServer()
Löscht 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 der „ socket “ eine Warnmeldung von einem Peer empfangen hat. „ level “ gibt an, ob es sich bei der Warnung um einen schwerwiegenden Fehler oder um eine Warnung handelte. „ type “ ist der Code, der erklärt, warum die Warnung gesendet wurde. Wenn eine textuelle Beschreibung der Warnmeldung verfügbar ist, wird diese unter „ description “ bereitgestellt.
Hinweis: Das Signal dient hauptsächlich zu Informations- und Debugging-Zwecken und erfordert keine Bearbeitung in der Anwendung. War die Warnung schwerwiegend, wird sie vom zugrunde liegenden Backend bearbeitet und die Verbindung geschlossen.
Hinweis: Nicht alle Backends unterstützen diese Funktionalität.
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 gibt an, ob es sich um eine Warnung oder einen schwerwiegenden Fehler handelte. type liefert den Code der Warnmeldung. Sofern eine textuelle Beschreibung der Warnmeldung verfügbar ist, wird diese in description bereitgestellt.
Hinweis: Dieses Signal dient hauptsächlich zu Informationszwecken und kann zu Debugging-Zwecken verwendet werden; normalerweise erfordert es keine Maßnahmen 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 während des Handshakes ein Fehler aufgetreten ist. Der Parameter „ socketError “ beschreibt die Art des aufgetretenen Fehlers.
Der „ socket “ wird nach der Ausgabe dieses Signals automatisch gelöscht, sofern der Socket-Handshake noch nicht den verschlüsselten Zustand erreicht hat. Wurde der „ socket “ jedoch erfolgreich verschlüsselt, wird er in die Warteschlange für ausstehende Verbindungen des „ QSslServer “ eingefügt. Hat der Benutzer „ QTcpServer::nextPendingConnection()“ aufgerufen, liegt es in seiner Verantwortung, den „ socket “ zu zerstören; andernfalls wird der „ socket “ erst zerstört, wenn das „ QSslServer “-Objekt zerstört wird. Tritt bei einem ` socket ` ein Fehler auf, nachdem es in die Warteschlange für ausstehende Verbindungen eingefügt wurde, wird dieses Signal nicht ausgelöst, und das ` socket ` wird weder entfernt noch zerstört.
Hinweis: Sie können ` Qt::QueuedConnection ` nicht verwenden, wenn Sie sich an dieses Signal anbinden, da sonst das ` socket ` bereits zerstört sein wird, wenn das Signal abgearbeitet wird.
Siehe auch „ QSslSocket::error()“ und „ errorString()“.
[signal] void QSslServer::handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error)
QSslServer Gibt dieses Signal aus, wenn von „ socket “ ein Fehler bei der Zertifikatsüberprüfung festgestellt wurde und in „ QSslConfiguration “ die frühzeitige Fehlermeldung aktiviert wurde. Von einer Anwendung wird erwartet, dass sie den „ error “ überprüft und entscheidet, ob sie den Handshake fortsetzen oder abbrechen und eine Warnmeldung an den Gegenpart senden möchte. Die Signal-Slot-Verbindung muss direkt sein.
Siehe auch QSslSocket::continueInterruptedHandshake(), sslErrors() und QSslConfiguration::setHandshakeMustInterruptOnError().
int QSslServer::handshakeTimeout() const
Gibt das aktuell konfigurierte Handshake-Timeout zurück.
Siehe auch „ setHandshakeTimeout()“.
[override virtual protected] void QSslServer::incomingConnection(qintptr socket)
Implementiert: ` QTcpServer::incomingConnection` (qintptr `socketDescriptor`).
Wird aufgerufen, wenn eine neue Verbindung hergestellt wird.
Konvertiert ` socket ` in ein ` QSslSocket`.
[signal] void QSslServer::peerVerifyError(QSslSocket *socket, const QSslError &error)
QSslServer kann dieses Signal während des SSL-Handshakes mehrmals aussenden, bevor die Verschlüsselung hergestellt wurde, um anzuzeigen, dass beim Feststellen der Identität des Gegenübers ein Fehler aufgetreten ist. Das Signal „ error “ ist in der Regel ein Hinweis darauf, dass „ socket “ den Gegenüber nicht sicher identifizieren kann.
Dieses Signal liefert Ihnen einen frühzeitigen Hinweis darauf, dass etwas nicht stimmt. Indem Sie sich an dieses Signal anbinden, können Sie manuell entscheiden, die Verbindung aus dem verbundenen Slot heraus zu trennen, bevor der Handshake abgeschlossen ist. Wenn keine Maßnahmen ergriffen werden, sendet „ QSslServer “ anschließend „ sslErrors “ () aus.
Siehe auch sslErrors().
[signal] void QSslServer::preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator)
QSslServer gibt dieses Signal aus, wenn „ socket “ eine PSK-Verschlüsselungssuite aushandelt, weshalb anschließend eine PSK-Authentifizierung erforderlich ist.
Bei Verwendung von PSK muss der Server eine gültige Identität und einen gültigen vorab geteilten Schlüssel 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 Anforderungen ausfüllen.
Hinweis: Wird dieses Signalignoriert oder werden die erforderlichen Anmeldedaten nicht bereitgestellt, schlägt der Handshake fehl und die Verbindung wird abgebrochen.
Hinweis: Das ` authenticator `-Objekt gehört dem ` 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 in dem Fall relevant, in dem ein Client – sei es böswillig oder versehentlich – eine Verbindung zum Server herstellt, jedoch keinen Versuch unternimmt, zu kommunizieren oder einen Handshake zu initiieren. „ QSslServer “ beendet die Verbindung dann automatisch, nachdem „ timeout “ Millisekunden verstrichen sind.
Standardmäßig beträgt das Timeout 5000 Millisekunden (5 Sekunden).
Hinweis: Das zugrunde liegende TLS-Framework verfügt möglicherweise bereits jetzt oder in Zukunft über eine eigene Timeout-Logik; diese Funktion hat darauf keinen Einfluss.
Hinweis: Der an diese Funktion übergebeneWert „ timeout “ gilt nur für neue Verbindungen. Ist ein Client bereits verbunden, wird das Timeout verwendet, das bei der Herstellung der Verbindung festgelegt wurde.
Siehe auch handshakeTimeout().
void QSslServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)
Legt die „ sslConfiguration “ fest, die für alle nachfolgenden eingehenden Verbindungen verwendet werden soll.
Dies muss vor dem Aufruf von ` listen()` erfolgen, 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 beim Feststellen der Identität des Gegenübers ein oder mehrere Fehler aufgetreten sind. Die Fehler deuten in der Regel darauf hin, dass socket den Gegenüber nicht sicher identifizieren kann. Sofern keine Maßnahmen ergriffen werden, wird die Verbindung nach Ausgabe dieses Signals getrennt.
Wenn Sie die Verbindung trotz der aufgetretenen Fehler fortsetzen möchten, müssen Sie ` QSslSocket::ignoreSslErrors()` innerhalb eines Slots aufrufen, der mit diesem Signal verbunden ist. 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 des Gegenübers zu überprüfen.
Hinweis: Sie können ` Qt::QueuedConnection ` nicht verwenden, wenn Sie eine Verbindung zu diesem Signal herstellen; andernfalls hat der Aufruf von ` QSslSocket::ignoreSslErrors()` keine Wirkung.
Siehe auch ` peerVerifyError()`.
[signal] void QSslServer::startedEncryptionHandshake(QSslSocket *socket)
Dieses Signal wird ausgesendet, wenn der mit socket verbundene Client den TLS-Handshake einleitet.
© 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.