class QSslServer#

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

Inheritance diagram of PySide6.QtNetwork.QSslServer

自版本 6.4 新增。

摘要#

方法#

信号#

注意

本文档可能包含从 C++ 自动翻译到 Python 的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译存在问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建问题来解决。

详细描述#

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

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

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

通过连接此类的信号来响应用户尝试建立连接。它们与 QSslSocket 上的信号相同,但还会传递相关套接字的指针。

在响应用户的 pendingConnectionAvailable() 信号时,请使用 nextPendingConnection() 函数来获取下一个传入连接,并从挂起的连接队列中取出它。QSslSocketQSslServer 的子类,并在删除 QSslServer 时被删除。尽管如此,在完成操作后,最好还是显式销毁对象,以避免内存浪费。

__init__([parent=None])#
参数:

parent - QObject

使用给定的 parent 构造一个新的 QSslServer

alertReceived(socket, level, type, description)#
参数:

QSslServer 当从对等体的 socket 接收到警报消息时,会发出此信号。 level 告诉警报是否是致命的或仅仅是警告。 type 是解释为什么发送警报的代码。当警报消息的文本描述可用时,它在 description 中提供。

注意

此信号主要用于信息提取和调试,不需要在应用程序中进行任何处理。如果警报是致命的,底层后台将处理它并关闭连接。

注意

并非所有后台都支持此功能。

另见

alertSent() AlertLevel AlertType

alertSent(socket, level, type, description)#
参数:

QSslServer 当从 socket 发送警报消息到对等体时,会发出此信号。 level 描述是否是警告或致命错误。 type 给出了警报消息的代码。当警报消息的文本描述可用时,它在 description 中提供。

注意

此信号主要用于信息提取,也可用于调试目的,通常不需要应用程序采取任何操作。

注意

并非所有后台都支持此功能。

另见

alertReceived() AlertLevel AlertType

errorOccurred(socket, error)#
参数:

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

如果在发送信号前套接字的手动协商尚未达到加密状态,那么套接字将在该信号发出后自动删除。但如果套接字成功加密,它将被插入到QSslServer的待连接队列中。当用户调用nextPendingConnection()时,销毁该套接字的职责是由用户承担的;如果不这样做,则该套接字将不会删除,直到QSslServer对象被销毁。如果套接字在插入待连接队列后发生错误,则不会发出该信号,该套接字也不会被删除或销毁。

注意

在连接到这个信号时不能使用Qt::QueuedConnection,否则当处理信号时,套接字可能已经被销毁。

另见

error() errorString()

handshakeInterruptedOnError(socket, error)#
参数:

QSslServer在发现由套接字引发的证书验证错误,并且在QSslConfiguration中启用了早期错误报告时发出此信号。应用程序应检查错误并决定是否要继续握手或取消握手并发送警报消息到对等方。信号-槽连接必须是直接的。

handshakeTimeout()#
返回类型:

int

返回当前配置的手动协商超时。

peerVerifyError(socket, error)#
参数:

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

此信号可以在出现问题时提供早期指示。通过连接到此信号,您可以在握手完成之前,在连接槽内部手动选择断开连接。如果未采取任何操作,QSslServer 将继续发出 sslErrors() 信号。

另见

sslErrors()

preSharedKeyAuthenticationRequired(socket, authenticator)#
参数:

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

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

注意

忽略此信号或未能提供所需的凭据将导致握手失败,因此连接将被中止。

注意

authenticator 对象归 socket 所有,并且应用程序不应删除它。

setHandshakeTimeout(timeout)#
参数:

timeout – int

将所有传入握手的超时设置为指定的 timeout 毫秒数。

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

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

注意

底层的 TLS 框架现在或未来可能有自己的超时逻辑,此函数不影响该逻辑。

注意

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

setSslConfiguration(sslConfiguration)#
参数:

sslConfigurationQSslConfiguration

将该sslConfiguration设置为用于所有后续传入连接。

必须在调用listen()之前调用此方法,以确保在所有握手过程中使用所需的配置。

sslConfiguration()#
返回类型:

QSslConfiguration

返回当前ssl配置。

sslErrors(socket, errors)#
参数:
  • socket - QSslSocket

  • errors – .list of QSslError

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

如果您要在发生错误的情况下继续连接,必须在连接到此信号的作用域内部调用ignoreSslErrors()。如果您需要稍后访问错误列表,可以调用sslHandshakeErrors()。

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

注意

连接到此信号时,不能使用Qt::QueuedConnection,否则调用ignoreSslErrors()将不会产生效果。

startedEncryptionHandshake(socket)#
参数:

socket - QSslSocket

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