QSslServer类
实现了基于TLS的加密、安全TCP服务器。 更多信息...
头文件 | #include <QSslServer> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake | QT += network |
自从 | Qt 6.4 |
继承 | QTcpServer |
- 所有成员的列表,包括继承的成员
- QSslServer是网络编程API的一部分。
公开函数
QSslServer(QObject *parent = nullptr) | |
虚 | ~QSslServer() 覆盖 |
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 &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) |
重实现的保护函数
virtual void | incomingConnection(qintptr socket) 覆盖 |
详细说明
用于替代QTcpServer来实现使用传输层安全性(TLS)的TCP服务器的类。
要配置安全握手设置,请使用QSslConfiguration对象的相应setter函数,然后将它作为setSslConfiguration()函数的参数。之后处理的所有传入连接都将使用这些设置。
要开始监听传入的连接,请使用从QTcpServer继承的listen()
函数。其他设置可以通过从QTcpServer类继承的Setter函数进行配置。
通过连接此类信号来响应传入的连接尝试。它们与QSslSocket上的信号相同,但还传递了有关 связи указ的指针。
当响应pendingConnectionAvailable()信号时,使用nextPendingConnection()函数获取下一个传入的连接并将其从挂起连接队列中取出。QSslSocket是QSslServer的子类,当QSslServer被删除时将会被删除。仍然建议您在使用完毕后显式销毁对象,以避免内存浪费。
另请参阅QTcpServer、QSslConfiguration和QSslSocket。
成员函数文档
[显式]
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::AlertLevel和QSsl::AlertType。
[信号]
void QSslServer::alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslServer在从socket向对等方发送报警信息时发出此信号。《level》_描述它是警告还是致命错误。《type》_提供报警信息的代码。当可用文本描述报警信息时,它将包含在_description_中。
注意:此信号主要用于信息和调试目的,可用于调试,通常不需要应用程序进行任何操作。
注意:并非所有后端都支持此功能。
另请参阅alertReceived()、QSsl::AlertLevel和QSsl::AlertType。
[信号]
void QSslServer::errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError)
此信号在握手过程中发生错误后发出。参数socketError描述了发生的错误类型。
如果socket握手未达到加密状态,则在发出此信号后,将自动删除socket。但如果socket成功加密,则将其插入到QSslServer的挂起连接队列中。当用户调用QTcpServer::nextPendingConnection() 时,有责任销毁socket或QSslServer对象将被销毁之前不会销毁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. 的商标。所有其他商标均为各自所有者的财产。