QSslSocket Class
QSslSocketクラスは、クライアントとサーバーの両方にSSL暗号化ソケットを提供します。詳細...
ヘッダ | #include <QSslSocket> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
を継承する: | QTcpSocket |
- 継承メンバを含む全メンバのリスト
- QSslSocketは、Network Programming APIに含まれています。
注意:このクラスの関数はすべてリエントラントです。
パブリック型
enum | PeerVerifyMode { VerifyNone, QueryPeer, VerifyPeer, AutoVerifyPeer } |
enum | SslMode { UnencryptedMode, SslClientMode, SslServerMode } |
パブリック関数
QSslSocket(QObject *parent = nullptr) | |
virtual | ~QSslSocket() |
void | connectToHostEncrypted(const QString &hostName, quint16 port, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol) |
void | connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol) |
(since 6.0) void | continueInterruptedHandshake() |
qint64 | encryptedBytesAvailable() const |
qint64 | encryptedBytesToWrite() const |
void | ignoreSslErrors(const QList<QSslError> &errors) |
bool | isEncrypted() const |
QSslCertificate | localCertificate() const |
QList<QSslCertificate> | localCertificateChain() const |
QSslSocket::SslMode | mode() const |
QList<QOcspResponse> | ocspResponses() const |
QSslCertificate | peerCertificate() const |
QList<QSslCertificate> | peerCertificateChain() const |
int | peerVerifyDepth() const |
QSslSocket::PeerVerifyMode | peerVerifyMode() const |
QString | peerVerifyName() const |
QSslKey | privateKey() const |
QSsl::SslProtocol | protocol() const |
QSslCipher | sessionCipher() const |
QSsl::SslProtocol | sessionProtocol() const |
void | setLocalCertificate(const QSslCertificate &certificate) |
void | setLocalCertificate(const QString &path, QSsl::EncodingFormat format = QSsl::Pem) |
void | setLocalCertificateChain(const QList<QSslCertificate> &localChain) |
void | setPeerVerifyDepth(int depth) |
void | setPeerVerifyMode(QSslSocket::PeerVerifyMode mode) |
void | setPeerVerifyName(const QString &hostName) |
void | setPrivateKey(const QSslKey &key) |
void | setPrivateKey(const QString &fileName, QSsl::KeyAlgorithm algorithm = QSsl::Rsa, QSsl::EncodingFormat format = QSsl::Pem, const QByteArray &passPhrase = QByteArray()) |
void | setProtocol(QSsl::SslProtocol protocol) |
void | setSslConfiguration(const QSslConfiguration &configuration) |
QSslConfiguration | sslConfiguration() const |
QList<QSslError> | sslHandshakeErrors() const |
bool | waitForEncrypted(int msecs = 30000) |
再実装パブリック関数
virtual bool | atEnd() const override |
virtual qint64 | bytesAvailable() const override |
virtual qint64 | bytesToWrite() const override |
virtual bool | canReadLine() const override |
virtual void | close() override |
virtual void | resume() override |
virtual void | setReadBufferSize(qint64 size) override |
virtual bool | setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite) override |
virtual void | setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) override |
virtual QVariant | socketOption(QAbstractSocket::SocketOption option) override |
virtual bool | waitForBytesWritten(int msecs = 30000) override |
virtual bool | waitForConnected(int msecs = 30000) override |
virtual bool | waitForDisconnected(int msecs = 30000) override |
virtual bool | waitForReadyRead(int msecs = 30000) override |
パブリック・スロット
void | ignoreSslErrors() |
void | startClientEncryption() |
void | startServerEncryption() |
シグナル
void | alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
void | alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
void | encrypted() |
void | encryptedBytesWritten(qint64 written) |
void | handshakeInterruptedOnError(const QSslError &error) |
void | modeChanged(QSslSocket::SslMode mode) |
void | newSessionTicketReceived() |
void | peerVerifyError(const QSslError &error) |
void | preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator) |
void | sslErrors(const QList<QSslError> &errors) |
静的パブリック・メンバー
(since 6.1) QString | activeBackend() |
(since 6.1) QList<QString> | availableBackends() |
(since 6.1) QList<QSsl::ImplementedClass> | implementedClasses(const QString &backendName = {}) |
(since 6.1) bool | isClassImplemented(QSsl::ImplementedClass cl, const QString &backendName = {}) |
(since 6.1) bool | isFeatureSupported(QSsl::SupportedFeature ft, const QString &backendName = {}) |
(since 6.1) bool | isProtocolSupported(QSsl::SslProtocol protocol, const QString &backendName = {}) |
(since 6.1) bool | setActiveBackend(const QString &backendName) |
long | sslLibraryBuildVersionNumber() |
QString | sslLibraryBuildVersionString() |
long | sslLibraryVersionNumber() |
QString | sslLibraryVersionString() |
(since 6.1) QList<QSsl::SupportedFeature> | supportedFeatures(const QString &backendName = {}) |
(since 6.1) QList<QSsl::SslProtocol> | supportedProtocols(const QString &backendName = {}) |
bool | supportsSsl() |
再実装された保護された関数
virtual qint64 | readData(char *data, qint64 maxlen) override |
virtual qint64 | skipData(qint64 maxSize) override |
virtual qint64 | writeData(const char *data, qint64 len) override |
関連する非会員
(since 6.0) enum class | AlertLevel { Warning, Fatal, Unknown } |
(since 6.0) enum class | AlertType { CloseNotify, UnexpectedMessage, BadRecordMac, RecordOverflow, DecompressionFailure, …, UnknownAlertMessage } |
(since 6.1) enum class | ImplementedClass { Key, Certificate, Socket, DiffieHellman, EllipticCurve, …, DtlsCookie } |
(since 6.1) enum class | SupportedFeature { CertificateVerification, ClientSideAlpn, ServerSideAlpn, Ocsp, Psk, …, Alerts } |
詳細説明
QSslSocket は、暗号化されたデータの送信に使用できる、セキュアで暗号化された TCP 接続を確立します。クライアントモードとサーバーモードの両方で動作し、TLS 1.3 を含む最新の TLS プロトコルをサポートしています。デフォルトでは、QSslSocketは安全であると考えられるTLSプロトコルのみを使用します(QSsl::SecureProtocols)が、ハンドシェイクが始まる前であれば、setProtocol()を呼び出すことでTLSプロトコルを変更することができます。
SSL暗号化は、ソケットがConnectedStateになった後、既存のTCPストリームの上で動作する。QSslSocketを使って安全な接続を確立するには、2つの簡単な方法がある:即座にSSLハンドシェイクを行う方法と、非暗号化モードで接続を確立した後に遅延SSLハンドシェイクを行う方法です。
QSslSocket を使用する最も一般的な方法は、オブジェクトを構築し、connectToHostEncrypted() を呼び出して安全な接続を開始することです。このメソッドは、接続が確立されると即座にSSLハンドシェイクを開始します。
QSslSocket *socket = new QSslSocket(this); connect(socket, &QSslSocket::encrypted, this, &Receiver::ready); socket->connectToHostEncrypted("imap.example.com", 993);
プレーンなQTcpSocket と同様に、QSslSocket は HostLookupState、 ConnectingState、そして接続が成功すれば ConnectedState に入ります。その後、ハンドシェイクが自動的に開始され、成功するとencrypted() シグナルが発せられ、ソケットが暗号化状態に入り、使用可能な状態になったことを示す。
connectToHostEncrypted() から戻った直後(すなわちencrypted() シグナルが発せられる前)にソケットにデータを書き込むことができる。データはencrypted() シグナルが発せられるまで QSslSocket にキューイングされる。
既存の接続を保護するために遅延SSLハンドシェイクを使う例として、SSLサーバーが着信接続を保護する場合があります。QTcpServer QTcpServer::incomingConnectionまず QSslSocket のインスタンスを生成し、setSocketDescriptor() を呼び出して新しいソケットのディスクリプタを渡された既存のソケットに設定する。その後、startServerEncryption() を呼び出して SSL ハンドシェイクを開始する。
void SslServer::incomingConnection(qintptr socketDescriptor) { QSslSocket *serverSocket = new QSslSocket; if (serverSocket->setSocketDescriptor(socketDescriptor)) { addPendingConnection(serverSocket); connect(serverSocket, &QSslSocket::encrypted, this, &SslServer::ready); serverSocket->startServerEncryption(); } else { delete serverSocket; } }
エラーが発生した場合、QSslSocket はsslErrors() シグナルを発する。この場合、エラーを無視するアクションが取られなければ、接続は切断されます。エラーが発生したにもかかわらず接続を続行するには、このスロット内でエラーが発生した後、またはQSslSocketの構築後、接続が試行される前に、いつでもignoreSslErrors ()を呼び出すことができます。これにより、QSslSocketは相手のIDを確立する際に遭遇したエラーを無視することができます。SSL ハンドシェイク中のエラーを無視することは、安全な接続の基本的な特性であるハンドシェイクの成功によって確立されるべきであるので、注意して使用されるべきです。
一度暗号化されると、QSslSocketを通常のQTcpSocket 。readyRead ()が発行されると、read ()、canReadLine ()、readLine ()、getChar ()を呼び出して、QSslSocketの内部バッファから復号化されたデータを読み取り、write ()またはputChar ()を呼び出して、ピアにデータを書き戻すことができる。QSslSocketは、書き込まれたデータを自動的に暗号化し、データがピアに書き込まれると、encryptedBytesWritten ()を発行します。
便宜上、QSslSocket はQTcpSocket のブロッキング関数waitForConnected(),waitForReadyRead(),waitForBytesWritten(),waitForDisconnected() をサポートしています。また、暗号化された接続が確立されるまで呼び出し元のスレッドをブロックするwaitForEncrypted() も提供している。
QSslSocketソケット; socket.connectToHostEncrypted("http.example.com", 443);if(!socket.waitForEncrypted()) { ソケット.waitForEncrypted() qDebug() << socket.errorString(); return false; } socket.write("GET / HTTP/1.0");while(socket.waitForReadyRead()) qDebug() << socket.readAll().data();
QSslSocketは、暗号、秘密鍵、ローカル証明書、ピア証明書、認証局(CA)証明書を処理するための広範で使いやすいAPIを提供します。また、ハンドシェーク段階で発生したエラーを処理するためのAPIも提供します。
以下の機能もカスタマイズ可能である:
- QSslConfiguration::setCiphers() を用いて、ハンドシェイクの前にソケットの暗号スイートをカスタマイズできる。
- ソケットのローカル証明書と秘密鍵は、ハンドシェイクフェーズの前にsetLocalCertificate() とsetPrivateKey() でカスタマイズできる。
- CA 証明書データベースはQSslConfiguration::addCaCertificate() やQSslConfiguration::addCaCertificates() で拡張やカスタマイズが可能である。
SSLハンドシェーク中にSSLソケットによって使用されるデフォルトのCA証明書のリストを拡張するには、以下のスニペットのようにデフォルトの設定を更新する必要があります:
QList<QSslCertificate> certificates = getCertificates(); QSslConfiguration configuration = QSslConfiguration::defaultConfiguration(); configuration.addCaCertificates(certificates); QSslConfiguration::setDefaultConfiguration(configuration);
注: 利用可能な場合、Unix(macOSを除く)のルート証明書は、標準証明書ディレクトリからオンデマンドでロードされます。ルート証明書をオンデマンドでロードしたくない場合は、アプリケーションで最初のSSLハンドシェイクが行われる前に(例えばQSslSocket::systemCaCertificates()を渡すなどして)QSslConfiguration::defaultConfiguration().setCaCertificates()を呼び出すか、SSLハンドシェイクの前にQSslSocketインスタンスでQSslConfiguration::defaultConfiguration()::setCaCertificates()を呼び出す必要があります。
暗号と証明書の詳細については、QSslCipher とQSslCertificate を参照してください。
この製品には、OpenSSL Toolkit(http://www.openssl.org/) で使用するために OpenSSL Project によって開発されたソフトウェアが含まれています。
注意: 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ハンドシェイクに影響を与えることなく、ピア証明書の詳細をユーザーに表示したい場合に便利です。このモードはサーバーのデフォルトです。注意: Schannelでは、この値はVerifyNoneと同じ動作をします。 |
QSslSocket::VerifyPeer | 2 | QSslSocket は、SSLハンドシェーク・フェーズでピアに証明書を要求し、この証明書が有効であることを要求します。失敗すると、 は () シグナルを発する。このモードがクライアントのデフォルトです。QSslSocket QSslSocket::sslErrors |
QSslSocket::AutoVerifyPeer | 3 | QSslSocket は自動的にサーバー・ソケットに QueryPeer を使用し、クライアント・ソケットに VerifyPeer を使用する。 |
QSslSocket::peerVerifyMode()も参照のこと 。
enum QSslSocket::SslMode
QSslSocket で利用可能な接続モードについて説明する。
定数 | 値 | 説明 |
---|---|---|
QSslSocket::UnencryptedMode | 0 | ソケットは暗号化されていない。動作はQTcpSocket と同じである。 |
QSslSocket::SslClientMode | 1 | ソケットはクライアント側のSSLソケットである。すでに暗号化されているか、SSLハンドシェイクフェーズ(QSslSocket::isEncrypted()を参照)にある。 |
QSslSocket::SslServerMode | 2 | ソケットはサーバー側のSSLソケットである。既に暗号化されているか、SSLハンドシェイクフェーズにある(QSslSocket::isEncrypted()を参照)。 |
メンバー関数ドキュメント
[explicit]
QSslSocket::QSslSocket(QObject *parent = nullptr)
QSslSocket オブジェクトを構築する。parent はQObject のコンストラクタに渡される。新しいソケットのcipher suite は静的メソッド defaultCiphers() が返すものに設定される。
[virtual noexcept]
QSslSocket::~QSslSocket()
QSslSocket を破壊する。
[static, since 6.1]
QString QSslSocket::activeBackend()
QSslSocket および関連するクラスが使用するバックエンドの名前を返します。アクティブなバックエンドが明示的に設定されていない場合、この関数はQSslSocket が利用可能なバックエンドの一覧から暗黙的に選択するデフォルトのバックエンドの名前を返します。
注意: デフォルトのバックエンドを暗黙的に選択する場合、QSslSocket は、利用可能であれば OpenSSL バックエンドを優先します。利用できない場合は、WindowsではSchannelバックエンドが、DarwinプラットフォームではSecure Transportが暗黙的に選択される。これらが使えない場合、カスタムTLSバックエンドが見つかれば、それが使われる。他のバックエンドが見つからない場合は、「証明書のみ」のバックエンドが選択される。TLS プラグインの詳細については、ソースから Qt をビルドする際の SSL サポートの有効化と無効化を参照してください。
この関数は Qt 6.1 で導入されました。
setActiveBackend() およびavailableBackends()も参照してください 。
[signal]
void QSslSocket::alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslSocket level 、アラートが致命的なものなのか警告なのかを伝える。 は、アラートが送信された理由を説明するコードである。アラートメッセージのテキストによる説明がある場合は、 。type description
注意: このシグナルは主に情報提供とデバッグのためのもので、アプリケーションで処理する必要はありません。アラートが致命的であった場合、基礎となるバックエンドはそれを処理し、接続を閉じます。
注意: すべてのバックエンドがこの機能をサポートしているわけではありません。
alertSent()、QSsl::AlertLevel 、QSsl::AlertTypeも参照 。
[signal]
void QSslSocket::alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslSocket level 、警告か致命的エラーかを記述する。 、警告メッセージのコードを与える。アラートメッセージのテキストによる説明がある場合は、 。type description
注意: このシグナルはほとんどが情報提供であり、デバッグ目的で使用することができます。
注意: すべてのバックエンドがこの機能をサポートしているわけではありません。
alertReceived()、QSsl::AlertLevel 、QSsl::AlertTypeも参照のこと 。
[override virtual]
bool QSslSocket::atEnd() const
再実装:QIODevice::atEnd() const.
[static, since 6.1]
QList<QString> QSslSocket::availableBackends()
現在利用可能なバックエンドの名前を返します。これらの名前は小文字で、例えば "openssl"、"securetransport"、"schannel" などです(Qt に既に存在する TLS バックエンドの機能名に似ています)。
この関数は Qt 6.1 で導入されました。
activeBackend()も参照してください 。
[override virtual]
qint64 QSslSocket::bytesAvailable() const
再実装:QAbstractSocket::bytesAvailable() const.
すぐに読み込み可能な復号バイト数を返します。
[override virtual]
qint64 QSslSocket::bytesToWrite() const
再実装:QAbstractSocket::bytesToWrite() const.
暗号化されてネットワークに書き込まれるのを待っている、 暗号化されていないバイト数を返します。
[override virtual]
bool QSslSocket::canReadLine() const
再実装:QIODevice::canReadLine() const.
復号化された文字の 1 行(ASCII の ' \n' 1 文字で終端)を読める場合はtrue
を返し、そうでない場合は false を返します。
[override virtual]
void QSslSocket::close()
再インプリメント:QAbstractSocket::close().
void QSslSocket::connectToHostEncrypted(const QString &hostName, quint16 port, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
mode をOpenMode として使用し、port 上のデバイスhostName への暗号化接続を開始する。これは、connectToHost()を呼び出して接続を確立し、startClientEncryption()を呼び出すことと同じである。protocol パラメータを使用して、使用するネットワーク・プロトコルを指定でき る(IPv4またはIPv6など)。
QSslSocket 最初にHostLookupStateに入る。次に、イベントループまたはwaitFor...()関数のいずれかに入った後、ConnectingStateに入り、 ()を発行し、SSLクライアント・ハンドシェイクを開始する。状態が変わるたびに、 はシグナル () を発する。connected QSslSocket stateChanged
SSLクライアントハンドシェイクを開始した後、相手のIDが確立できない場合、シグナルsslErrors()が発せられる。エラーを無視して接続を続行したい場合は、sslErrors() シグナルに接続されたスロット関数の内部から、または暗号化モードに入る前に、ignoreSslErrors() を呼び出す必要があります。ignoreSslErrors() が呼び出されなかった場合、接続は切断され、シグナルdisconnected() が発せられ、QSslSocket は UnconnectedState に戻る。
SSLハンドシェイクが成功すると、QSslSocket 、encrypted ()が発信される。
QSslSocket socket; connect(&socket, &QSslSocket::encrypted, receiver, &Receiver::socketEncrypted); socket.connectToHostEncrypted("imap", 993); socket->write("1 CAPABILITY\r\n");
注意: 上記の例では、暗号化された接続を要求した直後、encrypted() シグナルが発せられる前に、ソケットにテキストを書き込むことができる。このような場合、テキストはオブジェクト内でキューに入れられ、接続が確立してencrypted() シグナルが発せられた後にソケットに書き込まれる。
mode のデフォルトはReadWrite である。
接続のサーバー側でQSslSocket を作成したい場合は、代わりにQTcpServer を介して着信接続を受信した際にstartServerEncryption() を呼び出す必要がある。
connectToHost()、startClientEncryption()、waitForConnected()、waitForEncrypted()も参照 。
void QSslSocket::connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
これはオーバーロードされた関数です。
connectToHostEncryptedの本来の動作に加え、このオーバーロード・メソッドでは、TCP接続に使用するホスト名(hostName)の代わりに、証明書の検証に別のホスト名(sslPeerName)を使用することができます。
connectToHostEncrypted()も参照してください 。
[since 6.0]
void QSslSocket::continueInterruptedHandshake()
handshakeInterruptedOnError ()シグナルを受信した後でも、アプリケーションがハンドシェイクを終了したい場合は、この関数を呼び出す必要がある。この呼び出しは、シグナルに接続されたスロット関数から行わなければならない。シグナルとスロットの接続は直接でなければなりません。
この関数はQt 6.0で導入されました。
handshakeInterruptedOnError() とQSslConfiguration::setHandshakeMustInterruptOnError()も参照してください 。
[signal]
void QSslSocket::encrypted()
このシグナルは、QSslSocket が暗号化モードに入ったときに発せられる。このシグナルが発せられた後、QSslSocket::isEncrypted() は真を返し、それ以降のソケットの通信はすべて暗号化される。
QSslSocket::connectToHostEncrypted() およびQSslSocket::isEncrypted()も参照のこと 。
qint64 QSslSocket::encryptedBytesAvailable() const
復号化待ちの暗号化バイト数を返す。通常、QSslSocket は受信データをできるだけ早く復号化するので、この関数は 0 を返す。
qint64 QSslSocket::encryptedBytesToWrite() const
ネットワークへの書き込み待ちの暗号化バイト数を返す。
[signal]
void QSslSocket::encryptedBytesWritten(qint64 written)
このシグナルは、QSslSocket が暗号化されたデータをネットワークに書き込んだときに発せられる。written パラメータには、正常に書き込まれたバイト数が格納される。
QIODevice::bytesWritten()も参照のこと 。
[signal]
void QSslSocket::handshakeInterruptedOnError(const QSslError &error)
QSslSocket は、証明書検証エラーが見つかった場合、および で早期エラー報告が有効になっている場合に、このシグナルを発する。アプリケーションは を検査し、ハンドシェイクを続行するか、中止して相手にアラートメッセージを送信するかを決定することが期待される。シグナルスロット接続は直接接続でなければならない。QSslConfiguration error
continueInterruptedHandshake()、sslErrors()、QSslConfiguration::setHandshakeMustInterruptOnError()も参照の こと。
[slot]
void QSslSocket::ignoreSslErrors()
このスロットは、QSslSocket のハンドシェイクフェーズ中のエラーを 無視して接続を継続するように、QSslSocket に指示する。ハンドシェークフェーズ中にエラーが発生しても接続を継続したい場合は、sslErrors() に接続されたスロットから、またはハンドシェークフェーズの前に、 このスロットを呼び出す必要がある。このスロットを呼び出さない場合は、エラーに応答するか、ハンドシェイクの前に、sslErrors() シグナルが発せられた後に接続は切断されます。
SSLハンドシェークフェーズでエラーがない場合(つまり、問題なく相手のIDが確立されている場合)、QSslSocket はsslErrors() シグナルを発しないので、この関数を呼び出す必要はありません。
警告: sslErrors() シグナルで報告されるエラーは、必ずユーザーに確認させ、ユーザーが問題なく進行していることを確認した場合にのみ、このメソッドを呼び出すようにしてください。予期せぬエラーが発生した場合は、接続を中断する必要があります。実際のエラーを検査せずにこのメソッドを呼び出すと、アプリケーションにセキュリティ・リスクをもたらす可能性が高くなります。十分注意して使用してください!
sslErrors()も参照 。
void QSslSocket::ignoreSslErrors(const QList<QSslError> &errors)
これはオーバーロードされた関数である。
このメソッドはerrors で指定されたエラーだけを無視するようにQSslSocket に指示します。
注意: ほとんどのSSLエラーは証明書と関連しているため、ほとんどのエラーに対して、このSSLエラーが関連すると予想される証明書を設定する必要があります。例えば、自己署名証明書を使用しているサーバーに接続したい場合、以下のスニペットを考えてみてください:
QList<QSslCertificate> cert = QSslCertificate::fromPath("server-certificate.pem"_L1); QSslError error(QSslError::SelfSignedCertificate, cert.at(0)); QList<QSslError> expectedSslErrors; expectedSslErrors.append(error); QSslSocket socket; socket.ignoreSslErrors(expectedSslErrors); socket.connectToHostEncrypted("server.tld", 443);
この関数を複数回呼び出すと、前の呼び出しで渡されたエラーのリストが置き換わります。この関数を複数回呼び出すと、前の呼び出しで渡されたエラーのリストが置き換えられます。この関数を空のリストで呼び出すと、無視したいエラーのリストを消去できます。
sslErrors() およびsslHandshakeErrors()も参照の こと。
[static, since 6.1]
QList<QSsl::ImplementedClass> QSslSocket::implementedClasses(const QString &backendName = {})
この関数は、backendName というバックエンドが実装しているバックエンド固有のクラスを返します。空のbackendName は、現在アクティブなバックエンドに関するクエリとして理解されます。
この関数は Qt 6.1 で導入されました。
QSsl::ImplementedClass,activeBackend(),isClassImplemented()も参照してください 。
[static, since 6.1]
bool QSslSocket::isClassImplemented(QSsl::ImplementedClass cl, const QString &backendName = {})
backendName というバックエンドがcl というクラスを実装している場合に true を返します。空のbackendName は、現在アクティブなバックエンドに関するクエリとして理解されます。
この関数は Qt 6.1 で導入されました。
implementedClasses()も参照してください 。
bool QSslSocket::isEncrypted() const
ソケットが暗号化されていればtrue
を返し、そうでなければ false を返す。
暗号化されたソケットは、write() またはputChar() を呼び出して書き込まれたデータを暗号化してからネットワークに書き込み、read(),readLine(),getChar() を呼び出してネットワークから受信したデータを復号化する。
QSslSocket 暗号化モードに入ると、 ()を呼び出す。encrypted
sessionCipher() を呼び出すと、データの暗号化と復号にどの暗号が使用されているかを確認でき る。
mode()も参照 。
[static, since 6.1]
bool QSslSocket::isFeatureSupported(QSsl::SupportedFeature ft, const QString &backendName = {})
backendName というバックエンドがft という機能をサポートしている場合に true を返します。空のbackendName は、現在アクティブなバックエンドに関するクエリとして理解されます。
この関数は Qt 6.1 で導入されました。
QSsl::SupportedFeature およびsupportedFeatures()も参照してください 。
[static, since 6.1]
bool QSslSocket::isProtocolSupported(QSsl::SslProtocol protocol, const QString &backendName = {})
protocol がbackendName というバックエンドに対応している場合は true を返します。空のbackendName は、現在アクティブなバックエンドに関するクエリとして理解されます。
この関数は Qt 6.1 で導入されました。
supportedProtocols()も参照してください 。
QSslCertificate QSslSocket::localCertificate() const
ソケットのローカル証明書certificate を返し、ローカル証明書が割り当てられていない場合は空の証明書を返す。
setLocalCertificate() およびprivateKey()も参照のこと 。
QList<QSslCertificate> QSslSocket::localCertificateChain() const
ソケットのローカルcertificate チェーン、またはローカル証明書が割り当てられていない場合は空のリストを返す。
setLocalCertificateChain()も参照すること 。
QSslSocket::SslMode QSslSocket::mode() const
QSslSocket がQTcpSocket と同じように動作するUnencryptedMode か、クライアントがネゴシエート中か暗号化モードであるSslClientMode かSslServerMode のいずれかである。
モードが変更されると、QSslSocket はmodeChanged() を返す。
SslModeも参照のこと 。
[signal]
void QSslSocket::modeChanged(QSslSocket::SslMode mode)
このシグナルは、QSslSocket がQSslSocket::UnencryptedMode からQSslSocket::SslClientMode またはQSslSocket::SslServerMode のいずれかに変更されたときに発せられる。mode が新しいモードである。
QSslSocket::mode()も参照のこと 。
[signal]
void QSslSocket::newSessionTicketReceived()
ハンドシェイク中に TLS 1.3 プロトコルがネゴシエートされた場合、QSslSocket は NewSessionTicket メッセージを受信した後にこのシグナルを発する。セッションとセッションチケットの有効期間ヒントはソケットのコンフィギュレーションで更新される。このセッションは、今後の TLS 接続でセッションの再開(およびハンドシェイクの短縮)に使用できる。
注意: この機能はOpenSSLバックエンドでのみ有効であり、OpenSSL v 1.1.1以上が必要である。
QSslSocket::sslConfiguration(),QSslConfiguration::sessionTicket(),QSslConfiguration::sessionTicketLifeTimeHint()も参照 。
QList<QOcspResponse> QSslSocket::ocspResponses() const
この関数は、OCSPステープリングを使用したTLSハンドシェイク中にサーバーが送信する可能性のあるオンライン証明書ステータスプロトコル応答を返す。明確な応答を受け取らなかったり、まったく応答を受け取らなかったりした場合は、リストは空である。
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()も参照 。
[signal]
void QSslSocket::peerVerifyError(const QSslError &error)
QSslSocket は、SSL ハンドシェイクの間、暗号化が確立する前にこのシグナルを何度か発して、相手の ID を確立する際にエラーが発生したことを示すことができる。 は通常、 がピアを安全に識別できないことを示す。error QSslSocket
このシグナルは、何か問題が発生したときに、その兆候を早期に示してくれる。このシグナルに接続することで、ハンドシェイクが完了する前に、接続されたスロットの内部から手動で接続を切断することを選択できる。何もアクションを起こさなければ、QSslSocket はQSslSocket::sslErrors()の発信に進む。
sslErrors()も参照のこと 。
QSslSocket::PeerVerifyMode QSslSocket::peerVerifyMode() const
ソケットのベリファイモードを返す。このモードは、QSslSocket がピアに証明書を要求するか(すなわち、クライアントがサーバに証明書を要求するか、サーバがクライアントに証明書を要求するか)、この証明書が有効であることを要求するかを決定する。
デフォルトのモードはAutoVerifyPeer で、QSslSocket に、クライアントにはVerifyPeer 、サーバーにはQueryPeer を使用するように指示する。
setPeerVerifyMode()、peerVerifyDepth()、mode()も参照の こと。
QString QSslSocket::peerVerifyName() const
setPeerVerifyName またはconnectToHostEncrypted で設定された、証明書検証用の別のホスト名を返す。
setPeerVerifyName() およびconnectToHostEncrypted()も参照のこと 。
[signal]
void QSslSocket::preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
QSslSocket は PSK 暗号スイートとネゴシエートするときにこのシグナルを発するので、 PSK 認証が必要になる。
PSKを使う場合、クライアントはSSLハンドシェイクを続けるために、有効なIDと有効な事前共有鍵をサーバーに送らなければなりません。アプリケーションはこのシグナルに接続されたスロットに、渡されたauthenticator オブジェクトを必要に応じて入力することで、この情報を提供することができます。
注意: このシグナルを無視したり、必要な認証情報を提供しなかったりすると、ハンドシェイクが失敗し、接続が中断されます。
注意 :authenticator オブジェクトはソケットが所有するので、アプリケーションが削除してはならない。
QSslPreSharedKeyAuthenticatorも参照のこと 。
QSslKey QSslSocket::privateKey() const
このソケットの秘密鍵を返す。
setPrivateKey() およびlocalCertificate()も参照 。
QSsl::SslProtocol QSslSocket::protocol() const
ソケットの SSL プロトコルを返します。デフォルトではQSsl::SecureProtocols が使用されます。
setProtocol()も参照 。
[override virtual protected]
qint64 QSslSocket::readData(char *data, qint64 maxlen)
再実装:QAbstractSocket::readData(char *data, qint64 maxSize).
[override virtual]
void QSslSocket::resume()
再インプリメント:QAbstractSocket::resume().
一時停止したソケットのデータ転送を継続する。このソケットで "setPauseMode(QAbstractSocket::PauseOnSslErrors);" が呼び出され、sslErrors() シグナルを受信した場合、ソケットのデータ転送を継続するにはこのメソッドを呼び出す必要がある。
QAbstractSocket::pauseMode() およびQAbstractSocket::setPauseMode()も参照のこと 。
QSslCipher QSslSocket::sessionCipher() const
ソケットの暗号化方式cipher を返し、接続が暗号化されていない場合は null を返す。セッションのソケット暗号はハンドシェークフェーズで設定される。この暗号は、ソケットを介して送信されるデータの暗号化・復号化に使用される。
QSslSocket また、ハンドシェークフェーズで最終的にセッション暗号を選択する暗号の順序リストを設定する関数も提供する。この順序付きリストはハンドシェークフェーズが始まる前に設定されていなければならない。
QSslConfiguration::ciphers(),QSslConfiguration::setCiphers(),QSslConfiguration::setCiphers(),QSslConfiguration::ciphers(),QSslConfiguration::supportedCiphers()も参照のこと 。
QSsl::SslProtocol QSslSocket::sessionProtocol() const
ソケットのSSL/TLSプロトコル、または接続が暗号化されていない場合はUnknownProtocolを返す。セッションのソケットプロトコルは、ハンドシェークフェーズで設定される。
protocol() およびsetProtocol()も参照 。
[static, since 6.1]
bool QSslSocket::setActiveBackend(const QString &backendName)
backendName という名前のバックエンドがアクティブなバックエンドとして設定されていた場合に true を返します。backendName はavailableBackends() が返す名前のいずれかでなければなりません。
注意: アプリケーションは、異なるバックエンドを同時に混在させることはできません。これは、QSslSocket や関連するクラス、例えばQSslCertificate やQSslKey を使用する前に、デフォルトではないバックエンドを選択しなければならないことを意味します。
この関数は Qt 6.1 で導入されました。
activeBackend() およびavailableBackends()も参照してください 。
void QSslSocket::setLocalCertificate(const QSslCertificate &certificate)
ソケットのローカル証明書をcertificate に設定する。 ローカル証明書は、相手に対して自分の身元を確認する必要がある場合に必要である。ローカル証明書を設定する場合、秘密鍵も設定する必要がある。
ローカル証明書と秘密鍵は、サーバー・ソケットでは常に必要ですが、サーバーがクライアントの認証を必要とする場合、クライアント・ソケットでもまれに使用されます。
注: macOS上のSecure Transport SSLバックエンドは、ローカルの証明書と鍵をインポートすることで、デフォルトのキーチェーン(デフォルトはおそらくログインキーチェーン)を更新する可能性があります。その結果、アプリケーションがこれらの秘密鍵を使用しているときに、システムダイアログが表示され、許可を求めることがあります。このような動作が望ましくない場合は、QT_SSL_USE_TEMPORARY_KEYCHAIN環境変数を0以外の値に設定してください。これにより、QSslSocket 、独自の一時キーチェーンを使用するようになります。
localCertificate() およびsetPrivateKey()も参照の こと。
void QSslSocket::setLocalCertificate(const QString &path, QSsl::EncodingFormat format = QSsl::Pem)
これはオーバーロードされた関数である。
ソケットのローカルcertificate を、指定されたformat に従ってパースされたファイルpath で最初に見つかったものに設定する。
void QSslSocket::setLocalCertificateChain(const QList<QSslCertificate> &localChain)
SSLハンドシェイク中に相手に提示する証明書チェーンをlocalChain に設定する。
localCertificateChain() およびQSslConfiguration::setLocalCertificateChain()も参照のこと 。
void QSslSocket::setPeerVerifyDepth(int depth)
SSL ハンドシェイクのフェーズでチェックする、相手の証明書チェーンの証明書の最大数をdepth に設定します。 深さを 0 に設定すると、最大深さが設定されないことになり、証明書チェーン全体をチェックする必要があることを示します。
証明書は発行順にチェックされ、ピア自身の証明書から始まり、その発行者の証明書というようにチェックされます。
peerVerifyDepth() およびsetPeerVerifyMode()も参照の こと。
void QSslSocket::setPeerVerifyMode(QSslSocket::PeerVerifyMode mode)
ソケットのベリファイモードをmode に設定する。このモードは、QSslSocket がピアに証明書を要求するか(すなわち、クライアントがサーバに証明書を要求するか、サーバがクライアントに証明書を要求するか)、この証明書が有効であることを要求するかを決定する。
デフォルトのモードはAutoVerifyPeer で、QSslSocket にクライアントにはVerifyPeer 、サーバーにはQueryPeer を使用するように指示する。
暗号化の開始後にこのモードを設定しても、現在の接続には影響しない。
peerVerifyMode()、setPeerVerifyDepth()、mode()も参照のこと 。
void QSslSocket::setPeerVerifyName(const QString &hostName)
TCP 接続に使用されるホスト名ではなく、証明書の検証用にhostName で指定された別のホスト名を設定する。
peerVerifyName() およびconnectToHostEncrypted()も参照のこと 。
void QSslSocket::setPrivateKey(const QSslKey &key)
ソケットの秘密鍵key をkey に設定する。秘密鍵とローカル証明書certificate は、SSLピアに対して自分の身元を証明する必要があるクライアントとサーバによって使用される。
SSL サーバーソケットを作成する場合は、キーとローカル証明書の両方が必要です。SSLクライアントソケットを作成する場合、クライアントがSSLサーバーに対して自身を識別する必要がある場合は、キーとローカル証明書が必要です。
privateKey() とsetLocalCertificate()も参照のこと 。
void QSslSocket::setPrivateKey(const QString &fileName, QSsl::KeyAlgorithm algorithm = QSsl::Rsa, QSsl::EncodingFormat format = QSsl::Pem, const QByteArray &passPhrase = QByteArray())
これはオーバーロードされた関数である。
ファイルfileName の文字列を読み込み、指定されたalgorithm とエンコードformat を用いてデコードし、SSL key を構築する。 エンコードされた鍵が暗号化されている場合、passPhrase を用いて復号化する。
ソケットの秘密鍵は構築された鍵に設定される。秘密鍵とローカル証明書certificate は、クライアントとサーバがSSLピアに対して自分の身元を証明するために使われる。
SSL サーバーソケットを作成する場合は、鍵とローカル証明書の両方が必要である。SSLクライアントソケットを作成する場合、クライアントがSSLサーバーに対して自身を識別する必要がある場合は、鍵とローカル証明書が必要です。
privateKey() とsetLocalCertificate()も参照のこと 。
void QSslSocket::setProtocol(QSsl::SslProtocol protocol)
ソケットのSSLプロトコルをprotocol に設定する。 これは、次にハンドシェークを開始するときに影響する。すでに暗号化されているソケットでこの関数を呼んでも、ソケットのプロトコルに影響はない。
protocol()も参照のこと 。
[override virtual]
void QSslSocket::setReadBufferSize(qint64 size)
再実装:QAbstractSocket::setReadBufferSize(qint64 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).
ネイティブソケットディスクリプタsocketDescriptor でQSslSocket を初期化する。socketDescriptor が有効なソケットディスクリプタとして受け入れられた場合はtrue
を返し、そうでない場合はfalse
を返す。ソケットはopenMode で指定されたモードでオープンされ、state で指定されたソケット状態になる。
注意: 同じネイティブソケットディスクリプタで2つのソケットを初期化することはできない。
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-state関連フィールドを設定することはできない。
sslConfiguration()、setLocalCertificate()、setPrivateKey()、QSslConfiguration::setCaCertificates()、QSslConfiguration::setCiphers()も参照の こと。
[override virtual protected]
qint64 QSslSocket::skipData(qint64 maxSize)
再実装:QAbstractSocket::skipData(qint64 maxSize).
[override virtual]
QVariant QSslSocket::socketOption(QAbstractSocket::SocketOption option)
再実装:QAbstractSocket::socketOption(QAbstractSocket::SocketOption option).
option オプションの値を返します。
setSocketOption()も参照してください 。
QSslConfiguration QSslSocket::sslConfiguration() const
ソケットのSSL設定状態を返す。ソケットのデフォルトのSSL設定は、デフォルトの暗号化方式、デフォルトのCA証明書、ローカルの秘密鍵や証明書を使用しないことである。
SSL設定には、予告なしに変更される可能性のあるフィールドも含まれる。
setSslConfiguration(),localCertificate(),peerCertificate(),peerCertificateChain(),sessionCipher(),privateKey(),QSslConfiguration::ciphers(),QSslConfiguration::caCertificates()も参照の こと。
[signal]
void QSslSocket::sslErrors(const QList<QSslError> &errors)
QSslSocket は、SSL ハンドシェイクの後にこのシグナルを発して、ピアの ID を確立する間に 1 つ以上のエラーが発生したことを示す。エラーは通常、 がピアを安全に識別できないことを示す。何らかのアクションを取らない限り、このシグナルが発せられた後に接続は切断されます。QSslSocket
エラーが発生したにもかかわらず接続を続行したい場合は、このシグナルに接続されたスロットの内部からQSslSocket::ignoreSslErrors() を呼び出す必要がある。後の時点でエラー・リストにアクセスする必要がある場合は、sslHandshakeErrors() を呼び出すことができる。
errors には、 がピアの ID を検証できないようなエラーが 1 つ以上含まれています。QSslSocket
注意: このシグナルへの接続時にQt::QueuedConnection を使用することはできません。また、QSslSocket::ignoreSslErrors() を呼び出しても、何の効果もありません。
peerVerifyError()も参照 。
QList<QSslError> QSslSocket::sslHandshakeErrors() const
最後に発生した SSL エラーのリストを返します。これはsslErrors() シグナルでQSslSocket が渡すリストと同じです。接続が暗号化されており、エラーも発生していない場合、この関数は空のリストを返します。
connectToHostEncrypted()も参照 。
[static]
long QSslSocket::sslLibraryBuildVersionNumber()
コンパイル時に使用されている SSL ライブラリのバージョン番号を返します。SSL サポートがない場合は -1 を返します。
sslLibraryVersionNumber()も参照してください 。
[static]
QString QSslSocket::sslLibraryBuildVersionString()
コンパイル時に使用されている SSL ライブラリのバージョン文字列を返します。SSL サポートがない場合は空の値を返します。
sslLibraryVersionString()も参照してください 。
[static]
long QSslSocket::sslLibraryVersionNumber()
使用中の SSL ライブラリのバージョン番号を返します。これはコンパイル時ではなく、実行時に使われるライブラリのバージョンであることに注意してください。SSL サポートがない場合は -1 を返します。
[static]
QString QSslSocket::sslLibraryVersionString()
使用中の SSL ライブラリのバージョン文字列を返します。これはコンパイル時ではなく、実行時に使われるライブラリのバージョンであることに注意してください。SSL サポートがない場合は空の値を返します。
[slot]
void QSslSocket::startClientEncryption()
クライアント接続に対して遅延 SSL ハンドシェイクを開始する。この関数は、ソケットがConnectedState にあるが、まだUnencryptedMode にあるときに呼び出すことができる。 まだ接続されていない場合、あるいは既に暗号化されている場合、この関数は何の効果もない。
STARTTLS機能を実装しているクライアントは、遅延SSLハンドシェイクを利用することが多い。他のほとんどのクライアントは、ハンドシェイクを自動的に実行するconnectToHostEncrypted() を代わりに使うことで、この関数を直接呼び出すことを避けることができる。
connectToHostEncrypted() とstartServerEncryption()も参照のこと 。
[slot]
void QSslSocket::startServerEncryption()
サーバー接続のために遅延 SSL ハンドシェイクを開始する。この関数は、ソケットがConnectedState にあるが、まだUnencryptedMode にあるときに呼び出すことができる。 接続されていないか、すでに暗号化されている場合、この関数は何もしない。
サーバーソケットでは、この関数を呼び出すことがSSLハンドシェイクを開始する唯一の方法である。ほとんどのサーバーはコネクションを受け取った直後、もしくはSSLモードに入るためのプロトコル固有のコマンドを受け取った結果として、この関数を呼び出します(例えば、サーバーは "STARTTLSrRNA "という文字列を受け取ると、この関数を呼び出して応答します)。
SSLサーバーを実装する最も一般的な方法は、QTcpServer のサブクラスを作成し、QTcpServer::incomingConnection() を再実装することである。返されたソケットディスクリプタはQSslSocket::setSocketDescriptor() に渡される。
connectToHostEncrypted() とstartClientEncryption()も参照 。
[static, since 6.1]
QList<QSsl::SupportedFeature> QSslSocket::supportedFeatures(const QString &backendName = {})
この関数は、backendName というバックエンドがサポートする機能を返します。空のbackendName は、現在アクティブなバックエンドに関するクエリとして理解されます。
この関数は Qt 6.1 で導入されました。
QSsl::SupportedFeature およびactiveBackend()も参照してください 。
[static, since 6.1]
QList<QSsl::SslProtocol> QSslSocket::supportedProtocols(const QString &backendName = {})
backendName という名前のバックエンドが利用可能な場合、この関数はそのバックエンドがサポートする TLS プロトコルのバージョンの一覧を返す。空のbackendName は、現在アクティブなバックエンドについての問い合わせと理解される。そうでない場合、この関数は空のリストを返します。
この関数は Qt 6.1 で導入されました。
availableBackends(),activeBackend(),isProtocolSupported()も参照してください 。
[static]
bool QSslSocket::supportsSsl()
このプラットフォームがSSLをサポートしていればtrue
、そうでなければfalseを返す。プラットフォームがSSLをサポートしていない場合、ソケットは接続フェーズで失敗します。
[override virtual]
bool QSslSocket::waitForBytesWritten(int msecs = 30000)
再インプリメント:QAbstractSocket::waitForBytesWritten(int msecs).
[override virtual]
bool QSslSocket::waitForConnected(int msecs = 30000)
再インプリメント:QAbstractSocket::waitForConnected(int msecs)。
ソケットが接続されるまで待つか、msecs ミリ秒待つ。接続が確立された場合、この関数はtrue
を返し、そうでない場合はfalse
を返す。
QAbstractSocket::waitForConnected()も参照のこと 。
[override virtual]
bool QSslSocket::waitForDisconnected(int msecs = 30000)
再インプリメント:QAbstractSocket::waitForDisconnected(int msecs).
ソケットが切断されるか、msecs ミリ秒のどちらか早い方まで待つ。接続が切断された場合、この関数はtrue
を返し、そうでない場合はfalse
を返す。
QAbstractSocket::waitForDisconnected()も参照のこと 。
bool QSslSocket::waitForEncrypted(int msecs = 30000)
ソケットがSSLハンドシェイクを完了し、encrypted()を発行するか、msecs ミリ秒のどちらか早い方まで待つ。encrypted() が発信された場合、この関数は真を返す。そうでない場合(ソケットが切断された、SSLハンドシェイクが失敗したなど)、偽を返す。
以下の例では、ソケットが暗号化されるまで最大1秒待つ:
socket->connectToHostEncrypted("imap", 993);if(socket->waitForEncrypted(1000)) qDebug("Encrypted!");
msecsが-1の場合、この関数はタイムアウトしない。
startClientEncryption(),startServerEncryption(),encrypted(),isEncrypted()も参照のこと 。
[override virtual]
bool QSslSocket::waitForReadyRead(int msecs = 30000)
再インプリメント:QAbstractSocket::waitForReadyRead(int msecs).
[override virtual protected]
qint64 QSslSocket::writeData(const char *data, qint64 len)
再実装:QAbstractSocket::writeData(const char *data, qint64 size).
関連する非会員
[since 6.0]
enum class AlertLevel
アラート・メッセージのレベルを記述する
この列挙型は、送信または受信されたアラート・メッセージのレベルを記述します。
定数 | 値 | 説明 |
---|---|---|
QSslSocket::AlertLevel::Warning | 0 | 致命的でない警告メッセージ |
QSslSocket::AlertLevel::Fatal | 1 | 致命的なアラートメッセージ。基盤となるバックエンドはこのようなアラートを適切に処理し、接続を閉じます。 |
QSslSocket::AlertLevel::Unknown | 2 | 不明な深刻度のアラート。 |
この列挙型は Qt 6.0 で導入されました。
[since 6.0]
enum class 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]
enum class 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]
enum class SupportedFeature
TLS バックエンドがサポートする可能性のある機能を列挙する。
QtNetwork 例えば、SecureTransport バックエンドはサーバーサイド ALPN をサポートしていない。SupportedFeature 列挙型の列挙子は、特定の機能がサポートされていることを示します。
定数 | 値 | 説明 |
---|---|---|
QSslSocket::SupportedFeature::CertificateVerification | 0 | バックエンドがQSslCertificate::verify() を実装していることを示す。 |
QSslSocket::SupportedFeature::ClientSideAlpn | 1 | クライアント側の ALPN (Application Layer Protocol Negotiation)。 |
QSslSocket::SupportedFeature::ServerSideAlpn | 2 | サーバー側の ALPN。 |
QSslSocket::SupportedFeature::Ocsp | 3 | OCSP ステープリング(オンライン証明書ステータス・プロトコル)。 |
QSslSocket::SupportedFeature::Psk | 4 | 事前共有鍵。 |
QSslSocket::SupportedFeature::SessionTicket | 5 | セッション・チケット。 |
QSslSocket::SupportedFeature::Alerts | 6 | 送受信されたアラートメッセージに関する情報。 |
この enum は Qt 6.1 で導入されました。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.