Spec-Zone.ru › Qt 6.1

Класс 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, Dtls }
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 следует применять с осторожностью, поскольку фундаментальной характеристикой защищенных соединений является их успешное установление.

После шифрования вы используете 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 Project для использования в OpenSSL Toolkit (http://www.openssl.org/).

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

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

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

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

enum 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 излучает этот сигнал, если сообщение об ошибке было отправлено узлу. 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 и решить, продолжать ли рукопожатие или прервать его и отправить сообщение об ошибке узлу. Подключение сигнала-слота должно быть прямым.

См. также 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 отдает предпочтение нативным бэкендам, таким как SecureTransport на Darwin или Schannel на Windows.

Функция была добавлена в 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-ошибок связаны с сертификатом, для большинства из них необходимо указать ожидаемый сертификат, связанный с этой 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

Эта функция возвращает ответы протокола Online Certificate Status Protocol, которые сервер может отправлять во время рукопожатия TLS с использованием OCSP stapling. Список пуст, если не получен определенный ответ или вообще не получен ни один ответ.

Эта функция была добавлена в 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().

END_OF_DOCUMENT_MARKER

QSslCipher QSslSocket::sessionCipher() const

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

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. Локальный сертификат необходим, если вам нужно подтвердить свою личность для удалённого узла. Он используется вместе с закрытым ключом; если вы установите локальный сертификат, вам также необходимо установить закрытый ключ.

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

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

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

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

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

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

[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 и 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.1/qsslsocket.html

Spec-Zone.ru

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