이 페이지에서

QSslSocket Class

QSslSocket 클래스는 클라이언트와 서버 모두에 SSL 암호화 소켓을 제공합니다. 더 보기...

헤더: #include <QSslSocket>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
상속: QTcpSocket

참고: 이 클래스의 모든 함수는 재진입 가능합니다.

공개 유형

enum PeerVerifyMode { VerifyNone, QueryPeer, VerifyPeer, AutoVerifyPeer }
enum SslMode { UnencryptedMode, SslClientMode, SslServerMode }

공개 함수

QSslSocket(QObject *parent = nullptr)
virtual ~QSslSocket()
void connectToHostEncrypted(const QString &hostName, quint16 port, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
void connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
(since 6.0) void continueInterruptedHandshake()
qint64 encryptedBytesAvailable() const
qint64 encryptedBytesToWrite() const
void ignoreSslErrors(const QList<QSslError> &errors)
bool isEncrypted() const
QSslCertificate localCertificate() const
QList<QSslCertificate> localCertificateChain() const
QSslSocket::SslMode mode() const
QList<QOcspResponse> ocspResponses() const
QSslCertificate peerCertificate() const
QList<QSslCertificate> peerCertificateChain() const
int peerVerifyDepth() const
QSslSocket::PeerVerifyMode peerVerifyMode() const
QString peerVerifyName() const
QSslKey privateKey() const
QSsl::SslProtocol protocol() const
QSslCipher sessionCipher() const
QSsl::SslProtocol sessionProtocol() const
void setLocalCertificate(const QSslCertificate &certificate)
void setLocalCertificate(const QString &path, QSsl::EncodingFormat format = QSsl::Pem)
void setLocalCertificateChain(const QList<QSslCertificate> &localChain)
void setPeerVerifyDepth(int depth)
void setPeerVerifyMode(QSslSocket::PeerVerifyMode mode)
void setPeerVerifyName(const QString &hostName)
void setPrivateKey(const QSslKey &key)
void setPrivateKey(const QString &fileName, QSsl::KeyAlgorithm algorithm = QSsl::Rsa, QSsl::EncodingFormat format = QSsl::Pem, const QByteArray &passPhrase = QByteArray())
void setProtocol(QSsl::SslProtocol protocol)
void setSslConfiguration(const QSslConfiguration &configuration)
QSslConfiguration sslConfiguration() const
QList<QSslError> sslHandshakeErrors() const
bool waitForEncrypted(int msecs = 30000)

재구현된 공용 함수

virtual bool atEnd() const override
virtual qint64 bytesAvailable() const override
virtual qint64 bytesToWrite() const override
virtual bool canReadLine() const override
virtual void close() override
virtual void connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol) override
virtual void disconnectFromHost() override
virtual void resume() override
virtual void setReadBufferSize(qint64 size) override
virtual bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite) override
virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) override
virtual QVariant socketOption(QAbstractSocket::SocketOption option) override
virtual bool waitForBytesWritten(int msecs = 30000) override
virtual bool waitForConnected(int msecs = 30000) override
virtual bool waitForDisconnected(int msecs = 30000) override
virtual bool waitForReadyRead(int msecs = 30000) override

공개 슬롯

신호

void alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
void alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
void encrypted()
void encryptedBytesWritten(qint64 written)
void handshakeInterruptedOnError(const QSslError &error)
void modeChanged(QSslSocket::SslMode mode)
void newSessionTicketReceived()
void peerVerifyError(const QSslError &error)
void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
void sslErrors(const QList<QSslError> &errors)

정적 공용 멤버

(since 6.1) QString activeBackend()
(since 6.1) QList<QString> availableBackends()
(since 6.1) QList<QSsl::ImplementedClass> implementedClasses(const QString &backendName = {})
(since 6.1) bool isClassImplemented(QSsl::ImplementedClass cl, const QString &backendName = {})
(since 6.1) bool isFeatureSupported(QSsl::SupportedFeature ft, const QString &backendName = {})
(since 6.1) bool isProtocolSupported(QSsl::SslProtocol protocol, const QString &backendName = {})
(since 6.1) bool setActiveBackend(const QString &backendName)
long sslLibraryBuildVersionNumber()
QString sslLibraryBuildVersionString()
long sslLibraryVersionNumber()
QString sslLibraryVersionString()
(since 6.1) QList<QSsl::SupportedFeature> supportedFeatures(const QString &backendName = {})
(since 6.1) QList<QSsl::SslProtocol> supportedProtocols(const QString &backendName = {})
bool supportsSsl()

재구현된 보호된 함수

virtual qint64 readData(char *data, qint64 maxlen) override
virtual qint64 skipData(qint64 maxSize) override
virtual qint64 writeData(const char *data, qint64 len) override
(since 6.0) enum class AlertLevel { Warning, Fatal, Unknown }
(since 6.0) enum class AlertType { CloseNotify, UnexpectedMessage, BadRecordMac, RecordOverflow, DecompressionFailure, …, UnknownAlertMessage }
(since 6.1) enum class ImplementedClass { Key, Certificate, Socket, DiffieHellman, EllipticCurve, …, DtlsCookie }
(since 6.1) enum class SupportedFeature { CertificateVerification, ClientSideAlpn, ServerSideAlpn, Ocsp, Psk, …, Alerts }

상세 설명

QSslSocket은 암호화된 데이터를 전송하는 데 사용할 수 있는 안전하고 암호화된 TCP 연결을 설정합니다. 이 클래스는 클라이언트 및 서버 모드 모두에서 작동할 수 있으며, TLS 1.3을 포함한 최신 TLS 프로토콜을 지원합니다. 기본적으로 QSslSocket은 안전한 것으로 간주되는 TLS 프로토콜(QSsl::SecureProtocols)만 사용하지만, 핸드셰이크가 시작되기 전이라면 setProtocol()를 호출하여 TLS 프로토콜을 변경할 수 있습니다.

SSL 암호화는 소켓이 ConnectedState 상태가 된 후 기존 TCP 스트림 위에서 작동합니다. QSslSocket을 사용하여 보안 연결을 설정하는 간단한 방법은 두 가지가 있습니다. 즉시 SSL 핸드셰이크를 수행하는 방법과, 암호화되지 않은 모드로 연결이 설정된 후 지연된 SSL 핸드셰이크를 수행하는 방법입니다.

QSslSocket을 사용하는 가장 일반적인 방법은 객체를 생성하고 connectToHostEncrypted()를 호출하여 보안 연결을 시작하는 것입니다. 이 방법은 연결이 설정되는 즉시 SSL 핸드셰이크를 시작합니다.

QSslSocket *socket = new QSslSocket(this);
connect(socket, &QSslSocket::encrypted, this, &Receiver::ready);

socket->connectToHostEncrypted("imap.example.com", 993);

일반 QTcpSocket 와 마찬가지로, QSslSocket은 연결이 성공하면 HostLookupState, ConnectingState를 거쳐 최종적으로 ConnectedState로 진입합니다. 그러면 핸드셰이크가 자동으로 시작되며, 성공하면 encrypted() 신호가 발생하여 소켓이 암호화 상태로 진입했고 사용 준비가 되었음을 나타냅니다.

connectToHostEncrypted() 함수에서 반환된 직후(즉, encrypted() 신호가 발신되기 전)에도 소켓에 데이터를 쓸 수 있다는 점에 유의하십시오. 이 데이터는 encrypted() 신호가 발신될 때까지 QSslSocket에 대기열로 쌓입니다.

기존 연결을 보호하기 위해 지연된 SSL 핸드셰이크를 사용하는 예로는, SSL 서버가 들어오는 연결을 보호하는 경우가 있습니다. QTcpServer 의 서브클래스로 SSL 서버 클래스를 생성한다고 가정해 봅시다. QTcpServer::incomingConnection() 메서드를 아래 예시와 같이 재정의하면 됩니다. 이 예시에서는 먼저 QSslSocket 인스턴스를 생성한 다음, setSocketDescriptor()를 호출하여 새 소켓의 디스크립터를 전달된 기존 디스크립터로 설정합니다. 그런 다음 startServerEncryption()를 호출하여 SSL 핸드셰이크를 시작합니다.

void SslServer::incomingConnection(qintptr socketDescriptor)
{
    QSslSocket *serverSocket = new QSslSocket;
    if (serverSocket->setSocketDescriptor(socketDescriptor)) {
        addPendingConnection(serverSocket);
        connect(serverSocket, &QSslSocket::encrypted, this, &SslServer::ready);
        serverSocket->startServerEncryption();
    } else {
        delete serverSocket;
    }
}

오류가 발생하면 QSslSocket은 sslErrors() 신호를 발생시킵니다. 이 경우, 오류를 무시하기 위한 조치가 취해지지 않으면 연결이 끊어집니다. 오류가 발생했음에도 불구하고 계속 진행하려면, 오류 발생 후 이 슬롯 내에서, 또는 QSslSocket 생성 후 연결 시도가 이루어지기 전 언제든지 ignoreSslErrors()를 호출할 수 있습니다. 이렇게 하면 QSslSocket이 피어의 신원을 확인하는 과정에서 발생하는 오류를 무시할 수 있습니다. 보안 연결의 근본적인 특징은 성공적인 핸드셰이크를 통해 설정되어야 한다는 점이기 때문에, SSL 핸드셰이크 중 오류를 무시하는 기능은 신중하게 사용해야 합니다.

암호화가 완료되면 QSslSocket을 일반 QTcpSocket 처럼 사용할 수 있습니다. readyRead()이 호출되면, read(), canReadLine() 및 readLine() 또는 getChar()를 호출하여 QSslSocket의 내부 버퍼에서 복호화된 데이터를 읽을 수 있으며, write() 또는 putChar()를 호출하여 피어에게 데이터를 다시 쓸 수 있습니다. QSslSocket은 작성된 데이터를 자동으로 암호화하며, 데이터가 상대방에게 전송되면 encryptedBytesWritten()를 호출합니다.

사용 편의성을 위해 QSslSocket은 QTcpSocket 의 차단 함수인 waitForConnected(), waitForReadyRead(), waitForBytesWritten() 및 waitForDisconnected()을 지원합니다. 또한, 암호화된 연결이 설정될 때까지 호출 스레드를 차단하는 waitForEncrypted()도 제공합니다.

QSslSocket socket;
socket.connectToHostEncrypted("http.example.com", 443);
if (!socket.waitForEncrypted()) {
    qDebug() << socket.errorString();
   return false;
}

socket.write("GET / HTTP/1.0\r\n\r\n");
while (socket.waitForReadyRead())
    qDebug() << socket.readAll().data();

QSslSocket은 암호화 알고리즘, 개인 키, 로컬 인증서, 상대방 인증서 및 인증 기관(CA) 인증서를 처리하기 위한 포괄적이고 사용하기 쉬운 API를 제공합니다. 또한 핸드셰이크 단계에서 발생하는 오류를 처리하기 위한 API도 제공합니다.

다음과 같은 기능도 사용자 정의할 수 있습니다:

SSL 핸드셰이크 중에 SSL 소켓이 사용하는 기본 CA 인증서 목록을 확장하려면 아래 코드 조각과 같이 기본 구성을 업데이트해야 합니다:

QList<QSslCertificate> certificates = getCertificates();
QSslConfiguration configuration = QSslConfiguration::defaultConfiguration();
configuration.addCaCertificates(certificates);
QSslConfiguration::setDefaultConfiguration(configuration);

참고: 사용 가능한경우 , 유닉스(macOS 제외)의 루트 인증서는 표준 인증서 디렉터리에서 필요에 따라 로드됩니다. 루트 인증서를 필요에 따라 로드하지 않으려면, 애플리케이션에서 첫 번째 SSL 핸드셰이크가 이루어지기 전에 QSslConfiguration::defaultConfiguration()의 setCaCertificates()를 호출하거나 (예: QSslSocket::systemCaCertificates()를 전달하는 방식)를 호출하거나, SSL 핸드셰이크 전에 QSslSocket 인스턴스에서 QSslConfiguration::defaultConfiguration::setCaCertificates()를 호출해야 합니다.

암호 및 인증서에 대한 자세한 내용은 QSslCipher 및 QSslCertificate 을 참조하십시오.

이 제품에는 OpenSSL 툴킷(http://www.openssl.org/)에서 사용하기 위해 OpenSSL 프로젝트에서 개발한 소프트웨어가 포함되어 있습니다.

참고: bytesWritten() 신호와 encryptedBytesWritten() 신호의 차이점을유의하십시오 . QTcpSocket 의 경우, 데이터가 TCP 소켓에 기록되는 즉시 bytesWritten() 신호가 발생합니다. QSslSocket의 경우, 데이터가 암호화될 때 bytesWritten() 신호가 발생하고, 데이터가 TCP 소켓에 기록되는 즉시 encryptedBytesWritten() 신호가 발생합니다.

QSslCertificate, QSslCipher 및 QSslError도 참조하십시오 .

멤버 유형 문서

enum QSslSocket::PeerVerifyMode

QSslSocket 의 피어 검증 모드에 대해 설명합니다. 기본 모드는 AutoVerifyPeer이며, 이 모드는 소켓의 QSocket::SslMode에 따라 적절한 모드를 선택합니다.

상수값설명
QSslSocket::VerifyNone0QSslSocket 피어에게 인증서를 요청하지 않습니다. 연결 상대방의 신원에 관심이 없는 경우 이 모드를 설정할 수 있습니다. 연결은 여전히 암호화되며, 요청이 있을 경우 소켓은 여전히 로컬 인증서를 피어에게 전송합니다.
QSslSocket::QueryPeer1QSslSocket 상대방에게 인증서를 요청하지만, 해당 인증서가 유효할 필요는 없습니다. 이는 실제 SSL 핸드셰이크에 영향을 주지 않으면서 사용자에게 상대방 인증서 세부 정보를 표시하고자 할 때 유용합니다. 이 모드는 서버의 기본값입니다. 참고: Schannel에서 이 값은 VerifyNone과 동일하게 작동합니다.
QSslSocket::VerifyPeer2QSslSocket SSL 핸드셰이크 단계에서 피어에게 인증서를 요청하며, 이 인증서가 유효해야 합니다. 실패 시, ` QSslSocket `는 ` QSslSocket::sslErrors()` 신호를 발생시킵니다. 이 모드는 클라이언트의 기본값입니다.
QSslSocket::AutoVerifyPeer3QSslSocket 서버 소켓에는 QueryPeer를, 클라이언트 소켓에는 VerifyPeer를 자동으로 사용합니다.

QSslSocket::peerVerifyMode()항목도 참조하십시오 .

enum QSslSocket::SslMode

QSslSocket 에서 사용할 수 있는 연결 모드에 대해 설명합니다.

상수값설명
QSslSocket::UnencryptedMode0소켓은 암호화되지 않습니다. 동작 방식은 QTcpSocket 와 동일합니다.
QSslSocket::SslClientMode1소켓은 클라이언트 측 SSL 소켓입니다. 이미 암호화되어 있거나 SSL 핸드셰이크 단계에 있습니다( QSslSocket::isEncrypted() 참조).
QSslSocket::SslServerMode2소켓은 서버 측 SSL 소켓입니다. 이미 암호화되었거나, SSL 핸드셰이크 단계에 있습니다( QSslSocket::isEncrypted() 참조).

멤버 함수 문서

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

QSslSocket 객체를 생성합니다. ` parent `가 ` QObject`의 생성자에 전달됩니다. 새 소켓의 ` cipher ` 모음은 정적 메서드 `defaultCiphers()`가 반환하는 값으로 설정됩니다.

[virtual noexcept] QSslSocket::~QSslSocket()

QSslSocket 를 삭제합니다.

[static, since 6.1] QString QSslSocket::activeBackend()

QSslSocket 및 관련 클래스에서 사용하는 백엔드의 이름을 반환합니다. 활성 백엔드가 명시적으로 설정되지 않은 경우, 이 함수는 QSslSocket 가 사용 가능한 백엔드 목록에서 암시적으로 선택한 기본 백엔드의 이름을 반환합니다.

참고: 기본 백엔드를 암시적으로 선택할때 , QSslSocket 는 사용 가능한 경우 OpenSSL 백엔드를 우선적으로 선택합니다. 사용 가능한 경우, Windows에서는 Schannel 백엔드가, Darwin 플랫폼에서는 Secure Transport가 암시적으로 선택됩니다. 이들 모두 해당되지 않을 경우, 사용자 정의 TLS 백엔드가 발견되면 해당 백엔드가 사용됩니다. 다른 백엔드가 발견되지 않으면 "인증서 전용" 백엔드가 선택됩니다. TLS 플러그인에 대한 자세한 내용은 소스에서 Qt를 빌드할 때 SSL 지원 활성화 및 비활성화를 참조하십시오.

이 함수는 Qt 6.1에서 도입되었습니다.

setActiveBackend() 및 availableBackends()도 참조하십시오 .

[signal] void QSslSocket::alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)

QSslSocket 피어로부터 경고 메시지가 수신되면 이 신호를 발송합니다. ` level `는 경고가 치명적인 오류인지, 아니면 경고인지 여부를 나타냅니다. ` type `는 경고가 전송된 이유를 설명하는 코드입니다. 경고 메시지에 대한 텍스트 설명이 있는 경우, 이는 ` description`에 제공됩니다.

참고: 이 신호는 주로 정보 제공 및 디버깅 목적으로 사용되며, 애플리케이션에서 별도로 처리할 필요가 없습니다. 경보가 치명적인 경우, 기본 백엔드가 이를 처리하고 연결을 종료합니다.

참고: 모든 백엔드가 이 기능을 지원하는 것은아닙니다 .

관련 항목: alertSent(), QSsl::AlertLevel 및 QSsl::AlertType.

[signal] void QSslSocket::alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)

QSslSocket 피어에게 경고 메시지가 전송된 경우 이 신호를 발생시킵니다. ` level `는 경고인지 치명적인 오류인지 여부를 나타냅니다. ` type `는 경고 메시지의 코드를 반환합니다. 경고 메시지에 대한 텍스트 설명이 있는 경우, ` description`를 통해 제공됩니다.

참고: 이 신호는 주로 정보 제공용이며 디버깅 목적으로 사용될 수 있지만, 일반적으로 애플리케이션 측에서 별도의 조치를 취할 필요는 없습니다.

참고: 모든 백엔드가 이 기능을 지원하는 것은아닙니다 .

관련 항목: alertReceived(), QSsl::AlertLevel 및 QSsl::AlertType.

[override virtual] bool QSslSocket::atEnd() const

QIODevice::atEnd() const를 재구현합니다.

[static, since 6.1] QList<QString> QSslSocket::availableBackends()

현재 사용 가능한 백엔드의 이름을 반환합니다. 이 이름들은 소문자로 표기되며, 예를 들어 "openssl", "securetransport", "schannel" 등이 있습니다(Qt의 TLS 백엔드에 대해 이미 존재하는 기능 이름과 유사합니다).

이 함수는 Qt 6.1에서 도입되었습니다.

activeBackend()도 참조하십시오 .

[override virtual] qint64 QSslSocket::bytesAvailable() const

QAbstractSocket::bytesAvailable() const를 재구현합니다.

즉시 읽을 수 있는 복호화된 바이트의 수를 반환합니다.

[override virtual] qint64 QSslSocket::bytesToWrite() const

QAbstractSocket::bytesToWrite() const를 재구현합니다.

암호화되어 네트워크로 전송될 때까지 대기 중인 암호화되지 않은 바이트의 개수를 반환합니다.

[override virtual] bool QSslSocket::canReadLine() const

QIODevice::canReadLine() const를 재구현합니다.

복호화된 문자로 구성된 한 줄(단일 ASCII '\n' 문자로 끝나는)을 읽을 수 있는 경우 true 를 반환하고, 그렇지 않은 경우 false를 반환합니다.

[override virtual] void QSslSocket::close()

QAbstractSocket::close()을 재구현합니다.

[override virtual] void QSslSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)

QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode, QAbstractSocket::NetworkLayerProtocol protocol)을 재구현합니다.

void QSslSocket::connectToHostEncrypted(const QString &hostName, quint16 port, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)

mode 를 OpenMode 으로 사용하여, port 에 있는 장치 hostName 와의 암호화된 연결을 시작합니다. 이는 connectToHost()를 호출하여 연결을 설정한 후, startClientEncryption()를 호출하는 것과 동일합니다. protocol 매개변수를 사용하여 사용할 네트워크 프로토콜(예: IPv4 또는 IPv6)을 지정할 수 있습니다.

QSslSocket 먼저 HostLookupState로 진입합니다. 그런 다음 이벤트 루프나 waitFor...() 함수 중 하나에 진입한 후, ConnectingState로 진입하여 connected() 신호를 발생시킨 뒤 SSL 클라이언트 핸드셰이크를 시작합니다. 상태가 변경될 때마다 QSslSocket 는 stateChanged() 신호를 발생시킵니다.

SSL 클라이언트 핸드셰이크를 시작한 후, 상대방의 신원을 확인할 수 없는 경우 sslErrors() 신호가 발생합니다. 오류를 무시하고 연결을 계속하려면, sslErrors() 신호에 연결된 슬롯 함수 내부에서, 또는 암호화 모드로 진입하기 전에 ignoreSslErrors()를 호출해야 합니다. ignoreSslErrors()가 호출되지 않으면 연결이 끊기고, disconnected() 신호가 발생하며, QSslSocket 는 UnconnectedState로 돌아갑니다.

SSL 핸드셰이크가 성공하면, QSslSocket 는 encrypted() 신호를 발생시킵니다.

QSslSocket socket;
connect(&socket, &QSslSocket::encrypted, receiver, &Receiver::socketEncrypted);

socket.connectToHostEncrypted("imap", 993);
socket->write("1 CAPABILITY\r\n");

참고: 위의예제에서는 암호화된 연결을 요청한 직후, encrypted() 신호가 발생하기 전에 소켓에 텍스트를 쓸 수 있음을 보여줍니다. 이러한 경우, 텍스트는 객체에 대기열로 저장되었다가 연결이 설정되고 encrypted() 신호가 발생한 후에 소켓에 기록됩니다.

mode 의 기본값은 ReadWrite 입니다.

연결의 서버 측에서 ` QSslSocket `를 생성하려면, ` QTcpServer`를 통해 들어오는 연결을 수신할 때 대신 ` startServerEncryption()`를 호출해야 합니다.

connectToHost(), startClientEncryption(), waitForConnected() 및 waitForEncrypted()도 참조하십시오 .

void QSslSocket::connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)

connectToHostEncrypted의 원래 동작 외에도, 이 오버로드된 메서드를 사용하면 TCP 연결에 사용되는 호스트명(hostName) 대신 인증서 유효성 검사에 다른 호스트명(sslPeerName)을 사용할 수 있습니다.

이것은 오버로드된 함수입니다.

connectToHostEncrypted()도 참조하십시오 .

[since 6.0] void QSslSocket::continueInterruptedHandshake()

애플리케이션이 handshakeInterruptedOnError() 시그널을 수신한 후에도 핸드셰이크를 완료하고자 하는 경우, 이 함수를 호출해야 합니다. 이 호출은 해당 시그널에 연결된 슬롯 함수 내에서 이루어져야 합니다. 시그널-슬롯 연결은 직접적이어야 합니다.

이 함수는 Qt 6.0에서 도입되었습니다.

handshakeInterruptedOnError() 및 QSslConfiguration::setHandshakeMustInterruptOnError()도 참조하십시오 .

[override virtual] void QSslSocket::disconnectFromHost()

QAbstractSocket::disconnectFromHost()을 재구현합니다.

[signal] void QSslSocket::encrypted()

이 신호는 QSslSocket 가 암호화 모드로 전환될 때 발생합니다. 이 신호가 발생하면 QSslSocket::isEncrypted()는 true를 반환하며, 이후 소켓을 통한 모든 전송은 암호화됩니다.

QSslSocket::connectToHostEncrypted() 및 QSslSocket::isEncrypted()도 참조하십시오 .

qint64 QSslSocket::encryptedBytesAvailable() const

복호화를 기다리고 있는 암호화된 바이트 수를 반환합니다. 일반적으로 이 함수는 0을 반환하는데, 이는 ` QSslSocket `가 수신된 데이터를 가능한 한 빨리 복호화하기 때문입니다.

qint64 QSslSocket::encryptedBytesToWrite() const

네트워크로 쓰여질 때까지 대기 중인 암호화된 바이트 수를 반환합니다.

[signal] void QSslSocket::encryptedBytesWritten(qint64 written)

이 신호는 ` QSslSocket `가 암호화된 데이터를 네트워크에 기록할 때 발생합니다. ` written ` 매개변수에는 성공적으로 기록된 바이트 수가 포함됩니다.

QIODevice::bytesWritten()도 참조하십시오 .

[signal] void QSslSocket::handshakeInterruptedOnError(const QSslError &error)

QSslSocket 인증서 검증 오류가 발견되었고, QSslConfiguration 에서 조기 오류 보고가 활성화된 경우 이 신호를 발신합니다. 애플리케이션은 error 를 검토한 후, 핸드셰이크를 계속할지, 아니면 중단하고 상대방에게 경고 메시지를 보낼지 결정해야 합니다. 신호-슬롯 연결은 직접적이어야 합니다.

continueInterruptedHandshake(), sslErrors(), QSslConfiguration::setHandshakeMustInterruptOnError()도 참조하십시오 .

[slot] void QSslSocket::ignoreSslErrors()

이 슬롯은 QSslSocket 에 QSslSocket 의 핸드셰이크 단계에서 발생하는 오류를 무시하고 연결을 계속 진행하도록 지시합니다. 핸드셰이크 단계에서 오류가 발생하더라도 연결을 계속 진행하려면, sslErrors()에 연결된 슬롯에서, 또는 핸드셰이크 단계가 시작되기 전에 이 슬롯을 호출해야 합니다. 오류 발생 시 또는 핸드셰이크 전에 이 슬롯을 호출하지 않으면, sslErrors() 신호가 발신된 후 연결이 끊어집니다.

SSL 핸드셰이크 단계에서 오류가 발생하지 않는 경우(즉, 상대방의 신원이 문제없이 확인된 경우), QSslSocket 는 sslErrors() 신호를 발산하지 않으므로 이 함수를 호출할 필요가 없습니다.

경고: 사용자가 sslErrors() 신호가 보고한 오류를반드시 확인할수 있도록 하고 , 사용자가 진행을 허용한다는 확인을 받은 후에만 이 메서드를 호출해야합니다 . 예기치 않은 오류가 발생하면 연결을 중단해야 합니다. 실제 오류를 확인하지 않고 이 메서드를 호출하면 애플리케이션에 보안 위험이 발생할 가능성이 매우 높습니다. 각별히 주의하여 사용하십시오!

참고: 이 슬롯은 오버로드되어 있습니다. 이 슬롯에 연결하려면:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        sslSocket, qOverload<>(&QSslSocket::ignoreSslErrors));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        sslSocket, [receiver = sslSocket]() { receiver->ignoreSslErrors(); });
더 많은 예제와 접근 방식은 오버로드된 슬롯에 연결하기를 참조하십시오.

sslErrors()도 참조하십시오 .

void QSslSocket::ignoreSslErrors(const QList<QSslError> &errors)

이 방법은 QSslSocket 에 errors 에 명시된 오류만 무시하도록 지시합니다.

참고: 대부분의 SSL 오류는 인증서와 관련되어있으므로 , 대부분의 경우 해당 SSL 오류와 관련된 예상 인증서를 설정해야 합니다. 예를 들어, 자체 서명된 인증서를 사용하는 서버에 연결하려는 경우 다음 코드 조각을 참고하십시오:

QList<QSslCertificate> cert = QSslCertificate::fromPath("server-certificate.pem"_L1);
QSslError error(QSslError::SelfSignedCertificate, cert.at(0));
QList<QSslError> expectedSslErrors;
expectedSslErrors.append(error);

QSslSocket socket;
socket.ignoreSslErrors(expectedSslErrors);
socket.connectToHostEncrypted("server.tld", 443);

이 함수를 여러 번 호출하면 이전 호출에서 전달된 오류 목록이 대체됩니다. 빈 목록을 인수로 전달하여 이 함수를 호출하면 무시할 오류 목록을 지울 수 있습니다.

이 함수는 오버로드된 함수입니다.

sslErrors() 및 sslHandshakeErrors()도 참조하십시오 .

[static, since 6.1] QList<QSsl::ImplementedClass> QSslSocket::implementedClasses(const QString &backendName = {})

이 함수는 backendName 라는 이름의 백엔드에서 구현된 백엔드별 클래스를 반환합니다. 빈 backendName 는 현재 활성화된 백엔드에 대한 쿼리로 간주됩니다.

이 함수는 Qt 6.1에서 도입되었습니다.

QSsl::ImplementedClass, activeBackend() 및 isClassImplemented()도 참조하십시오 .

[static, since 6.1] bool QSslSocket::isClassImplemented(QSsl::ImplementedClass cl, const QString &backendName = {})

backendName 라는 이름의 백엔드가 cl 클래스를 구현하고 있는 경우 true를 반환합니다. backendName 가 비어 있으면 현재 활성화된 백엔드에 대한 쿼리로 간주됩니다.

이 함수는 Qt 6.1에서 도입되었습니다.

implementedClasses()도 참조하십시오 .

bool QSslSocket::isEncrypted() const

소켓이 암호화되어 있으면 ` true `를 반환하고, 그렇지 않으면 `false`를 반환합니다.

암호화된 소켓은 write() 또는 putChar()를 호출하여 작성된 모든 데이터를 네트워크로 전송하기 전에 암호화하며, 네트워크에서 수신된 모든 데이터를 read(), readLine() 또는 getChar()를 호출하기 전에 복호화합니다.

QSslSocket 암호화 모드로 진입할 때 encrypted()를 호출합니다.

sessionCipher()를 호출하여 데이터의 암호화 및 복호화에 사용되는 암호화 알고리즘을 확인할 수 있습니다.

mode()도 참조하십시오 .

[static, since 6.1] bool QSslSocket::isFeatureSupported(QSsl::SupportedFeature ft, const QString &backendName = {})

backendName 라는 백엔드가 ft 기능을 지원하는 경우 true를 반환합니다. backendName 가 비어 있으면 현재 활성화된 백엔드에 대한 쿼리로 간주됩니다.

이 함수는 Qt 6.1에서 도입되었습니다.

QSsl::SupportedFeature 및 supportedFeatures()도 참조하십시오 .

[static, since 6.1] bool QSslSocket::isProtocolSupported(QSsl::SslProtocol protocol, const QString &backendName = {})

backendName 라는 백엔드가 protocol 를 지원하는 경우 true를 반환합니다. backendName 가 비어 있으면 현재 활성화된 백엔드에 대한 쿼리로 간주됩니다.

이 함수는 Qt 6.1에서 도입되었습니다.

supportedProtocols()도 참조하십시오 .

QSslCertificate QSslSocket::localCertificate() const

소켓의 로컬 인증서( certificate)를 반환하거나, 로컬 인증서가 할당되지 않은 경우 빈 인증서를 반환합니다.

setLocalCertificate() 및 privateKey()도 참조하십시오 .

QList<QSslCertificate> QSslSocket::localCertificateChain() const

소켓의 로컬 인증서 체인( certificate )을 반환하거나, 할당된 로컬 인증서가 없는 경우 빈 리스트를 반환합니다.

setLocalCertificateChain()도 참조하십시오 .

QSslSocket::SslMode QSslSocket::mode() const

소켓의 현재 모드를 반환합니다. 반환 값은 ` UnencryptedMode`(이 경우 ` QSslSocket `는 ` QTcpSocket`와 동일하게 동작함)이거나, ` SslClientMode ` 또는 ` SslServerMode` 중 하나이며, 이 경우 클라이언트가 협상 중이거나 암호화 모드에 있는 상태입니다.

모드가 변경되면 QSslSocket 는 modeChanged()를 발생시킵니다.

SslMode도 참조하십시오 .

[signal] void QSslSocket::modeChanged(QSslSocket::SslMode mode)

이 신호는 ` QSslSocket `가 ` QSslSocket::UnencryptedMode `에서 ` QSslSocket::SslClientMode ` 또는 ` QSslSocket::SslServerMode`로 변경될 때 발생합니다. ` mode `는 새로운 모드입니다.

QSslSocket::mode()도 참조하십시오 .

[signal] void QSslSocket::newSessionTicketReceived()

핸드셰이크 과정에서 TLS 1.3 프로토콜이 협상된 경우, ` QSslSocket `는 `NewSessionTicket` 메시지를 수신한 후 이 신호를 발생시킵니다. 세션 및 세션 티켓의 유효 기간 힌트는 소켓 구성에서 업데이트됩니다. 이 세션은 향후 TLS 연결에서 세션 재개(및 단축된 핸드셰이크)에 사용될 수 있습니다.

참고: 이 기능은 OpenSSL 백엔드에서만 활성화되며, OpenSSL v 1.1.1 이상이 필요합니다.

QSslSocket::sslConfiguration(), QSslConfiguration::sessionTicket() 및 QSslConfiguration::sessionTicketLifeTimeHint()도 참조하십시오 .

QList<QOcspResponse> QSslSocket::ocspResponses() const

이 함수는 OCSP 스테이플링을 사용하는 TLS 핸드셰이크 과정에서 서버가 보낼 수 있는 OCSP(Online Certificate Status Protocol) 응답을 반환합니다. 확정 응답을 받지 못했거나 응답을 전혀 받지 못한 경우, 이 목록은 비어 있습니다.

QSslConfiguration::setOcspStaplingEnabled()함수도 참조하십시오 .

QSslCertificate QSslSocket::peerCertificate() const

상대방의 디지털 인증서(즉, 연결된 호스트의 직접 인증서)를 반환하며, 상대방이 인증서를 할당하지 않은 경우에는 null 인증서를 반환합니다.

피어 인증서는 핸드셰이크 단계에서 자동으로 확인되므로, 이 함수는 일반적으로 인증서를 표시하거나 연결 진단 목적으로 사용됩니다. 이 인증서에는 호스트 이름, 인증서 발급자, 피어의 공개 키 등 피어에 대한 정보가 포함되어 있습니다.

피어 인증서는 핸드셰이크 단계에서 설정되므로, sslErrors() 신호나 encrypted() 신호에 연결된 슬롯에서 피어 인증서에 액세스하는 것은 안전합니다.

null 인증서가 반환되는 경우, 이는 SSL 핸드셰이크가 실패했거나, 연결된 호스트에 인증서가 없거나, 연결이 수립되지 않았음을 의미할 수 있습니다.

피어의 전체 인증서 체인을 확인하려면 peerCertificateChain()을 사용하여 한 번에 모두 가져오십시오.

peerCertificateChain()도 참조하십시오 .

QList<QSslCertificate> QSslSocket::peerCertificateChain() const

상대방의 디지털 인증서 체인을 반환하거나, 인증서가 없는 빈 목록을 반환합니다.

피어 인증서는 핸드셰이크 단계에서 자동으로 검증됩니다. 이 함수는 일반적으로 인증서를 가져와 표시하거나, 연결 진단을 수행하는 데 사용됩니다. 인증서에는 호스트 이름, 발급자 이름, 발급자 공개 키를 포함하여 피어 및 인증서 발급자에 대한 정보가 포함되어 있습니다.

피어 인증서는 핸드셰이크 단계에서 ` QSslSocket `에 설정되므로, ` sslErrors()` 신호나 ` encrypted()` 신호에 연결된 슬롯에서 이 함수를 호출해도 안전합니다.

빈 리스트가 반환되면 SSL 핸드셰이크가 실패했거나, 연결된 호스트에 인증서가 없거나, 연결이 없는 것을 의미할 수 있습니다.

상대방의 직접 인증서만 얻으려면 peerCertificate()를 사용하십시오.

peerCertificate()도 참조하십시오 .

int QSslSocket::peerVerifyDepth() const

SSL 핸드셰이크 단계에서 확인해야 할 피어의 인증서 체인 내 인증서 최대 개수를 반환하거나, 최대 깊이가 설정되지 않은 경우 0(기본값)을 반환하여 전체 인증서 체인을 확인해야 함을 나타냅니다.

인증서는 발급 순서대로 검사되며, 피어의 자체 인증서를 시작으로 그 발급자의 인증서, 그 다음으로 이어지는 순서로 진행됩니다.

setPeerVerifyDepth() 및 peerVerifyMode()도 참조하십시오 .

[signal] void QSslSocket::peerVerifyError(const QSslError &error)

QSslSocket SSL 핸드셰이크 도중, 암호화가 설정되기 전에 이 신호를 여러 번 전송하여 상대방의 신원을 확인하는 과정에서 오류가 발생했음을 알릴 수 있습니다. ‘ error ’는 일반적으로 QSslSocket 가 상대방을 안전하게 식별할 수 없음을 나타냅니다.

이 신호는 문제가 발생했을 때 조기에 이를 알려줍니다. 이 신호에 연결하면, 핸드셰이크가 완료되기 전에 연결된 슬롯 내부에서 수동으로 연결을 끊을 수 있습니다. 아무런 조치를 취하지 않으면, QSslSocket 는 QSslSocket::sslErrors()를 발신하게 됩니다.

sslErrors()도 참조하십시오 .

QSslSocket::PeerVerifyMode QSslSocket::peerVerifyMode() const

소켓의 검증 모드를 반환합니다. 이 모드는 QSslSocket 이 상대방(즉, 클라이언트가 서버에 인증서를 요청하는지, 아니면 서버가 클라이언트에 인증서를 요청하는지)에게 인증서를 요청할지 여부와, 해당 인증서가 유효해야 하는지 여부를 결정합니다.

기본 모드는 ` AutoVerifyPeer`이며, 이는 ` QSslSocket `가 클라이언트의 경우 ` VerifyPeer `를, 서버의 경우 ` QueryPeer `를 사용하도록 지시합니다.

setPeerVerifyMode(), peerVerifyDepth(), mode()도 참조하십시오 .

QString QSslSocket::peerVerifyName() const

setPeerVerifyName 또는 connectToHostEncrypted 에서 설정된, 인증서 유효성 검사에 사용되는 별도의 호스트명을 반환합니다.

setPeerVerifyName() 및 connectToHostEncrypted()도 참조하십시오 .

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

QSslSocket PSK 암호 모음을 협상할 때 이 신호를 전송하며, 따라서 PSK 인증이 필요합니다.

PSK를 사용할 때, SSL 핸드셰이크를 계속 진행하려면 클라이언트가 서버에 유효한 신원 정보와 유효한 사전 공유 키를 전송해야 합니다. 애플리케이션은 필요에 따라 전달된 ` authenticator ` 객체를 채움으로써, 이 신호에 연결된 슬롯을 통해 이 정보를 제공할 수 있습니다.

참고: 이 신호를무시하거나 필요한 인증 정보를 제공하지 않으면 핸드셰이크가 실패하여 연결이 중단됩니다.

참고: authenticator 객체는 소켓이 소유하고 있으므로, 애플리케이션에서 이를 삭제해서는 안 됩니다.

QSslPreSharedKeyAuthenticator도 참조하십시오 .

QSslKey QSslSocket::privateKey() const

이 소켓의 개인 키를 반환합니다.

setPrivateKey() 및 localCertificate()도 참조하십시오 .

QSsl::SslProtocol QSslSocket::protocol() const

소켓의 SSL 프로토콜을 반환합니다. 기본적으로 QSsl::SecureProtocols 가 사용됩니다.

setProtocol()도 참조하십시오 .

[override virtual protected] qint64 QSslSocket::readData(char *data, qint64 maxlen)

QAbstractSocket::readData(char *data, qint64 maxSize)를 재구현합니다.

[override virtual] void QSslSocket::resume()

QAbstractSocket::resume() 함수를 재구현합니다.

소켓이 일시 중지된 후 데이터 전송을 재개합니다. 이 소켓에서 "setPauseMode(QAbstractSocket::PauseOnSslErrors);"가 호출된 상태에서 sslErrors() 신호가 수신된 경우, 소켓이 계속 작동하려면 이 메서드를 호출해야 합니다.

QAbstractSocket::pauseMode() 및 QAbstractSocket::setPauseMode()도 참조하십시오 .

QSslCipher QSslSocket::sessionCipher() const

소켓의 암호화 알고리즘 cipher 을 반환하며, 연결이 암호화되지 않은 경우에는 null cipher를 반환합니다. 세션에 사용될 소켓의 암호화 알고리즘은 핸드셰이크 단계에서 설정됩니다. 이 암호화 알고리즘은 소켓을 통해 전송되는 데이터를 암호화하고 복호화하는 데 사용됩니다.

QSslSocket 또한 핸드셰이크 단계에서 최종적으로 세션 암호를 선택하게 될 암호들의 정렬된 목록을 설정하는 함수들도 제공합니다. 이 정렬된 목록은 핸드셰이크 단계가 시작되기 전에 미리 설정되어 있어야 합니다.

QSslConfiguration::ciphers(), QSslConfiguration::setCiphers(), QSslConfiguration::supportedCiphers()도 참조하십시오 .

QSsl::SslProtocol QSslSocket::sessionProtocol() const

소켓의 SSL/TLS 프로토콜을 반환하거나, 연결이 암호화되지 않은 경우 UnknownProtocol을 반환합니다. 세션에 대한 소켓의 프로토콜은 핸드셰이크 단계에서 설정됩니다.

protocol() 및 setProtocol()도 참조하십시오 .

[static, since 6.1] bool QSslSocket::setActiveBackend(const QString &backendName)

backendName 이라는 이름의 백엔드가 활성 백엔드로 설정된 경우 true를 반환합니다. ` backendName `는 ` availableBackends()`가 반환하는 이름 중 하나여야 합니다.

참고: 애플리케이션은 서로 다른 백엔드를 동시에 혼합하여 사용할 수 없습니다. 즉, QSslSocket 또는 QSslCertificate, QSslKey 와 같은 관련 클래스를 사용하기 전에 기본값이 아닌 백엔드를 선택해야 합니다.

이 함수는 Qt 6.1에서 도입되었습니다.

activeBackend() 및 availableBackends()도 참조하십시오 .

void QSslSocket::setLocalCertificate(const QSslCertificate &certificate)

소켓의 로컬 인증서를 certificate 로 설정합니다. 상대방에게 자신의 신원을 확인시켜야 할 경우 로컬 인증서가 필요합니다. 이 인증서는 개인 키와 함께 사용되며, 로컬 인증서를 설정할 경우 개인 키도 반드시 설정해야 합니다.

로컬 인증서와 개인 키는 서버 소켓의 경우 항상 필요하지만, 서버가 클라이언트의 인증을 요구하는 경우 클라이언트 소켓에서도 드물게 사용됩니다.

참고: macOS의Secure Transport SSL 백엔드는 로컬 인증서와 키를 가져와 기본 키체인(기본값은 로그인 키체인일 가능성이 높음)을 업데이트할 수 있습니다. 이로 인해 애플리케이션이 이러한 개인 키를 사용할 때 시스템 대화 상자가 나타나 허가를 요청할 수도 있습니다. 이러한 동작이 원치 않는 경우, QT_SSL_USE_TEMPORARY_KEYCHAIN 환경 변수를 0이 아닌 값으로 설정하십시오. 그러면 QSslSocket 가 자체 임시 키 체인을 사용하도록 요청합니다.

localCertificate() 및 setPrivateKey()도 참조하십시오 .

void QSslSocket::setLocalCertificate(const QString &path, QSsl::EncodingFormat format = QSsl::Pem)

소켓의 로컬 certificate 을 ` path` 파일에서 발견된 첫 번째 항목으로 설정합니다. 이 파일은 지정된 ` format`에 따라 파싱됩니다.

이 함수는 오버로드된 함수입니다.

void QSslSocket::setLocalCertificateChain(const QList<QSslCertificate> &localChain)

SSL 핸드셰이크 과정에서 상대방에게 제시할 인증서 체인을 localChain 로 설정합니다.

localCertificateChain() 및 QSslConfiguration::setLocalCertificateChain()도 참조하십시오 .

void QSslSocket::setPeerVerifyDepth(int depth)

SSL 핸드셰이크 단계에서 확인될 피어의 인증서 체인 내 인증서 최대 개수를 ` depth`로 설정합니다. 깊이를 0으로 설정하면 최대 깊이가 설정되지 않은 것으로 간주되어 전체 인증서 체인이 확인되어야 함을 의미합니다.

인증서는 발급 순서대로 검사되며, 피어의 자체 인증서를 시작으로 그 발급자의 인증서 순으로 진행됩니다.

peerVerifyDepth() 및 setPeerVerifyMode()도 참조하십시오 .

void QSslSocket::setPeerVerifyMode(QSslSocket::PeerVerifyMode mode)

소켓의 검증 모드를 ` mode`로 설정합니다. 이 모드는 ` QSslSocket `가 상대방(즉, 클라이언트가 서버에 인증서를 요청하거나, 서버가 클라이언트에 인증서를 요청하는 경우)에게 인증서를 요청할지 여부와, 해당 인증서가 유효해야 하는지 여부를 결정합니다.

기본 모드는 ` AutoVerifyPeer`이며, 이는 ` QSslSocket `가 클라이언트의 경우 ` VerifyPeer `를, 서버의 경우 ` QueryPeer `를 사용하도록 지시합니다.

암호화가 시작된 후에 이 모드를 설정해도 현재 연결에는 아무런 영향이 없습니다.

peerVerifyMode(), setPeerVerifyDepth(), mode()도 참조하십시오 .

void QSslSocket::setPeerVerifyName(const QString &hostName)

TCP 연결에 사용되는 호스트 이름 대신, hostName 에 지정된 다른 호스트 이름을 인증서 유효성 검사에 사용하도록 설정합니다.

peerVerifyName() 및 connectToHostEncrypted()도 참조하십시오 .

void QSslSocket::setPrivateKey(const QSslKey &key)

소켓의 개인 키( key )를 key 로 설정합니다. 개인 키와 로컬 인증서( certificate )는 SSL 상대방에게 자신의 신원을 증명해야 하는 클라이언트와 서버에서 사용됩니다.

SSL 서버 소켓을 생성하는 경우 키와 로컬 인증서xml-ph-0000@deepl.internal가 모두 필요합니다. SSL 클라이언트 소켓을 생성하는 경우, 클라이언트가 SSL 서버에 자신을 인증해야 한다면 키와 로컬 인증서xml-ph-0002@deepl.internal가 필요합니다.

privateKey() 및 setLocalCertificate()도 참조하십시오 .

void QSslSocket::setPrivateKey(const QString &fileName, QSsl::KeyAlgorithm algorithm = QSsl::Rsa, QSsl::EncodingFormat format = QSsl::Pem, const QByteArray &passPhrase = QByteArray())

fileName 파일에 있는 문자열을 읽고, 지정된 algorithm 및 인코딩 format 을 사용하여 디코딩함으로써 SSL key 를 생성합니다. 인코딩된 키가 암호화된 경우, passPhrase 를 사용하여 이를 복호화합니다.

소켓의 개인 키는 생성된 키로 설정됩니다. 개인 키와 로컬 certificate 은 SSL 상대방에게 자신의 신원을 증명해야 하는 클라이언트와 서버에서 사용됩니다.

SSL 서버 소켓을 생성하는 경우 키와 로컬 인증서 모두 필요합니다. SSL 클라이언트 소켓을 생성하는 경우, 클라이언트가 SSL 서버에 자신을 식별해야 한다면 키와 로컬 인증서가 필요합니다.

이 함수는 오버로드된 함수입니다.

privateKey() 및 setLocalCertificate()도 참조하십시오 .

void QSslSocket::setProtocol(QSsl::SslProtocol protocol)

소켓의 SSL 프로토콜을 protocol 로 설정합니다. 이는 다음에 시작되는 핸드셰이크에 영향을 미칩니다. 이미 암호화된 소켓에서 이 함수를 호출하더라도 소켓의 프로토콜에는 영향을 미치지 않습니다.

protocol()도 참조하십시오 .

[override virtual] void QSslSocket::setReadBufferSize(qint64 size)

QAbstractSocket::setReadBufferSize(qint64 크기)를 재구현합니다.

QSslSocket 의 내부 읽기 버퍼 크기를 size 바이트로 설정합니다.

[override virtual] bool QSslSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)

QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState, QIODeviceBase::OpenMode openMode)를 재구현합니다.

네이티브 소켓 디스크립터 ` socketDescriptor`를 사용하여 ` QSslSocket `를 초기화합니다. ` socketDescriptor `가 유효한 소켓 디스크립터로 인정되면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다. 소켓은 ` openMode`로 지정된 모드로 열리며, ` state`로 지정된 소켓 상태로 진입합니다.

참고: 동일한 네이티브 소켓 디스크립터를 사용하여 두 개의 소켓을 초기화하는것은 불가능합니다 .

참조: socketDescriptor().

[override virtual] void QSslSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)

다음 함수를 재구현합니다: QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value).

지정된 option 를 value 에 설명된 값으로 설정합니다.

socketOption()도 참조하십시오 .

void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration)

소켓의 SSL 구성을 configuration 의 내용으로 설정합니다. 이 함수는 로컬 인증서, 암호 모음, 개인 키 및 CA 인증서를 configuration 에 저장된 값으로 설정합니다.

SSL 상태와 관련된 필드는 설정할 수 없습니다.

sslConfiguration(), setLocalCertificate(), setPrivateKey(), QSslConfiguration::setCaCertificates() 및 QSslConfiguration::setCiphers()도 참조하십시오 .

[override virtual protected] qint64 QSslSocket::skipData(qint64 maxSize)

QAbstractSocket::skipData(qint64 maxSize)를 재구현합니다.

[override virtual] QVariant QSslSocket::socketOption(QAbstractSocket::SocketOption option)

QAbstractSocket::socketOption(QAbstractSocket::SocketOption option)을 재구현합니다.

option 옵션의 값을 반환합니다.

setSocketOption()도 참조하십시오 .

QSslConfiguration QSslSocket::sslConfiguration() const

소켓의 SSL 구성 상태를 반환합니다. 소켓의 기본 SSL 구성은 기본 암호 체계를 사용하고, 기본 CA 인증서를 사용하며, 로컬 개인 키나 인증서를 사용하지 않는 것입니다.

또한 SSL 구성에는 사전 공지 없이 시간이 지남에 따라 변경될 수 있는 필드들이 포함되어 있습니다.

setSslConfiguration(), localCertificate(), peerCertificate(), peerCertificateChain(), sessionCipher(), privateKey(), QSslConfiguration::ciphers(), QSslConfiguration::caCertificates()도 참조하십시오 .

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

QSslSocket 이 신호는 SSL 핸드셰이크 후, 상대방의 신원을 확인하는 과정에서 하나 이상의 오류가 발생했음을 나타내기 위해 발송됩니다. 이러한 오류는 대개 QSslSocket 가 상대방을 안전하게 식별할 수 없음을 의미합니다. 별도의 조치가 취해지지 않는 한, 이 신호가 발송된 후 연결이 끊어집니다.

발생한 오류에도 불구하고 연결을 계속 진행하려면, 이 신호에 연결된 슬롯 내에서 ` QSslSocket::ignoreSslErrors()`를 호출해야 합니다. 나중에 오류 목록에 접근해야 할 경우, ` sslHandshakeErrors()`를 호출할 수 있습니다.

errors QSslSocket 가 피어의 신원을 확인하는 것을 방해하는 하나 이상의 오류가 포함되어 있습니다.

참고: 이 신호에 연결할 때는 Qt::QueuedConnection 를 사용할수 없으며 , 그렇지 않으면 QSslSocket::ignoreSslErrors()를 호출해도 아무런 효과가 없습니다.

peerVerifyError()도 참조하십시오 .

QList<QSslError> QSslSocket::sslHandshakeErrors() const

가장 최근에 발생한 SSL 오류 목록을 반환합니다. 이 목록은 QSslSocket 가 sslErrors() 신호를 통해 전달하는 목록과 동일합니다. 오류 없이 연결이 암호화된 경우, 이 함수는 빈 목록을 반환합니다.

connectToHostEncrypted()도 참조하십시오 .

[static] long QSslSocket::sslLibraryBuildVersionNumber()

컴파일 시점에 사용 중인 SSL 라이브러리의 버전 번호를 반환합니다. SSL을 지원하지 않는 경우 -1을 반환합니다.

sslLibraryVersionNumber()도 참조하십시오 .

[static] QString QSslSocket::sslLibraryBuildVersionString()

컴파일 시점에 사용 중인 SSL 라이브러리의 버전 문자열을 반환합니다. SSL을 지원하지 않는 경우, 이 함수는 빈 값을 반환합니다.

sslLibraryVersionString()도 참조하십시오 .

[static] long QSslSocket::sslLibraryVersionNumber()

사용 중인 SSL 라이브러리의 버전 번호를 반환합니다. 이 값은 컴파일 시점이 아닌 실행 시점에 사용 중인 라이브러리의 버전임을 유의하십시오. SSL을 지원할 수 없는 경우 -1을 반환합니다.

[static] QString QSslSocket::sslLibraryVersionString()

사용 중인 SSL 라이브러리의 버전 문자열을 반환합니다. 이는 컴파일 시점이 아닌 실행 시점에 사용 중인 라이브러리의 버전임을 유의하십시오. SSL을 지원하지 않는 경우, 이 함수는 빈 값을 반환합니다.

[slot] void QSslSocket::startClientEncryption()

클라이언트 연결에 대한 지연된 SSL 핸드셰이크를 시작합니다. 이 함수는 소켓이 ` ConnectedState ` 상태에 있지만 여전히 ` UnencryptedMode` 상태일 때 호출할 수 있습니다. 아직 연결되지 않았거나 이미 암호화된 상태라면 이 함수는 아무런 효과도 없습니다.

STARTTLS 기능을 구현한 클라이언트는 종종 지연된 SSL 핸드셰이크를 사용합니다. 대부분의 다른 클라이언트는 핸드셰이크를 자동으로 수행하는 connectToHostEncrypted()을 대신 사용하여 이 함수를 직접 호출할 필요가 없습니다.

connectToHostEncrypted() 및 startServerEncryption()도 참조하십시오 .

[slot] void QSslSocket::startServerEncryption()

서버 연결을 위해 지연된 SSL 핸드셰이크를 시작합니다. 이 함수는 소켓이 ` ConnectedState ` 상태이면서 여전히 ` UnencryptedMode` 상태일 때 호출할 수 있습니다. 연결되지 않았거나 이미 암호화되어 있는 경우에는 이 함수가 아무런 효과도 미치지 않습니다.

서버 소켓의 경우, 이 함수를 호출하는 것이 SSL 핸드셰이크를 시작하는 유일한 방법입니다. 대부분의 서버는 연결을 수신하는 즉시, 또는 SSL 모드로 전환하라는 프로토콜별 명령을 수신한 결과로 이 함수를 호출합니다(예를 들어, 서버는 "STARTTLS\r\n " 문자열을 수신하면 이 함수를 호출하여 응답할 수 있습니다).

SSL 서버를 구현하는 가장 일반적인 방법은 ` QTcpServer `의 서브클래스를 생성하고 ` QTcpServer::incomingConnection()`를 재구현하는 것입니다. 반환된 소켓 디스크립터는 이후 ` QSslSocket::setSocketDescriptor()`로 전달됩니다.

connectToHostEncrypted() 및 startClientEncryption()도 참조하십시오 .

[static, since 6.1] QList<QSsl::SupportedFeature> QSslSocket::supportedFeatures(const QString &backendName = {})

이 함수는 ‘ backendName ’라는 이름의 백엔드에서 지원하는 기능을 반환합니다. 빈 ‘ backendName ’는 현재 활성화된 백엔드에 대한 쿼리로 간주됩니다.

이 함수는 Qt 6.1에서 도입되었습니다.

QSsl::SupportedFeature 및 activeBackend()도 참조하십시오 .

[static, since 6.1] QList<QSsl::SslProtocol> QSslSocket::supportedProtocols(const QString &backendName = {})

backendName 라는 이름의 백엔드가 사용 가능한 경우, 이 함수는 해당 백엔드가 지원하는 TLS 프로토콜 버전 목록을 반환합니다. 빈 backendName 는 현재 활성화된 백엔드에 대한 쿼리로 간주됩니다. 그 외의 경우, 이 함수는 빈 목록을 반환합니다.

이 함수는 Qt 6.1에서 도입되었습니다.

availableBackends(), activeBackend(), isProtocolSupported()도 참조하십시오 .

[static] bool QSslSocket::supportsSsl()

이 플랫폼이 SSL을 지원하는 경우 ` true `을 반환하고, 그렇지 않은 경우 `false`를 반환합니다. 플랫폼이 SSL을 지원하지 않으면 소켓은 연결 단계에서 실패합니다.

[override virtual] bool QSslSocket::waitForBytesWritten(int msecs = 30000)

QAbstractSocket::waitForBytesWritten(int msecs)를 재구현합니다.

[override virtual] bool QSslSocket::waitForConnected(int msecs = 30000)

QAbstractSocket::waitForConnected(int msecs)를 재구현합니다.

소켓이 연결될 때까지, 또는 msecs 밀리초 중 먼저 발생하는 시점까지 대기합니다. 연결이 설정된 경우, 이 함수는 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.

QAbstractSocket::waitForConnected()함수도 참조하십시오 .

[override virtual] bool QSslSocket::waitForDisconnected(int msecs = 30000)

QAbstractSocket::waitForDisconnected(int msecs)를 재구현합니다.

소켓 연결이 끊기거나 msecs 밀리초가 경과할 때까지(둘 중 먼저 발생하는 경우) 대기합니다. 연결이 끊어진 경우, 이 함수는 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.

QAbstractSocket::waitForDisconnected()도 참조하십시오 .

bool QSslSocket::waitForEncrypted(int msecs = 30000)

소켓이 SSL 핸드셰이크를 완료하고 ` encrypted()`를 반환할 때까지 기다리거나, msecs 밀리초가 경과할 때까지 기다립니다(둘 중 먼저 발생하는 경우). ` encrypted()`가 반환된 경우, 이 함수는 `true`를 반환하고, 그렇지 않은 경우(예: 소켓 연결이 끊어지거나 SSL 핸드셰이크가 실패한 경우) `false`를 반환합니다.

다음 예제는 소켓이 암호화될 때까지 최대 1초 동안 대기합니다:

socket->connectToHostEncrypted("imap", 993);
if (socket->waitForEncrypted(1000))
    qDebug("Encrypted!");

msecs가 -1인 경우, 이 함수는 타임아웃되지 않습니다.

startClientEncryption(), startServerEncryption(), encrypted(), isEncrypted()도 참조하십시오 .

[override virtual] bool QSslSocket::waitForReadyRead(int msecs = 30000)

QAbstractSocket::waitForReadyRead(int msecs)를 재구현합니다.

[override virtual protected] qint64 QSslSocket::writeData(const char *data, qint64 len)

QAbstractSocket::writeData(const char *data, qint64 size)를 재구현합니다.

관련 비멤버 함수

[since 6.0] enum class AlertLevel

경고 메시지의 수준을 설명합니다

이 열거형은 전송되거나 수신된 경고 메시지의 수준을 나타냅니다.

상수값설명
QSslSocket::AlertLevel::Warning0비치명적 경고 메시지
QSslSocket::AlertLevel::Fatal1치명적인 경보 메시지. 기본 백엔드는 이러한 경보를 적절하게 처리하고 연결을 종료합니다.
QSslSocket::AlertLevel::Unknown2심각도 수준이 알려지지 않은 경고.

이 열거형은 Qt 6.0에서 도입되었습니다.

[since 6.0] enum class AlertType

경고 메시지에 사용될 수 있는 코드들을 나열합니다.

사용 가능한 값과 그 의미에 대해서는 RFC 8446의 6절을 참조하십시오.

상수값설명
QSslSocket::AlertType::CloseNotify0,
QSslSocket::AlertType::UnexpectedMessage10 
QSslSocket::AlertType::BadRecordMac20 
QSslSocket::AlertType::RecordOverflow22 
QSslSocket::AlertType::DecompressionFailure30 
QSslSocket::AlertType::HandshakeFailure40 
QSslSocket::AlertType::NoCertificate41 
QSslSocket::AlertType::BadCertificate42 
QSslSocket::AlertType::UnsupportedCertificate43 
QSslSocket::AlertType::CertificateRevoked44 
QSslSocket::AlertType::CertificateExpired45 
QSslSocket::AlertType::CertificateUnknown46 
QSslSocket::AlertType::IllegalParameter47 
QSslSocket::AlertType::UnknownCa48 
QSslSocket::AlertType::AccessDenied49 
QSslSocket::AlertType::DecodeError50 
QSslSocket::AlertType::DecryptError51 
QSslSocket::AlertType::ExportRestriction60 
QSslSocket::AlertType::ProtocolVersion70 
QSslSocket::AlertType::InsufficientSecurity71 
QSslSocket::AlertType::InternalError80 
QSslSocket::AlertType::InappropriateFallback86 
QSslSocket::AlertType::UserCancelled90 
QSslSocket::AlertType::NoRenegotiation100 
QSslSocket::AlertType::MissingExtension109 
QSslSocket::AlertType::UnsupportedExtension110 
QSslSocket::AlertType::CertificateUnobtainable111 
QSslSocket::AlertType::UnrecognizedName112 
QSslSocket::AlertType::BadCertificateStatusResponse113 
QSslSocket::AlertType::BadCertificateHashValue114 
QSslSocket::AlertType::UnknownPskIdentity115 
QSslSocket::AlertType::CertificateRequired116 
QSslSocket::AlertType::NoApplicationProtocol120 
QSslSocket::AlertType::UnknownAlertMessage255 

이 열거형은 Qt 6.0에서 도입되었습니다.

[since 6.1] enum class ImplementedClass

TLS 백엔드가 구현하는 클래스를 열거합니다

QtNetwork 에서 일부 클래스는 백엔드별 구현 방식을 가지므로 구현되지 않은 채로 남겨둘 수 있습니다. 이 열거형의 열거항은 백엔드에서 정상적으로 작동하는 구현을 가진 클래스를 나타냅니다.

상수값설명
QSslSocket::ImplementedClass::Key0QSslKey 클래스.
QSslSocket::ImplementedClass::Certificate1QSslCertificate 클래스.
QSslSocket::ImplementedClass::Socket2QSslSocket 클래스.
QSslSocket::ImplementedClass::DiffieHellman3QSslDiffieHellmanParameters 클래스.
QSslSocket::ImplementedClass::EllipticCurve4QSslEllipticCurve 클래스.
QSslSocket::ImplementedClass::Dtls5QDtls 클래스.
QSslSocket::ImplementedClass::DtlsCookie6QDtlsClientVerifier 클래스.

이 열거형은 Qt 6.1에서 도입되었습니다.

[since 6.1] enum class SupportedFeature

TLS 백엔드가 지원할 수 있는 기능을 나열합니다

QtNetwork 에서 TLS 관련 클래스들은 공개 API를 제공하지만, 일부 백엔드에서는 해당 기능이 구현되지 않을 수 있습니다. 예를 들어, 당사의 SecureTransport 백엔드는 서버 측 ALPN을 지원하지 않습니다. SupportedFeature 열거형의 열거자는 특정 기능이 지원됨을 나타냅니다.

상수값설명
QSslSocket::SupportedFeature::CertificateVerification0백엔드에서 QSslCertificate::verify()가 구현되었음을 나타냅니다.
QSslSocket::SupportedFeature::ClientSideAlpn1클라이언트 측 ALPN(애플리케이션 계층 프로토콜 협상).
QSslSocket::SupportedFeature::ServerSideAlpn2서버 측 ALPN.
QSslSocket::SupportedFeature::Ocsp3OCSP 스테이플링(온라인 인증서 상태 프로토콜).
QSslSocket::SupportedFeature::Psk4사전 공유 키.
QSslSocket::SupportedFeature::SessionTicket5세션 티켓.
QSslSocket::SupportedFeature::Alerts6송수신된 경고 메시지에 대한 정보.

이 열거형은 Qt 6.1에서 도입되었습니다.

© 2026 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.