Spec-Zone.ru › Qt

Класс QSslSocket

Класс QSslSocket предоставляет сокет с шифрованием SSL для клиентов и серверов. Подробнее...

Заголовок: #include <QSslSocket>
CMake: find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Наследует: QTcpSocket
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются реентерабельными.

Общедоступные типы

перечисление PeerVerifyMode { VerifyNone, QueryPeer, VerifyPeer, AutoVerifyPeer }
перечисление SslMode { UnencryptedMode, SslClientMode, SslServerMode }

Общедоступные функции

QSslSocket(QObject *parent = nullptr)
виртуальный ~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)
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

Public Slots

void ignoreSslErrors()
void startClientEncryption()
void startServerEncryption()

Signals

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)

Static Public Members

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

Reimplemented Protected Functions

virtual qint64 readData(char *data, qint64 maxlen) override
virtual qint64 skipData(qint64 maxSize) override
virtual qint64 writeData(const char *data, qint64 len) override

Related Non-Members

enum class AlertLevel { Warning, Fatal, Unknown }
enum class AlertType { CloseNotify, UnexpectedMessage, BadRecordMac, RecordOverflow, DecompressionFailure, …, UnknownAlertMessage }
enum class ImplementedClass { Key, Certificate, Socket, DiffieHellman, EllipticCurve, …, DtlsCookie }
enum class SupportedFeature { CertificateVerification, ClientSideAlpn, ServerSideAlpn, Ocsp, Psk, …, Alerts }

Detailed Description

QSslSocket устанавливает защищённое, зашифрованное TCP-соединение, которое можно использовать для передачи зашифрованных данных. Он может работать как в режиме клиента, так и в режиме сервера, и поддерживает современные SSL-протоколы, включая SSL 3 и TLS 1.2. По умолчанию QSslSocket использует только SSL-протоколы, которые считаются безопасными (QSsl::SecureProtocols), но вы можете изменить SSL-протокол, вызвав setProtocol(), если только вы не сделаете это до начала рукопожатия.

SSL-шифрование работает поверх существующего TCP-потока после того, как сокет перейдёт в состояние ConnectedState. Есть два простых способа установить защищённое соединение с помощью QSslSocket: С немедленным SSL-рукопожатием или с отложенным SSL-рукопожатием, происходящим после того, как соединение было установлено в незащищённом режиме.

Наиболее распространённый способ использования QSslSocket — создание объекта и запуск защищённого соединения, вызвав connectToHostEncrypted(). Этот метод запускает немедленный SSL-handshake после установления соединения.

QSslSocket *socket = new QSslSocket(this);
connect(socket, SIGNAL(encrypted()), this, SLOT(ready()));

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

Как и обычный QTcpSocket, QSslSocket переходит в состояние HostLookupState, ConnectingState и, в случае успешного подключения, в ConnectedState. Затем автоматически запускается handshake, и если он успешен, генерируется сигнал encrypted() для указания того, что сокет перешёл в зашифрованное состояние и готов к использованию.

Обратите внимание, что данные могут быть записаны в сокет сразу после возврата из connectToHostEncrypted() (то есть до генерации сигнала encrypted()). Данные помещаются в очередь в QSslSocket до момента генерации сигнала encrypted().

Пример использования отложенного SSL-handshake для защиты существующего соединения — случай, когда SSL-сервер защищает входящее соединение. Предположим, вы создаёте класс SSL-сервера как подкласс QTcpServer. Вы должны переопределить QTcpServer::incomingConnection() примерно так, как показано в примере ниже. Вначале создаётся экземпляр QSslSocket, затем вызывается setSocketDescriptor() для установки дескриптора нового сокета на существующий, переданный в функцию. Затем инициируется SSL-handshake вызовом startServerEncryption().

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(). В этом случае, если ошибка(и) не будут проигнорированы, соединение будет разорвано. Чтобы продолжить, несмотря на возникновение ошибки, можно вызвать ignoreSslErrors(), либо внутри этого слота после возникновения ошибки, либо в любой момент после создания QSslSocket и до попытки подключения. Это позволит QSslSocket игнорировать ошибки, возникающие при установлении идентификатора узла. Игнорирование ошибок во время SSL-handshake следует использовать с осторожностью, так как фундаментальной характеристикой защищённых соединений является успешный handshake.

После шифрования вы используете 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 предоставляет обширный и удобный в использовании API для обработки криптографических шифров, закрытых ключей и локальных, узловых и сертификатов центров сертификации (CA). Он также предоставляет API для обработки ошибок, возникающих во время фазы handshake.

Следующие параметры также можно настроить:

  • Криптографический набор шифров сокета можно настроить до фазы handshake с помощью QSslConfiguration::setCiphers() и QSslConfiguration::setDefaultCiphers().
  • Локальный сертификат и закрытый ключ сокета можно настроить до фазы handshake с помощью setLocalCertificate() и setPrivateKey().
  • Базу данных сертификатов CA можно расширить и настроить с помощью QSslConfiguration::addCaCertificate(), QSslConfiguration::addCaCertificates().

Для расширения списка стандартных сертификатов CA, используемых SSL-сокетами во время SSL-handshake, необходимо обновить стандартную конфигурацию, как показано в примере ниже:

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

Примечание: Корневые сертификаты в Unix (за исключением macOS), если доступны, будут загружаться по требованию из стандартных каталогов сертификатов. Если вы не хотите загружать корневые сертификаты по требованию, необходимо вызвать либо QSslConfiguration::defaultConfiguration().setCaCertificates() до первого SSL-handshake в вашем приложении (например, передав QSslSocket::systemCaCertificates() в него), либо вызвать QSslConfiguration::defaultConfiguration()::setCaCertificates() в вашем экземпляре QSslSocket перед SSL-handshake.

Дополнительную информацию о шифрах и сертификатах см. в QSslCipher и QSslCertificate.

Этот продукт включает программное обеспечение, разработанное проектом OpenSSL для использования в наборе инструментов OpenSSL (http://www.openssl.org/).

Примечание: Обратите внимание на разницу между сигналами bytesWritten() и encryptedBytesWritten(). Для QTcpSocket bytesWritten() генерируется сразу после записи данных в TCP-сокет. Для QSslSocket bytesWritten() генерируется при шифровании данных, а encryptedBytesWritten() — сразу после записи данных в TCP-сокет.

См. также QSslCertificate, QSslCipher и QSslError.

Документация по типам элементов

Перечисление QSslSocket::PeerVerifyMode

Описывает режимы проверки узла для QSslSocket. По умолчанию используется режим AutoVerifyPeer, который выбирает подходящий режим в зависимости от QSocket::SslMode сокета.

Постоянная Значение Описание
QSslSocket::VerifyNone 0 QSslSocket не запрашивает сертификат от узла. Этот режим можно установить, если вам не важен идентификатор другой стороны соединения. Соединение всё равно будет зашифровано, и ваш сокет всё равно отправит свой локальный сертификат узлу, если это запрошено.
QSslSocket::QueryPeer 1 QSslSocket запросит сертификат у узла, но не потребует, чтобы этот сертификат был действительным. Это полезно, когда вы хотите отобразить информацию о сертификате узла пользователю, не влияя на сам SSL-handshake. Этот режим является стандартным для серверов. Примечание: в Schannel это значение работает так же, как VerifyNone.
QSslSocket::VerifyPeer 2 QSslSocket запросит сертификат у узла во время фазы SSL-handshake и потребует, чтобы этот сертификат был действительным. В случае неудачи QSslSocket сгенерирует сигнал QSslSocket::sslErrors(). Этот режим является стандартным для клиентов.
QSslSocket::AutoVerifyPeer 3 QSslSocket автоматически использует QueryPeer для серверных сокетов и VerifyPeer для клиентских сокетов.

См. также QSslSocket::peerVerifyMode().

Перечисление QSslSocket::SslMode

Описывает режимы подключения, доступные для QSslSocket.

Постоянная Значение Описание
QSslSocket::UnencryptedMode 0 Сокет не зашифрован. Его поведение идентично QTcpSocket.
QSslSocket::SslClientMode 1 Сокет — SSL-сокет стороны клиента. Он либо уже зашифрован, либо находится в фазе SSL-handshake (см. QSslSocket::isEncrypted()).
QSslSocket::SslServerMode 2 Сокет — SSL-сокет стороны сервера. Он либо уже зашифрован, либо находится в фазе SSL-handshake (см. QSslSocket::isEncrypted()).

Документация по функциям элементов

QSslSocket::QSslSocket(QObject *parent = nullptr)

Создаёт объект QSslSocket. parent передаётся конструктору QObject. Новый набор шифров сокета cipher устанавливается в набор, возвращаемый статическим методом defaultCiphers().

[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 испускает этот сигнал, если сообщение об ошибке (alert) было отправлено узлу-получателю. level описывает, было ли это предупреждением или ошибкой. type содержит код сообщения об ошибке. Если доступно текстовое описание сообщения об ошибке, оно передаётся в description.

Примечание: Этот сигнал в основном информационный и может использоваться для отладки; обычно он не требует каких-либо действий от приложения.

Примечание: Не все бэкэнды поддерживают эту функциональность.

См. также alertReceived(), QSsl::AlertLevel и QSsl::AlertType.

[signal] void QSslSocket::encrypted()

Этот сигнал испускается, когда QSslSocket переходит в зашифрованный режим. После испускания этого сигнала QSslSocket::isEncrypted() вернёт true, и все последующие передачи по сокету будут зашифрованы.

См. также QSslSocket::connectToHostEncrypted() и QSslSocket::isEncrypted().

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

Этот сигнал испускается, когда QSslSocket записывает зашифрованные данные в сеть. Параметр written содержит количество успешно записанных байтов.

См. также QIODevice::bytesWritten().

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

QSslSocket испускает этот сигнал, если была обнаружена ошибка проверки сертификата и если отчёт об ошибках был включён в QSslConfiguration. Приложение должно проверить error и решить, продолжать ли рукопожатие или прервать его и отправить сообщение об ошибке (alert) узлу-получателю. Подключение сигнала-слота должно быть прямым.

См. также continueInterruptedHandshake(), sslErrors() и QSslConfiguration::setHandshakeMustInterruptOnError().

[slot] void QSslSocket::ignoreSslErrors()

Этот слот сообщает QSslSocket игнорировать ошибки во время фазы рукопожатия QSslSocket и продолжить подключение. Если вы хотите продолжить подключение даже при возникновении ошибок во время фазы рукопожатия, необходимо вызвать этот слот, либо из слота, подключённого к sslErrors(), либо до начала фазы рукопожатия. Если вы не вызываете этот слот, ни в ответ на ошибки, ни до начала рукопожатия, подключение будет прервано после испускания сигнала sslErrors().

Если во время фазы SSL-рукопожатия ошибок нет (т.е. идентичность узла-получателя установлена без проблем), QSslSocket не будет испускать сигнал sslErrors(), и вызывать эту функцию не нужно.

Предупреждение: Убедитесь, что пользователь всегда проверяет ошибки, сообщённые сигналом sslErrors(), и вызывайте этот метод только после подтверждения пользователя, что продолжение возможно. При возникновении непредвиденных ошибок подключение следует прервать. Вызов этого метода без проверки фактических ошибок, скорее всего, создаст угрозу безопасности для вашего приложения. Используйте его с большой осторожностью!

См. также sslErrors().

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

Этот сигнал испускается, когда QSslSocket переходит из QSslSocket::UnencryptedMode в QSslSocket::SslClientMode или QSslSocket::SslServerMode. mode — новый режим.

См. также QSslSocket::mode().

[signal, since 5.15] void QSslSocket::newSessionTicketReceived()

Если во время рукопожатия был согласован протокол TLS 1.3, QSslSocket испускает этот сигнал после получения сообщения NewSessionTicket. Срок действия сессии и билета сессии обновляются в конфигурации сокета. Сессия может использоваться для возобновления сессии (и сокращённого рукопожатия) в будущих TLS-соединениях.

Примечание: Эта функциональность доступна только с OpenSSL-бэкэндом и требует OpenSSL версии 1.1.1 или выше.

Эта функция была добавлена в Qt 5.15.

См. также QSslSocket::sslConfiguration(), QSslConfiguration::sessionTicket() и QSslConfiguration::sessionTicketLifeTimeHint().

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

QSslSocket может испускать этот сигнал несколько раз во время SSL-рукопожатия, прежде чем будет установлено шифрование, чтобы указать, что произошла ошибка при установлении личности узла-получателя. Ошибка, как правило, указывает на то, что QSslSocket не может безопасно идентифицировать узла-получателя.

Этот сигнал даёт вам раннее уведомление о проблеме. Подключившись к этому сигналу, вы можете вручную разорвать подключение внутри подключённого слота до завершения рукопожатия. Если никаких действий не будет предпринято, QSslSocket продолжит испускать QSslSocket::sslErrors().

См. также sslErrors().

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

QSslSocket испускает этот сигнал, когда он согласовывает криптосистему PSK, и поэтому требуется аутентификация PSK.

При использовании PSK клиент должен отправить серверу действительную идентификацию и действительный предварительно установленный ключ для продолжения SSL-рукопожатия. Приложения могут предоставить эту информацию в слоте, подключённом к этому сигналу, заполнив переданный объект authenticator в соответствии со своими потребностями.

Примечание: Игнорирование этого сигнала или невозможность предоставить необходимые учетные данные приведут к сбою рукопожатия и, следовательно, к прерыванию соединения.

Примечание: Объект authenticator принадлежит сокету и не должен удаляться приложением.

Эта функция была добавлена в Qt 5.5.

См. также QSslPreSharedKeyAuthenticator.

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

QSslSocket испускает этот сигнал после SSL-рукопожатия, чтобы указать, что произошла одна или несколько ошибок при установлении личности узла-получателя. Ошибки обычно указывают на то, что QSslSocket не может безопасно идентифицировать узла-получателя. Если никаких действий не предпринято, подключение будет прервано после испускания этого сигнала.

Если вы хотите продолжить подключение, несмотря на возникшие ошибки, необходимо вызвать QSslSocket::ignoreSslErrors() внутри слота, подключённого к этому сигналу. Если вам необходимо получить доступ к списку ошибок позже, вы можете вызвать sslHandshakeErrors().

errors содержит одну или несколько ошибок, которые мешают QSslSocket проверить личность узла-получателя.

Примечание: Вы не можете использовать Qt::QueuedConnection при подключении к этому сигналу; в противном случае вызов QSslSocket::ignoreSslErrors() не повлияет на результат.

См. также peerVerifyError().

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

[virtual] QSslSocket::~QSslSocket()

Уничтожает QSslSocket.

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

Возвращает имя бэкенда, который использует QSslSocket и связанные классы. Если активный бэкенд не был явно задан, эта функция возвращает имя по умолчанию, которое QSslSocket выбирает неявно из списка доступных бэкендов.

Примечание: При неявном выборе бэкенда по умолчанию QSslSocket отдаёт предпочтение бэкенду OpenSSL, если он доступен.

Функция была добавлена в Qt 6.1.

См. также setActiveBackend() и availableBackends().

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

Переопределяет: QIODevice::atEnd() const.

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

Возвращает имена доступных в данный момент бэкендов. Эти имена в нижнем регистре, например, "openssl", "securetransport", "schannel" (аналогично уже существующим именам функций для TLS-бэкендов в Qt).

Функция была добавлена в 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.

Возвращает true , если можно прочитать одну строку (заканчивающуюся одним ASCII-символом '\n') расшифрованных символов; в противном случае возвращается false.

[override virtual] void QSslSocket::close()

Переопределяет: QAbstractSocket::close().

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

Инициализирует зашифрованное подключение к устройству hostName по порту port, используя mode в качестве OpenMode. Это эквивалентно вызову connectToHost() для установления подключения, за которым следует вызов startClientEncryption(). Параметр protocol может использоваться для указания сетевого протокола (например, IPv4 или IPv6).

QSslSocket сначала переходит в состояние HostLookupState. Затем, после перехода в цикл обработки событий или в одну из функций waitFor..., он переходит в состояние ConnectingState, излучает connected() и инициирует SSL-рукопожатие клиента. При каждом изменении состояния QSslSocket излучает сигнал stateChanged().

После инициирования SSL-рукопожатия клиента, если идентичность партнёра не может быть установлена, излучается сигнал sslErrors(). Если вы хотите пропустить ошибки и продолжить подключение, необходимо вызвать ignoreSslErrors(), либо изнутри обработчика сигнала sslErrors(), либо до перехода в зашифрованный режим. Если ignoreSslErrors() не вызывается, подключение прерывается, излучается сигнал disconnected(), и QSslSocket возвращается в состояние UnconnectedState.

Если SSL-рукопожатие успешно, QSslSocket излучает encrypted().

QSslSocket socket;
connect(&socket, SIGNAL(encrypted()), receiver, SLOT(socketEncrypted()));

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

Примечание: В примере показано, что текст может быть записан в сокет сразу после запроса зашифрованного соединения, до излучения сигнала encrypted(). В таких случаях текст помещается в очередь объекта и записывается в сокет после установления соединения и излучения сигнала encrypted().

По умолчанию для mode установлено значение ReadWrite.

Если вы хотите создать QSslSocket на серверной стороне соединения, вы должны вместо этого вызвать startServerEncryption() при получении входящего подключения через QTcpServer.

См. также connectToHost(), startClientEncryption(), waitForConnected() и waitForEncrypted().

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

Это перегруженная функция.

В дополнение к исходному поведению connectToHostEncrypted этот перегруженный метод позволяет использовать другое имя хоста (sslPeerName) для проверки сертификата вместо имени, используемого для TCP-соединения (hostName).

См. также connectToHostEncrypted().

[since 6.0] void QSslSocket::continueInterruptedHandshake()

Если приложение хочет завершить рукопожатие даже после получения сигнала handshakeInterruptedOnError(), оно должно вызвать эту функцию. Этот вызов должен быть выполнен из обработчика сигнала. Связь сигнал-слот должна быть прямой.

Функция была добавлена в Qt 6.0.

См. также handshakeInterruptedOnError() и QSslConfiguration::setHandshakeMustInterruptOnError().

qint64 QSslSocket::encryptedBytesAvailable() const

Возвращает количество зашифрованных байтов, ожидающих дешифрования. Обычно эта функция возвращает 0, потому что QSslSocket дешифрует входящие данные, как только это возможно.

qint64 QSslSocket::encryptedBytesToWrite() const

Возвращает количество зашифрованных байтов, ожидающих записи в сеть.

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

Это перегруженная функция.

Этот метод сообщает QSslSocket игнорировать только ошибки, указанные в errors.

Примечание: Так как большинство SSL-ошибок связаны с сертификатом, для большинства из них необходимо установить ожидаемый сертификат, с которым связана эта ошибка. Например, если вы хотите подключиться к серверу, использующему самозаверяемый сертификат, рассмотрите следующий фрагмент:

QList<QSslCertificate> cert = QSslCertificate::fromPath(QLatin1String("server-certificate.pem"));
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 = {})

Возвращает true, если класс 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 = {})

Возвращает true, если функция ft поддерживается бэкендом с именем backendName. Пустое значение backendName понимается как запрос о текущем активном бэкенде.

Эта функция была добавлена в Qt 6.1.

См. также QSsl::SupportedFeature и supportedFeatures().

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

Возвращает true, если protocol поддерживается бэкендом с именем backendName. Пустое значение backendName понимается как запрос о текущем активном бэкенде.

Эта функция была добавлена в Qt 6.1.

См. также supportedProtocols().

QSslCertificate QSslSocket::localCertificate() const

Возвращает локальный сертификат сокета, или пустой сертификат, если локальный сертификат не был назначен.

См. также setLocalCertificate() и privateKey().

[since 5.1] QList<QSslCertificate> QSslSocket::localCertificateChain() const

Возвращает цепочку локальных сертификатов сокета, или пустой список, если локальные сертификаты не были назначены.

Эта функция была добавлена в Qt 5.1.

См. также setLocalCertificateChain().

QSslSocket::SslMode QSslSocket::mode() const

Возвращает текущий режим сокета: UnencryptedMode, где QSslSocket ведет себя идентично QTcpSocket, или один из режимов SslClientMode или SslServerMode, где клиент либо ведет переговоры, либо находится в зашифрованном режиме.

При изменении режима QSslSocket испускает сигнал modeChanged().

См. также SslMode.

[since 5.13] QList<QOcspResponse> QSslSocket::ocspResponses() const

Возвращает ответы протокола статуса онлайн-сертификата (OCSP), которые сервер может отправить во время рукопожатия TLS с использованием OCSP-стаплинга. Список пуст, если не получен определённый ответ или вообще не получено ответа.

Эта функция была добавлена в Qt 5.13.

См. также QSslConfiguration::setOcspStaplingEnabled().

QSslCertificate QSslSocket::peerCertificate() const

Возвращает цифровой сертификат удаленного узла (т.е., непосредственный сертификат узла, к которому вы подключены), или нулевой сертификат, если удалённый узел не предоставил сертификат.

Сертификат удалённого узла проверяется автоматически во время фазы рукопожатия, поэтому эта функция обычно используется для получения сертификата для отображения или для диагностики соединения. Он содержит информацию об удалённом узле, включая его имя хоста, издателя сертификата и открытый ключ удалённого узла.

Поскольку сертификат удалённого узла устанавливается во время фазы рукопожатия, доступ к нему можно получить из слота, подключенного к сигналу sslErrors() или encrypted().

Если возвращается нулевой сертификат, это может означать, что рукопожатие SSL завершилось неудачно, что удалённый узел не предоставил сертификат или что нет подключения.

Если вы хотите проверить всю цепочку сертификатов удалённого узла, используйте peerCertificateChain() для получения всех сертификатов сразу.

См. также peerCertificateChain().

QList<QSslCertificate> QSslSocket::peerCertificateChain() const

Возвращает цепочку цифровых сертификатов удалённого узла, или пустой список сертификатов.

Сертификаты удалённого узла проверяются автоматически во время фазы рукопожатия. Эта функция обычно используется для получения сертификатов для отображения или для диагностики соединения. Сертификаты содержат информацию об удалённом узле и издателях сертификатов, включая имя хоста, имена издателей и открытые ключи издателей.

Сертификаты удалённого узла устанавливаются в QSslSocket во время фазы рукопожатия, поэтому вы можете вызвать эту функцию из слота, подключенного к сигналу sslErrors() или encrypted().

Если возвращается пустой список, это может означать, что рукопожатие SSL завершилось неудачно, что удалённый узел не предоставил сертификат или что нет подключения.

Если вам нужен только непосредственный сертификат удалённого узла, используйте peerCertificate().

См. также peerCertificate().

int QSslSocket::peerVerifyDepth() const

Возвращает максимальное количество сертификатов в цепочке сертификатов удалённого узла, которые должны быть проверены во время фазы рукопожатия SSL, или 0 (значение по умолчанию), если максимальная глубина не была установлена, что указывает на необходимость проверки всей цепочки сертификатов.

Сертификаты проверяются в порядке выдачи, начиная с сертификата самого удалённого узла, затем с сертификата его издателя и т.д.

См. также setPeerVerifyDepth() и peerVerifyMode().

QSslSocket::PeerVerifyMode QSslSocket::peerVerifyMode() const

Возвращает режим проверки сертификата сокета. Этот режим определяет, должен ли QSslSocket запросить сертификат у удалённого узла (т.е., клиент запрашивает сертификат у сервера или сервер запрашивает сертификат у клиента), и должен ли он потребовать, чтобы этот сертификат был действительным.

Режим по умолчанию — AutoVerifyPeer, который сообщает QSslSocket использовать VerifyPeer для клиентов и QueryPeer для серверов.

См. также setPeerVerifyMode(), peerVerifyDepth() и mode().

QString QSslSocket::peerVerifyName() const

Возвращает имя хоста для проверки сертификата, установленное с помощью setPeerVerifyName или connectToHostEncrypted.

См. также setPeerVerifyName() и connectToHostEncrypted().

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, since 5.0] void QSslSocket::resume()

Переопределяет: QAbstractSocket::resume().

Продолжает передачу данных по сокету после его приостановки. Если для этого сокета был вызван «setPauseMode(QAbstractSocket::PauseOnSslErrors);» и получен сигнал sslErrors(), для продолжения работы сокета необходимо вызвать этот метод.

Эта функция была добавлена в Qt 5.0.

См. также QAbstractSocket::pauseMode() и QAbstractSocket::setPauseMode().

QSslCipher QSslSocket::sessionCipher() const

Возвращает криптографический шифр сокета или нулевой шифр, если соединение не зашифровано. Шифр сокета для сессии устанавливается во время фазы рукопожатия. Шифр используется для шифрования и дешифрования данных, передаваемых через сокет.

QSslSocket также предоставляет функции для установки упорядоченного списка шифров, из которых фаза рукопожатия в конечном итоге выберет шифр сессии. Этот упорядоченный список должен быть установлен до начала фазы рукопожатия.

См. также QSslConfiguration::ciphers(), QSslConfiguration::setCiphers(), QSslConfiguration::setCiphers(), QSslConfiguration::ciphers() и QSslConfiguration::supportedCiphers().

[since 5.4] QSsl::SslProtocol QSslSocket::sessionProtocol() const

Возвращает протокол SSL/TLS сокета или UnknownProtocol, если соединение не зашифровано. Протокол сокета для сессии устанавливается во время фазы рукопожатия.

Эта функция была добавлена в Qt 5.4.

См. также protocol() и setProtocol().

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

Возвращает true, если бэкенд с именем backendName был установлен в качестве активного бэкенда. backendName должен быть одним из имен, возвращаемых функцией availableBackends().

Примечание: Приложение не может одновременно использовать разные бэкенды. Это означает, что нестандартный бэкенд должен быть выбран до использования QSslSocket или связанных классов, например, QSslCertificate или QSslKey.

Эта функция была добавлена в Qt 6.1.

См. также activeBackend() и availableBackends().

void QSslSocket::setLocalCertificate(const QSslCertificate &certificate)

Устанавливает локальный сертификат сокета на certificate. Локальный сертификат необходим, если требуется подтвердить свою личность для собеседника. Он используется вместе с закрытым ключом; если вы устанавливаете локальный сертификат, вы также должны установить закрытый ключ.

Локальный сертификат и закрытый ключ всегда необходимы для серверных сокетов, но также редко используются клиентскими сокетами, если сервер требует аутентификации клиента.

Примечание: Бэкенд SSL Secure Transport на macOS может обновлять стандартный ключ (вероятно, ключ входа в систему) путём импорта локальных сертификатов и ключей. Это также может привести к появлению системных диалогов с запросом разрешения, когда ваше приложение использует эти закрытые ключи. Если такое поведение нежелательно, установите переменную среды QT_SSL_USE_TEMPORARY_KEYCHAIN в отличное от нуля значение; это заставит QSslSocket использовать свой временный ключ.

См. также localCertificate() и setPrivateKey().

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

Это перегруженная функция.

Устанавливает локальный сертификат сокета на первый найденный в файле path, который парсится в соответствии с указанным format.

[since 5.1] void QSslSocket::setLocalCertificateChain(const QList<QSslCertificate> &localChain)

Устанавливает цепочку сертификатов, которая будет представлена собеседнику во время рукопожатия SSL, на localChain.

Эта функция была добавлена в Qt 5.1.

См. также 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)

Устанавливает имя хоста hostName для проверки сертификата вместо имени, используемого для TCP-соединения.

См. также peerVerifyName() и connectToHostEncrypted().

void QSslSocket::setPrivateKey(const QSslKey &key)

Устанавливает закрытый ключ сокета на key. Закрытый ключ и локальный сертификат используются клиентами и серверами, которые должны доказать свою личность собеседникам 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. Если закодированный ключ зашифрован, passPhrase используется для его расшифровки.

Закрытый ключ сокета устанавливается на созданный ключ. Закрытый ключ и локальный сертификат используются клиентами и серверами, которые должны доказать свою личность собеседникам 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 size).

Устанавливает размер внутреннего буфера чтения 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).

Инициализирует QSslSocket с помощью дескриптора нативного сокета socketDescriptor. Возвращает true, если socketDescriptor принят как действительный дескриптор сокета; в противном случае возвращает 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().

[since 5.15] QList<QSslError> QSslSocket::sslHandshakeErrors() const

Возвращает список последних ошибок SSL, произошедших во время рукопожатия. Этот список идентичен списку, который QSslSocket передает через сигнал sslErrors(). Если соединение зашифровано без ошибок, эта функция вернет пустой список.

Эта функция была добавлена в Qt 5.15.

См. также connectToHostEncrypted().

[static, since 5.4] long QSslSocket::sslLibraryBuildVersionNumber()

Возвращает номер версии библиотеки SSL, используемой во время компиляции. Если поддержка SSL недоступна, возвращается -1.

Эта функция была добавлена в Qt 5.4.

См. также sslLibraryVersionNumber().

[static, since 5.4] QString QSslSocket::sslLibraryBuildVersionString()

Возвращает строку версии библиотеки SSL, используемой во время компиляции. Если поддержка SSL недоступна, возвращается пустая строка.

Эта функция была добавлена в Qt 5.4.

См. также sslLibraryVersionString().

[static, since 5.0] long QSslSocket::sslLibraryVersionNumber()

Возвращает номер версии библиотеки SSL, используемой во время выполнения. Обратите внимание, что это версия библиотеки, используемой во время выполнения, а не во время компиляции. Если поддержка SSL недоступна, возвращается -1.

Эта функция была добавлена в Qt 5.0.

[static, since 5.0] QString QSslSocket::sslLibraryVersionString()

Возвращает строку версии библиотеки SSL, используемой во время выполнения. Обратите внимание, что это версия библиотеки, используемой во время выполнения, а не во время компиляции. Если поддержка SSL недоступна, возвращается пустая строка.

Эта функция была добавлена в Qt 5.0.

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

Возвращает true, если данная платформа поддерживает SSL; в противном случае возвращает 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.

Следующий пример ожидает до одной секунды, пока сокет не будет зашифрован:

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] Перечисление AlertLevel

Описывает уровень сообщения об ошибке

Это перечисление описывает уровень сообщения об ошибке, которое было отправлено или получено.

Константа Значение Описание
QSslSocket::AlertLevel::Warning 0 Сообщение об ошибке, не являющееся фатальным
QSslSocket::AlertLevel::Fatal 1 Фатальное сообщение об ошибке; базовый уровень обработки такой ошибки будет закрывать соединение.
QSslSocket::AlertLevel::Unknown 2 Сообщение об ошибке с неизвестным уровнем серьезности.

Это перечисление было добавлено или изменено в Qt 6.0.

[since 6.0] Перечисление AlertType

Перечисляет возможные коды сообщений об ошибках

См. RFC 8446, раздел 6, чтобы узнать о возможных значениях и их значении.

Константа Значение Описание
QSslSocket::AlertType::CloseNotify 0 ,
QSslSocket::AlertType::UnexpectedMessage 10
QSslSocket::AlertType::BadRecordMac 20
QSslSocket::AlertType::RecordOverflow 22
QSslSocket::AlertType::DecompressionFailure 30
QSslSocket::AlertType::HandshakeFailure 40
QSslSocket::AlertType::NoCertificate 41
QSslSocket::AlertType::BadCertificate 42
QSslSocket::AlertType::UnsupportedCertificate 43
QSslSocket::AlertType::CertificateRevoked 44
QSslSocket::AlertType::CertificateExpired 45
QSslSocket::AlertType::CertificateUnknown 46
QSslSocket::AlertType::IllegalParameter 47
QSslSocket::AlertType::UnknownCa 48
QSslSocket::AlertType::AccessDenied 49
QSslSocket::AlertType::DecodeError 50
QSslSocket::AlertType::DecryptError 51
QSslSocket::AlertType::ExportRestriction 60
QSslSocket::AlertType::ProtocolVersion 70
QSslSocket::AlertType::InsufficientSecurity 71
QSslSocket::AlertType::InternalError 80
QSslSocket::AlertType::InappropriateFallback 86
QSslSocket::AlertType::UserCancelled 90
QSslSocket::AlertType::NoRenegotiation 100
QSslSocket::AlertType::MissingExtension 109
QSslSocket::AlertType::UnsupportedExtension 110
QSslSocket::AlertType::CertificateUnobtainable 111
QSslSocket::AlertType::UnrecognizedName 112
QSslSocket::AlertType::BadCertificateStatusResponse 113
QSslSocket::AlertType::BadCertificateHashValue 114
QSslSocket::AlertType::UnknownPskIdentity 115
QSslSocket::AlertType::CertificateRequired 116
QSslSocket::AlertType::NoApplicationProtocol 120
QSslSocket::AlertType::UnknownAlertMessage 255

Это перечисление было добавлено или изменено в Qt 6.0.

[since 6.1] Перечисление ImplementedClass

Перечисляет классы, реализованные TLS-бекендом

В QtNetwork некоторые классы имеют реализацию, специфичную для бэкенда, и поэтому могут быть не реализованы. Элементы перечисления в этом перечислении указывают, какой класс имеет рабочую реализацию в бэкенде.

Константа Значение Описание
QSslSocket::ImplementedClass::Key 0 Класс QSslKey.
QSslSocket::ImplementedClass::Certificate 1 Класс QSslCertificate.
QSslSocket::ImplementedClass::Socket 2 Класс QSslSocket.
QSslSocket::ImplementedClass::DiffieHellman 3 Класс QSslDiffieHellmanParameters.
QSslSocket::ImplementedClass::EllipticCurve 4 Класс QSslEllipticCurve.
QSslSocket::ImplementedClass::Dtls 5 Класс QDtls.
QSslSocket::ImplementedClass::DtlsCookie 6 Класс QDtlsClientVerifier.

Это перечисление было добавлено или изменено в Qt 6.1.

[since 6.1] Перечисление SupportedFeature

Перечисляет возможные функции, поддерживаемые TLS-бекендом

В QtNetwork классы, связанные с TLS, имеют общедоступный API, который может быть не реализован некоторыми бэкендами, например, наш бэкенд SecureTransport не поддерживает ALPN на стороне сервера. Перечисления из перечисления SupportedFeature указывают, что конкретная функция поддерживается.

Константа Значение Описание
QSslSocket::SupportedFeature::CertificateVerification 0 Указывает, что QSslCertificate::verify() реализован в бэкенде.
QSslSocket::SupportedFeature::ClientSideAlpn 1 ALPN (Протокол переговоров прикладного уровня) на стороне клиента.
QSslSocket::SupportedFeature::ServerSideAlpn 2 ALPN на стороне сервера.
QSslSocket::SupportedFeature::Ocsp 3 OCSP-стабилизация (Протокол онлайн-статуса сертификата).
QSslSocket::SupportedFeature::Psk 4 Предварительно установленные ключи.
QSslSocket::SupportedFeature::SessionTicket 5 Билеты сеанса.
QSslSocket::SupportedFeature::Alerts 6 Информация о сообщениях об ошибках, отправленных и полученных.

Это перечисление было добавлено или изменено в Qt 6.1.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qsslsocket.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API