QSslServer Class
TLS를 통해 암호화된 보안 TCP 서버를 구현합니다. 더 보기...
Header: | #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) | |
virtual | ~QSslServer() override |
int | handshakeTimeout() const |
void | setHandshakeTimeout(int timeout) |
void | setSslConfiguration(const QSslConfiguration &sslConfiguration) |
QSslConfiguration | sslConfiguration() const |
Signals
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) override |
상세 설명
TLS(전송 계층 보안)를 사용하여 TCP 서버를 구현하기 위해 QTcpServer 대신 사용할 클래스입니다.
보안 핸드셰이크 설정을 구성하려면 QSslConfiguration 객체에서 해당 설정자 함수를 사용한 다음 setSslConfiguration() 함수에 대한 인수로 사용합니다. 이후 처리되는 모든 수신 연결은 이 설정을 사용합니다.
들어오는 연결 수신을 시작하려면 QTcpServer 에서 상속된 listen() 함수를 사용합니다. QTcpServer 클래스에서 상속된 세터 함수를 사용하여 다른 설정을 구성할 수 있습니다.
이 클래스의 신호에 연결하여 들어오는 연결 시도에 응답합니다. QSslSocket 의 신호와 동일하지만 해당 소켓에 대한 포인터도 전달합니다.
pendingConnectionAvailable() 신호에 응답할 때는 nextPendingConnection() 함수를 사용하여 다음 수신 연결을 가져와 보류 중인 연결 대기열에서 제거합니다. QSslSocket 는 QSslServer의 자식이며 QSslServer가 삭제될 때 삭제됩니다. 메모리 낭비를 피하기 위해 작업을 완료하면 개체를 명시적으로 삭제하는 것이 좋습니다.
QTcpServer, QSslConfiguration, QSslSocket 를참조하세요 .
멤버 함수 문서
[explicit]
QSslServer::QSslServer(QObject *parent = nullptr)
주어진 parent 을 사용하여 새 QSslServer를 구축합니다.
[override virtual noexcept]
QSslServer::~QSslServer()
QSslServer 을 삭제합니다.
열려 있는 모든 연결이 닫힙니다.
[signal]
void QSslServer::alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslServer 는 피어가 socket 으로부터 알림 메시지를 수신한 경우 이 신호를 보냅니다. level 은 알림이 치명적인지 또는 경고인지 알려줍니다. type 은 알림이 전송된 이유를 설명하는 코드입니다. 알림 메시지에 대한 텍스트 설명이 있는 경우 description 에 제공됩니다.
참고: 이 신호는 대부분 정보 제공 및 디버깅 목적으로 사용되며 애플리케이션에서 처리할 필요가 없습니다. 경고가 치명적인 경우 기본 백엔드에서 이를 처리하고 연결을 닫습니다.
참고: 모든 백엔드가 이 기능을 지원하는 것은 아닙니다.
alertSent(), QSsl::AlertLevel, QSsl::AlertType 를참조하세요 .
[signal]
void QSslServer::alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslServer 는 socket 에서 피어에게 경고 메시지를 보낸 경우 이 신호를 보냅니다. level 은 경고인지 치명적인 오류인지 설명합니다. type 은 경고 메시지의 코드를 제공합니다. 경고 메시지에 대한 텍스트 설명이 있는 경우 description 에 제공됩니다.
참고: 이 신호는 대부분 정보 제공용이며 디버깅 목적으로 사용할 수 있으며 일반적으로 애플리케이션에서 어떤 조치도 요구하지 않습니다.
참고: 모든 백엔드가 이 기능을 지원하는 것은 아닙니다.
alertReceived(), QSsl::AlertLevel, QSsl::AlertType 를참조하세요 .
[signal]
void QSslServer::errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError)
이 신호는 핸드셰이크 중 오류가 발생한 후에 전송됩니다. socketError 매개변수는 발생한 오류의 유형을 설명합니다.
소켓 핸드셰이크가 암호화된 상태에 도달하지 않은 경우 이 신호가 전송된 후 socket 는 자동으로 삭제됩니다. 그러나 socket 가 성공적으로 암호화되면 QSslServer 의 보류 중인 연결 대기열에 삽입됩니다. 사용자가 QTcpServer::nextPendingConnection()를 호출한 경우 socket 또는 socket 객체가 소멸될 때까지 QSslServer 객체가 소멸되지 않습니다. 보류 중인 연결 큐에 삽입된 후 socket 에서 오류가 발생하면 이 신호는 발생하지 않으며 socket 은 제거되거나 파괴되지 않습니다.
참고: 이 신호에 연결할 때 Qt::QueuedConnection 을 사용할 수 없으며, 신호가 처리될 때 socket 은 이미 삭제되었을 것입니다.
QSslSocket::error() 및 errorString()도 참조하세요 .
[signal]
void QSslServer::handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error)
QSslServer 는 socket 에서 인증서 확인 오류가 발견되고 QSslConfiguration 에서 조기 오류 보고가 활성화된 경우 이 신호를 보냅니다. 애플리케이션은 error 를 검사하여 핸드셰이크를 계속할지 아니면 중단하고 피어에게 경고 메시지를 보낼지 결정해야 합니다. 신호 슬롯 연결은 직접 연결해야 합니다.
QSslSocket::continueInterruptedHandshake(), sslErrors() 및 QSslConfiguration::setHandshakeMustInterruptOnError()도 참조하세요 .
int QSslServer::handshakeTimeout() const
현재 구성된 핸드셰이크 타임아웃을 반환합니다.
setHandshakeTimeout()도 참조하세요 .
[override virtual protected]
void QSslServer::incomingConnection(qintptr socket)
재구현합니다: QTcpServer::incomingConnection(qintptr 소켓 설명자).
새 연결이 설정될 때 호출됩니다.
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 는 socket 가 PSK 암호 스위트를 협상할 때 이 신호를 보내므로 PSK 인증이 필요합니다.
PSK를 사용할 때 SSL 핸드셰이크를 계속하려면 서버가 유효한 ID와 유효한 사전 공유 키를 제공해야 합니다. 애플리케이션은 필요에 따라 전달된 authenticator 객체를 채워 이 신호에 연결된 슬롯에 이 정보를 제공할 수 있습니다.
참고: 이 신호를 무시하거나 필요한 자격 증명을 제공하지 않으면 핸드셰이크가 실패하여 연결이 중단됩니다.
참고: authenticator 객체는 socket 소유이므로 애플리케이션에서 삭제해서는 안 됩니다.
QSslPreSharedKeyAuthenticator도 참조하세요 .
void QSslServer::setHandshakeTimeout(int timeout)
들어오는 모든 핸드셰이크에 사용할 timeout 을 밀리초 단위로 설정합니다.
이는 악의적이든 실수든 클라이언트가 서버에 연결했지만 통신을 시도하거나 핸드셰이크를 시작하지 않는 시나리오에 적합합니다. 그러면 timeout 밀리초가 경과한 후 QSslServer 연결이 자동으로 종료됩니다.
기본적으로 시간 제한은 5000밀리초(5초)입니다.
참고: 기본 TLS 프레임워크에는 현재 또는 향후 자체 시간 초과 로직이 있을 수 있으며, 이 함수는 이에 영향을 미치지 않습니다.
참고: 이 함수에 전달된 timeout 은 새 연결에만 적용됩니다. 클라이언트가 이미 연결되어 있는 경우에는 연결할 때 설정된 시간 제한이 사용됩니다.
handshakeTimeout()도 참조하세요 .
void QSslServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)
다음의 모든 수신 연결에 사용할 sslConfiguration 을 설정합니다.
모든 핸드셰이크 중에 원하는 구성이 사용되도록 하려면 listen() 전에 호출해야 합니다.
sslConfiguration() 및 QSslSocket::setSslConfiguration()도 참조하세요 .
QSslConfiguration QSslServer::sslConfiguration() const
현재 SSL 구성을 반환합니다.
setSslConfiguration()도 참조하세요 .
[signal]
void QSslServer::sslErrors(QSslSocket *socket, const QList<QSslError> &errors)
QSslServer 는 SSL 핸드셰이크 후 이 신호를 전송하여 상대방의 신원을 확인하는 동안 하나 이상의 오류가 발생했음을 나타냅니다. 오류는 일반적으로 socket 에서 피어를 안전하게 식별할 수 없음을 나타냅니다. 아무런 조치를 취하지 않으면 이 신호가 전송된 후 연결이 끊어집니다.
오류가 발생했음에도 불구하고 연결을 계속하려면 이 신호에 연결된 슬롯 내부에서 QSslSocket::ignoreSslErrors()를 호출해야 합니다. 나중에 오류 목록에 액세스해야 하는 경우 sslHandshakeErrors()를 호출할 수 있습니다.
errors 에 하나 이상의 오류가 포함되어 있어 QSslSocket 에서 피어의 신원을 확인하지 못합니다.
참고: 이 신호에 연결할 때 Qt::QueuedConnection 을 사용할 수 없으며 QSslSocket::ignoreSslErrors()을 호출해도 효과가 없습니다.
peerVerifyError()도 참조하세요 .
[signal]
void QSslServer::startedEncryptionHandshake(QSslSocket *socket)
이 신호는 socket 에 연결된 클라이언트가 TLS 핸드셰이크를 시작할 때 전송됩니다.
© 2025 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.