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 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 암호화는 소켓이 커넥티드 상태에 들어간 후 기존 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이 상대방의 ID를 설정할 때 발생하는 오류를 무시할 수 있습니다. 보안 연결의 기본 특성은 성공적인 핸드셰이크로 설정되어야 한다는 것이므로 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);

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

암호 및 인증서에 대한 자세한 내용은 QSslCipherQSslCertificate 을 참조하세요.

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

참고: bytesWritten() 신호와 encryptedBytesWritten() 신호의 차이점에 유의하세요. QTcpSocket , bytesWritten()의 경우 데이터가 TCP 소켓에 쓰여지는 즉시 전송됩니다. QSslSocket의 경우 bytesWritten()는 데이터가 암호화될 때, encryptedBytesWritten()는 데이터가 TCP 소켓에 쓰여지는 즉시 전송됩니다.

QSslCertificate, QSslCipher, QSslError참조하세요 .

멤버 유형 문서

enum QSslSocket::PeerVerifyMode

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

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

QSslSocket::peerVerifyMode()도 참조하세요 .

enum QSslSocket::SslMode

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

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

멤버 함수 문서

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

parentQObject 의 생성자에게 전달됩니다. 새 소켓의 cipher 제품군은 정적 메서드 defaultCiphers()가 반환하는 제품군으로 설정됩니다.

[virtual noexcept] QSslSocket::~QSslSocket()

QSslSocket 를 파괴합니다.

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

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

참고: 기본 백엔드를 암시적으로 선택할 때 QSslSocket 는 사용 가능한 경우 OpenSSL 백엔드를 선호합니다. 사용할 수 없는 경우 Windows에서는 Schannel 백엔드가 암시적으로 선택되고, Darwin 플랫폼에서는 보안 전송이 선택됩니다. 이러한 백엔드를 사용할 수 없는 경우 사용자 지정 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().

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

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

QSslSocket 먼저 호스트 조회 상태를 입력합니다. 그런 다음 이벤트 루프 또는 waitFor...() 함수 중 하나를 입력한 후 연결 상태로 들어가고 connected()를 전송한 다음 SSL 클라이언트 핸드셰이크를 시작합니다. 각 상태 변경 시 QSslSocketstateChanged() 신호를 전송합니다.

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()도 참조하십시오 .

[signal] void QSslSocket::encrypted()

이 신호는 QSslSocket 가 암호화 모드로 전환될 때 전송됩니다. 이 신호가 전송된 후 QSslSocket::isEncrypted()는 참을 반환하고 소켓의 모든 추가 전송이 암호화됩니다.

QSslSocket::connectToHostEncrypted() 및 QSslSocket::isEncrypted()도 참조하세요 .

qint64 QSslSocket::encryptedBytesAvailable() const

복호화 대기 중인 암호화된 바이트 수를 반환합니다. 일반적으로 이 함수는 QSslSocket 수신 데이터를 가능한 한 빨리 해독하기 때문에 0을 반환합니다.

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()

이 슬롯은 QSslSocketQSslSocket 의 핸드셰이크 단계 중 오류를 무시하고 연결을 계속하라고 알려줍니다. 핸드셰이크 단계에서 오류가 발생하더라도 연결을 계속하려면 sslErrors()에 연결된 슬롯에서 또는 핸드셰이크 단계 전에 이 슬롯을 호출해야 합니다. 오류에 대한 응답으로 또는 핸드셰이크 전에 이 슬롯을 호출하지 않으면 sslErrors() 신호가 전송된 후 연결이 끊어집니다.

SSL 핸드셰이크 단계에서 오류가 없는 경우(즉, 상대방의 신원이 문제 없이 설정된 경우) QSslSocketsslErrors() 신호를 보내지 않으므로 이 함수를 호출할 필요가 없습니다.

경고: 항상 사용자가 sslErrors() 신호로 보고된 오류를 검사하도록 하고, 진행이 정상이라는 사용자의 확인이 있을 때만 이 메서드를 호출하세요. 예기치 않은 오류가 발생하면 연결을 중단해야 합니다. 실제 오류를 검사하지 않고 이 메서드를 호출하면 애플리케이션에 보안 위험이 발생할 가능성이 높습니다. 주의해서 사용하세요!

sslErrors()도 참조하세요 .

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

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

이 메서드는 QSslSocketerrors 에 주어진 오류만 무시하도록 지시합니다.

참고: 대부분의 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 = {})

cl 클래스가 backendName 이라는 백엔드에 의해 구현된 경우 참을 반환합니다. 비어있는 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::SupportedFeaturesupportedFeatures()도 참조하십시오 .

[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

소켓의 현재 모드를 반환합니다. QSslSocketQTcpSocket 과 동일하게 동작하는 UnencryptedMode 또는 클라이언트가 협상 중이거나 암호화된 모드인 SslClientMode 또는 SslServerMode 중 하나를 반환합니다.

모드가 변경되면 QSslSocketmodeChanged()을 반환합니다.

SslMode도 참조하세요 .

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

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

QSslSocket::mode()도 참조하세요 .

[signal] void QSslSocket::newSessionTicketReceived()

핸드셰이크 중에 TLS 1.3 프로토콜이 협상된 경우 QSslSocket 는 NewSessionTicket 메시지를 수신한 후 이 신호를 보냅니다. 세션 및 세션 티켓의 수명 힌트는 소켓의 구성에서 업데이트됩니다. 이 세션은 향후 TLS 연결에서 세션 재개(및 단축된 핸드셰이크)에 사용할 수 있습니다.

참고: 이 기능은 OpenSSL 백엔드에서만 사용할 수 있으며 OpenSSL 버전 1.1.1 이상이 필요합니다.

QSslSocket::sslConfiguration(), QSslConfiguration::sessionTicket() 및 QSslConfiguration::sessionTicketLifeTimeHint()도 참조하세요 .

QList<QOcspResponse> QSslSocket::ocspResponses() const

이 함수는 서버가 OCSP 스테이플링을 사용하여 TLS 핸드셰이크 중에 보낼 수 있는 온라인 인증서 상태 프로토콜 응답을 반환합니다. 확실한 응답이 없거나 응답을 전혀 받지 못한 경우 목록은 비어 있습니다.

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를 사용할 때 클라이언트는 유효한 ID와 유효한 사전 공유 키를 서버에 보내야 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(문자 *데이터, qint64 maxSize).

[override virtual] void QSslSocket::resume()

다시 구현합니다: QAbstractSocket::resume().

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

QAbstractSocket::pauseMode() 및 QAbstractSocket::setPauseMode()도 참조하세요 .

QSslCipher QSslSocket::sessionCipher() const

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

QSslSocket 또한 핸드셰이크 단계에서 최종적으로 세션 암호를 선택할 암호의 순서 목록을 설정하는 기능도 제공합니다. 핸드셰이크 단계가 시작되기 전에 이 정렬된 목록이 준비되어 있어야 합니다.

QSslConfiguration::ciphers(), QSslConfiguration::setCiphers(), QSslConfiguration::setCiphers(), QSslConfiguration::ciphers() 및 QSslConfiguration::supportedCiphers()도 참조하세요 .

QSsl::SslProtocol QSslSocket::sessionProtocol() const

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

protocol() 및 setProtocol()도 참조하세요 .

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

backendName 이름의 백엔드가 활성 백엔드로 설정된 경우 true를 반환합니다. backendNameavailableBackends()에서 반환하는 이름 중 하나이어야 합니다.

참고: 애플리케이션은 서로 다른 백엔드를 동시에 혼합할 수 없습니다. 이는 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 을 지정된 format 에 따라 구문 분석된 파일 path 에서 찾은 첫 번째 소켓으로 설정합니다.

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)

소켓의 비공개 keykey 로 설정합니다. 비공개 키와 로컬 certificate 은 SSL 피어에게 자신의 신원을 증명해야 하는 클라이언트와 서버에서 사용합니다.

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

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 소켓 디스크립터, QAbstractSocket::소켓 상태 소켓 상태, QIODeviceBase::오픈 모드 오픈 모드).

네이티브 소켓 기술자 socketDescriptorQSslSocket 를 초기화합니다. socketDescriptor 이 유효한 소켓 기술자로 받아들여지면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다. 소켓은 openMode 에 지정된 모드로 열리고 state 에 지정된 소켓 상태로 들어갑니다.

참고: 동일한 네이티브 소켓 기술자로 두 개의 소켓을 초기화할 수 없습니다.

socketDescriptor()도 참조하세요 .

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

재구현합니다: QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption 옵션, const QVariant &value).

주어진 optionvalue 에 설명된 값으로 설정합니다.

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 옵션의 값을 반환합니다.

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 오류 목록을 반환합니다. 이는 sslErrors() 신호를 통해 QSslSocket 이 전달하는 것과 동일한 목록입니다. 연결이 오류 없이 암호화되었다면 이 함수는 빈 목록을 반환합니다.

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::SupportedFeatureactiveBackend()도 참조하십시오 .

[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 ()가 전송되면 이 함수는 참을 반환하고, 그렇지 않은 경우(예: 소켓 연결이 끊어졌거나 SSL 핸드셰이크가 실패한 경우) 거짓을 반환합니다.

다음 예제는 소켓이 암호화될 때까지 최대 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 *데이터, qint64 크기).

관련 비회원

[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 에서 일부 클래스는 백엔드 전용 구현이 있으므로 구현되지 않은 상태로 둘 수 있습니다. 이 열거형의 열거자는 백엔드에서 작동하는 구현이 있는 클래스를 나타냅니다.

Constant설명
QSslSocket::ImplementedClass::Key0클래스 QSslKey.
QSslSocket::ImplementedClass::Certificate1클래스 QSslCertificate.
QSslSocket::ImplementedClass::Socket2클래스 QSslSocket.
QSslSocket::ImplementedClass::DiffieHellman3클래스 QSslDiffieHellmanParameters.
QSslSocket::ImplementedClass::EllipticCurve4Class QSslEllipticCurve.
QSslSocket::ImplementedClass::Dtls5Class QDtls.
QSslSocket::ImplementedClass::DtlsCookie6클래스 QDtlsClientVerifier.

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

[since 6.1] enum class SupportedFeature

TLS 백엔드가 지원하는 가능한 기능을 열거합니다.

QtNetwork 에서 TLS 관련 클래스에는 일부 백엔드에서 구현되지 않은 채로 남겨질 수 있는 공용 API가 있습니다(예: SecureTransport 백엔드는 서버 측 ALPN을 지원하지 않음). SupportedFeature 열거형의 열거자는 특정 기능이 지원됨을 나타냅니다.

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

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

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