QSslServer类

实现了基于TLS的加密、安全TCP服务器。 更多信息...

头文件 #include <QSslServer>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network
自从Qt 6.4
继承 QTcpServer

公开函数

QSslServer(QObject *parent = nullptr)
~QSslServer() 覆盖
inthandshakeTimeout() const
voidsetHandshakeTimeout(int timeout)
voidsetSslConfiguration(const QSslConfiguration &sslConfiguration)
QSslConfigurationsslConfiguration() const

信号

voidalertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
voidalertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
voiderrorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError)
voidhandshakeInterruptedOnError(QSslSocket *socket, const QSslError &error)
voidpeerVerifyError(QSslSocket *socket, const QSslError &error)
voidpreSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator)
voidsslErrors(QSslSocket *socket, const QList<QSslError> &errors)
voidstartedEncryptionHandshake(QSslSocket *socket)

重实现的保护函数

virtual voidincomingConnection(qintptr socket) 覆盖

详细说明

用于替代QTcpServer来实现使用传输层安全性(TLS)的TCP服务器的类。

要配置安全握手设置,请使用QSslConfiguration对象的相应setter函数,然后将它作为setSslConfiguration()函数的参数。之后处理的所有传入连接都将使用这些设置。

要开始监听传入的连接,请使用从QTcpServer继承的listen()函数。其他设置可以通过从QTcpServer类继承的Setter函数进行配置。

通过连接此类信号来响应传入的连接尝试。它们与QSslSocket上的信号相同,但还传递了有关 связи указ的指针。

当响应pendingConnectionAvailable()信号时,使用nextPendingConnection()函数获取下一个传入的连接并将其从挂起连接队列中取出。QSslSocket是QSslServer的子类,当QSslServer被删除时将会被删除。仍然建议您在使用完毕后显式销毁对象,以避免内存浪费。

另请参阅QTcpServerQSslConfigurationQSslSocket

成员函数文档

[显式] QSslServer::QSslServer(QObject *parent = nullptr)

使用给定的parent构建一个新的QSslServer。

[覆盖虚函数,无异常] QSslServer::~QSslServer()

销毁QSslServer。

所有打开的连接都将被关闭。

[信号] void QSslServer::alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)

QSslServer在从对等方接收报警信息时发出此信号。_level_指示报警是致命的还是警告。_type_是解释发送报警原因的代码。当用户可用报警信息的文本描述时,它将包含在_description_中。

注意:此信号主要用于信息和调试目的,并且不需要应用程序进行处理。如果报警是致命的,底层后端将处理它并关闭连接。

注意:并非所有后端都支持此功能。

另请参阅alertSent()、QSsl::AlertLevelQSsl::AlertType

[信号] void QSslServer::alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)

QSslServer在从socket向对等方发送报警信息时发出此信号。《level》_描述它是警告还是致命错误。《type》_提供报警信息的代码。当可用文本描述报警信息时,它将包含在_description_中。

注意:此信号主要用于信息和调试目的,可用于调试,通常不需要应用程序进行任何操作。

注意:并非所有后端都支持此功能。

另请参阅alertReceived()、QSsl::AlertLevelQSsl::AlertType

[信号] void QSslServer::errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError)

此信号在握手过程中发生错误后发出。参数socketError描述了发生的错误类型。

如果socket握手未达到加密状态,则在发出此信号后,将自动删除socket。但如果socket成功加密,则将其插入到QSslServer的挂起连接队列中。当用户调用QTcpServer::nextPendingConnection() 时,有责任销毁socketQSslServer对象将被销毁之前不会销毁socket。如果在挂起连接队列中的socket上发生错误,则不会发出此信号,并且不会删除或销毁socket

注意:在连接到此信号时不能使用Qt::QueuedConnection,否则在处理信号时,socket可能已经被销毁。

另请参阅:QSslSocket::error() 和 errorString

[信号] void QSslServer::handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error)

QSslServer发出此信号,如果socket发现证书验证错误,并且QSslConfiguration中启用了早期错误报告。应用程序应检查error并决定是否继续握手或中断它并发送警告消息到对等端。信号槽连接必须是直接的。

另请参阅:QSslSocket::continueInterruptedHandshake()、sslErrors() 和 QSslConfiguration::setHandshakeMustInterruptOnError

int QSslServer::handshakeTimeout() const

返回当前配置的握手超时时间。

另请参阅:setHandshakeTimeout

[重载虚受保护] void QSslServer::incomingConnection(qintptr socket)

重新实现了:QTcpServer::incomingConnection(qintptr socketDescriptor)。

当建立一个新连接时调用。

socket转换为QSslSocket

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

QSslServer 可以在建立加密之前在 SSL 握手过程中多次发出此信号,以指示在建立对等方身份时发生错误。此 错误 通常表明 套接字 无法安全地识别对等方。

此信号可让您在出现问题早期就得到提示。通过连接到此信号,您可以在握手完成之前手动选择断开已连接槽的连接。如果未采取任何行动,QSslServer 将继续发出 sslErrors()。

另请参阅sslErrors

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

socket 协商 PSK 加密套件时,QSslServer 将发出此信号,因此需要 PSK 身份验证。

使用 PSK 时,服务器必须提供一个有效的身份和一个有效的预共享密钥,以便 SSL 握手可以继续。应用程序可以通过连接到此信号的槽来提供此信息,根据需要填充传入的 authenticator 对象。

注意:忽略此信号或未能提供所需的证书,将导致握手失败,从而终止连接。

注意: authenticator 对象由 socket 所拥有,并且应用程序不得删除。

另请参阅QSslPreSharedKeyAuthenticator

void QSslServer::setHandshakeTimeout(int timeout)

将超时设置用于所有进入的握手中的超时,以毫秒为单位。

在客户端(无论是恶意还是意外)连接到服务器但未尝试通信或发起握手的情况下,这很相关。在此之后,QSslServer 将在经过 timeout 毫秒后自动结束连接。

默认超时为 5000 毫秒(5 秒)。

注意:底层 TLS 框架现在或将来可能会有它们自己的超时逻辑,此函数不会影响该逻辑。

注意:传递给此函数的超时仅适用于 新的 连接。如果客户端已经连接,则将使用连接时设置的超时。

另请参阅handshakeTimeout

void QSslServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)

设置后续进入连接要使用的 sslConfiguration

必须在 listen() 调用之前调用此函数,以确保在整个握手过程中正在使用所需的配置。

另请参阅sslConfiguration() 和 QSslSocket::setSslConfiguration

QSslConfiguration QSslServer::sslConfiguration() const

返回当前 SSL 配置。

另请参阅setSslConfiguration

[信号] void QSslServer::sslErrors(QSslSocket *socket, const QList<QSslError> &errors)

QSslServer在SSL握手后发出此信号,表示在建立对等实体身份时发生了一个或多个错误。这些错误通常表明socket无法安全地识别对等实体。除非采取任何操作,否则将在发出此信号后断开连接。

如果您想要继续连接,尽管发生了错误,您必须从连接到此信号的槽内部调用QSslSocket::ignoreSslErrors()。如果您需要在稍后的某个时间点访问错误列表,可以调用sslHandshakeErrors()。

errors包含一个或多个错误,阻止QSslSocket验证对等实体的身份。

注意:在连接到此信号时,您不能使用Qt::QueuedConnection,否则调用QSslSocket::ignoreSslErrors()将没有任何效果。

另请参阅:peerVerifyError

[信号] void QSslServer::startedEncryptionHandshake(QSslSocket *socket)

当连接到socket的客户端开始TLS握手时,将发出此信号。

© 2024 Qt Company Ltd. 此处包含的文档贡献是各自所有者的版权。提供的文档受GNU自由文档许可证版本1.3的条款约束,由自由软件基金会发布。Qt及其相关标识为芬兰及/或世界其他国家的Qt Company Ltd. 的商标。所有其他商标均为各自所有者的财产。