QSslServer 类

通过 TLS (传输层安全) 实现加密的安全 TCP 服务器。 更多...

头: #include <QSslServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Since: Qt 6.4
继承: QTcpServer

公共函数

QSslServer (QObject * parent = nullptr)
virtual ~QSslServer () override
int handshakeTimeout () const
void setHandshakeTimeout (int timeout )
void setSslConfiguration (const QSslConfiguration & sslConfiguration )
QSslConfiguration sslConfiguration () const

信号

void alertReceived (QSslSocket * socket , QSsl::AlertLevel level , QSsl::AlertType type , const QString & 描述 )
void alertSent (QSslSocket * socket , QSsl::AlertLevel level , QSsl::AlertType type , const QString & 描述 )
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 )

重实现保护函数

virtual void incomingConnection (qintptr socket ) override

详细描述

Class to use in place of QTcpServer to implement TCP server using Transport Layer Security (TLS).

To configure the secure handshake settings, use the applicable setter functions on a QSslConfiguration object, and then use it as an argument to the setSslConfiguration () function. All following incoming connections handled will use these settings.

To start listening to incoming connections use the listen () function inherited from QTcpServer . Other settings can be configured by using the setter functions inherited from the QTcpServer 类。

Connect to the signals of this class to respond to the incoming connection attempts. They are the same as the signals on QSslSocket , but also passes a pointer to the socket in question.

When responding to the pendingConnectionAvailable () signal, use the nextPendingConnection () function to fetch the next incoming connection and take it out of the pending connection queue. The QSslSocket is a child of the QSslServer and will be deleted when the QSslServer is deleted. It is still a good idea to destroy the object explicitly when you are done with it, to avoid wasting memory.

另请参阅 QTcpServer , QSslConfiguration ,和 QSslSocket .

成员函数文档编制

[explicit] QSslServer:: QSslServer ( QObject * parent = nullptr)

构造新的 QSslServer 采用给定 parent .

[override virtual noexcept] QSslServer:: ~QSslServer ()

销毁 QSslServer .

所有打开的连接都关闭。

[signal] void QSslServer:: alertReceived ( QSslSocket * socket , QSsl::AlertLevel level , QSsl::AlertType type , const QString & 描述 )

QSslServer emits this signal if an alert message was received by the socket from a peer. level 告诉警报是致命的,还是警告。 type 是解释为什么发送警报的代码。当警报消息的文本描可用时,它的供给是在 description .

注意: The signal is mostly for informational and debugging purposes and does not require any handling in the application. If the alert was fatal, underlying backend will handle it and close the connection.

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

另请参阅 alertSent (), QSsl::AlertLevel ,和 QSsl::AlertType .

[signal] void QSslServer:: alertSent ( QSslSocket * socket , QSsl::AlertLevel level , QSsl::AlertType type , const QString & 描述 )

QSslServer emits this signal if an alert message was sent from socket to a peer. level 描述它是警告,还是致命错误。 type 给出警报消息代码。当警报消息的文本描述可用时,它的供给是在 description .

注意: 此信号主要是情报,且可以用于调试目的,通常,不要求来自应用程序的任何动作。

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

另请参阅 alertReceived (), QSsl::AlertLevel ,和 QSsl::AlertType .

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

This signal is emitted after an error occurred during handshake. The socketError 参数描述出现错误的类型。

The socket is automatically deleted after this signal is emitted if the socket handshake has not reached encrypted state. But if the socket is successfully encrypted, it is inserted into the QSslServer 's pending connections queue. When the user has called QTcpServer::nextPendingConnection () it is the user's responsibility to destroy the socketsocket will not be destroyed until the QSslServer object is destroyed. If an error occurs on a socket after it has been inserted into the pending connections queue, this signal will not be emitted, and the socket will not be removed or destroyed.

注意: 不可以使用 Qt::QueuedConnection when connecting to this signal, or the socket will have been already destroyed when the signal is handled.

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

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

QSslServer emits this signal if a certificate verification error was found by socket and if early error reporting was enabled in QSslConfiguration . An application is expected to inspect the error and decide if it wants to continue the handshake, or abort it and send an alert message to the peer. The signal-slot connection must be direct.

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

int QSslServer:: handshakeTimeout () const

Returns the currently configured handshake timeout.

另请参阅 setHandshakeTimeout ().

[override virtual protected] void QSslServer:: incomingConnection ( qintptr socket )

重实现: QTcpServer::incomingConnection (qintptr socketDescriptor).

被调用,当新连接建立时。

转换 socket QSslSocket .

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

QSslServer 可以在 SSL 握手期间多次发射此信号,在建立加密之前,以指示当建立对等方的标识时有发生错误。 error 通常指示 socket 无法安全标识对等方。

此信号为您提供早期指示,当事情出错时。通过连接到此信号,可以手动选择从连接槽内拆毁连接,在握手完成前。若不采取行动, QSslServer 将继续进行以发射 sslErrors ().

另请参阅 sslErrors ().

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

QSslServer emits this signal when socket negotiates a PSK ciphersuite, and therefore PSK authentication is then required.

When using PSK, the server must supply a valid identity and a valid pre shared key, in order for the SSL handshake to continue. Applications can provide this information in a slot connected to this signal, by filling in the passed authenticator 对象根据需要。

注意: 忽略此信号或未能提供要求证书,将导致握手失败,因此连接将被中止。

注意: The authenticator object is owned by the socket and must not be deleted by the application.

另请参阅 QSslPreSharedKeyAuthenticator .

void QSslServer:: setHandshakeTimeout ( int timeout )

设置 timeout to use for all incoming handshakes, in milliseconds.

This is relevant in the scenario where a client, whether malicious or accidental, connects to the server but makes no attempt at communicating or initiating a handshake. QSslServer will then automatically end the connection after timeout milliseconds have elapsed.

By default the timeout is 5000 milliseconds (5 seconds).

注意: The underlying TLS framework may have their own timeout logic now or in the future, this function does not affect that.

注意: The timeout passed to this function will only apply to new connections. If a client is already connected it will use the timeout which was set when it connected.

另请参阅 handshakeTimeout ().

void QSslServer:: setSslConfiguration (const QSslConfiguration & sslConfiguration )

设置 sslConfiguration to use for all following incoming connections.

This must be called before listen () to ensure that the desired configuration was in use during all handshakes.

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

QSslConfiguration QSslServer:: sslConfiguration () const

返回当前 SSL (安全套接字层) 配置。

另请参阅 setSslConfiguration ().

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

QSslServer 发射此信号在 SSL 握手之后以指示当建立对等方标识时有发生一个或多个错误。错误通常指示 socket 无法安全地识别对等方。除非采取任何行动,连接将被丢弃在此信号被发射之后。

If you want to continue connecting despite the errors that have occurred, you must call QSslSocket::ignoreSslErrors () from inside a slot connected to this signal. If you need to access the error list at a later point, you can call sslHandshakeErrors().

errors 包含一个或多个错误阻止 QSslSocket 验证对等方身份。

注意: 不可以使用 Qt::QueuedConnection 当连接到此信号时,或调用 QSslSocket::ignoreSslErrors () 没有起作用。

另请参阅 peerVerifyError ().

[signal] void QSslServer:: startedEncryptionHandshake ( QSslSocket * socket )

此信号发射,当客户端连接到 socket ,初启 TLS (传输层安全) 握手。