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は、ネットワークプログラミング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 | connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol) override |
| virtual void | disconnectFromHost() override |
| virtual void | resume() override |
| virtual void | setReadBufferSize(qint64 size) override |
| virtual bool | setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite) override |
| virtual void | setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) override |
| virtual QVariant | socketOption(QAbstractSocket::SocketOption option) override |
| virtual bool | waitForBytesWritten(int msecs = 30000) override |
| virtual bool | waitForConnected(int msecs = 30000) override |
| virtual bool | waitForDisconnected(int msecs = 30000) override |
| virtual bool | waitForReadyRead(int msecs = 30000) override |
パブリックスロット
| void | 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() |
再実装されたprotected関数
| 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 のサブクラスとしてSSLサーバクラスを作成すると仮定します。QTcpServer::incomingConnection()を、以下の例のようなコードでオーバーライドします。このコードでは、まずQSslSocketのインスタンスを構築し、次にsetSocketDescriptor()を呼び出して、新しいソケットのディスクリプタを引数として渡された既存のディスクリプタに設定します。その後、startServerEncryption()を呼び出してSSLハンドシェイクを開始します。
void SslServer::incomingConnection(qintptr socketDescriptor)
{
QSslSocket *serverSocket = new QSslSocket;
if (serverSocket->setSocketDescriptor(socketDescriptor)) {
addPendingConnection(serverSocket);
connect(serverSocket, &QSslSocket::encrypted, this, &SslServer::ready);
serverSocket->startServerEncryption();
} else {
delete serverSocket;
}
}エラーが発生した場合、QSslSocketはsslErrors()シグナルを発行します。この場合、エラーを無視するための措置が講じられない限り、接続は切断されます。 エラーが発生したにもかかわらず処理を続行するには、エラー発生後にこのスロット内から、あるいは QSslSocket の生成後、接続が試行される前の任意のタイミングで、ignoreSslErrors() を呼び出すことができます。これにより、QSslSocket は相手側の身元確認中に遭遇したエラーを無視できるようになります。 SSLハンドシェイク中のエラーを無視することは、慎重に行う必要があります。なぜなら、セキュアな接続の基本的な特性として、ハンドシェイクが成功して初めて接続が確立されるべきだからです。
一度暗号化されると、QSslSocketは通常のQTcpSocket として使用できます。readyRead()が発行されたら、read()、canReadLine()、readLine()、またはgetChar()を呼び出して、QSslSocketの内部バッファから復号化されたデータを読み取ることができます。また、write()またはputChar()を呼び出して、データを相手側に書き戻すことができます。 QSslSocketは書き込みデータを自動的に暗号化し、データが相手側に書き込まれるとencryptedBytesWritten()を発行します。
利便性を高めるため、QSslSocketはQTcpSocket のブロッキング関数であるwaitForConnected()、waitForReadyRead()、waitForBytesWritten()、およびwaitForDisconnected()をサポートしています。また、暗号化された接続が確立されるまで呼び出しスレッドをブロックするwaitForEncrypted()も提供しています。
QSslSocket socket;
socket.connectToHostEncrypted("http.example.com", 443);
if(!socket.waitForEncrypted()) {
qDebug() << socket.errorString();
return false;
}
socket.write("GET / HTTP/1.0\r\n\r\n");
while(socket.waitForReadyRead())
qDebug() << socket.readAll().data();QSslSocket は、暗号アルゴリズム、秘密鍵、およびローカル証明書、相手側の証明書、認証局(CA)証明書を扱うための、機能豊富で使いやすい API を提供します。また、ハンドシェイクフェーズ中に発生するエラーを処理するための API も提供します。
以下の機能もカスタマイズ可能です:
- 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ハンドシェイクが行われる前にQSslConfiguration::defaultConfiguration().setCaCertificates()を呼び出すか (たとえば、QSslSocket::systemCaCertificates() を渡すなど)、または SSL ハンドシェイクの前に QSslSocket インスタンスに対してQSslConfiguration::defaultConfiguration()::setCaCertificates() を呼び出す必要があります。
暗号および証明書の詳細については、QSslCipher およびQSslCertificate を参照してください。
本製品には、OpenSSL ツールキット (http://www.openssl.org/) で使用するために OpenSSL プロジェクトによって開発されたソフトウェアが含まれています。
注: bytesWritten() シグナルとencryptedBytesWritten() シグナルの違いに注意してください 。QTcpSocket の場合、データが TCP ソケットに書き込まれるとすぐにbytesWritten() が発信されます。QSslSocket の場合、データが暗号化されているときにbytesWritten() が発信され、データが TCP ソケットに書き込まれるとすぐにencryptedBytesWritten() が発信されます。
QSslCertificate 、QSslCipher 、およびQSslErrorも参照してください 。
メンバ型のドキュメント
enum QSslSocket::PeerVerifyMode
QSslSocket のピア検証モードについて説明します。デフォルトのモードは AutoVerifyPeer であり、ソケットの QSocket::SslMode に応じて適切なモードが選択されます。
| 定数 | 値 | 説明 |
|---|---|---|
QSslSocket::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 スイートは、静的メソッド 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 」で終了する)を読み取ることができれば、true を返します。そうでない場合は、false が返されます。
[override virtual] void QSslSocket::close()
QAbstractSocket::close() を再実装しています。
[override virtual] void QSslSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
QAbstractSocket::connectToHost (const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode, QAbstractSocket::NetworkLayerProtocol protocol)を再実装します。
void QSslSocket::connectToHostEncrypted(const QString &hostName, quint16 port, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
port 上のデバイスhostName に対して、OpenMode としてmode を使用して、暗号化された接続を開始します。これは、connectToHost() を呼び出して接続を確立し、続いてstartClientEncryption() を呼び出すことと同等です。protocol パラメータを使用すると、使用するネットワークプロトコル(例:IPv4 または IPv6)を指定できます。
QSslSocket まず、HostLookupStateに入ります。その後、イベントループまたはwaitFor...()関数のいずれかに入った後、ConnectingStateに入り、connected()を発生させ、SSLクライアントハンドシェイクを開始します。状態が変更されるたびに、QSslSocket はstateChanged()シグナルを発生させます。
SSLクライアントハンドシェイクを開始した後、相手側の身元を特定できない場合は、sslErrors()シグナルが発信されます。 エラーを無視して接続を続行したい場合は、sslErrors() シグナルに接続されたスロット関数内から、または暗号化モードに入る前に、ignoreSslErrors() を呼び出す必要があります。ignoreSslErrors() が呼び出されない場合、接続は切断され、disconnected() シグナルが発信され、QSslSocket は UnconnectedState に戻ります。
SSLハンドシェイクが成功した場合、QSslSocket はencrypted()を発生させます。
QSslSocket socket;
connect(&socket, &QSslSocket::encrypted, receiver, &Receiver::socketEncrypted);
socket.connectToHostEncrypted("imap", 993);
socket->write("1 CAPABILITY\r\n");注: 上記の例では 、暗号化された接続を要求した直後、encrypted() シグナルが発信される前に、ソケットにテキストを書き込むことができることが示されています。このような場合、テキストはオブジェクトにキューイングされ、接続が確立され、encrypted() シグナルが発信された後にソケットに書き込まれます。
mode のデフォルト値はReadWrite です。
接続のサーバー側で `QSslSocket ` を作成したい場合は、代わりに `QTcpServer` を通じて着信接続を受信した際に `startServerEncryption()` を呼び出す必要があります。
connectToHost()、startClientEncryption()、waitForConnected()、およびwaitForEncrypted()も参照してください 。
void QSslSocket::connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, QIODeviceBase::OpenMode mode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
connectToHostEncrypted の本来の動作に加え、このオーバーロードされたメソッドを使用すると、TCP 接続に使用されるホスト名(hostName )の代わりに、証明書検証用に別のホスト名(sslPeerName )を使用できるようになります。
これはオーバーロードされた関数です。
connectToHostEncrypted()も参照してください 。
[since 6.0] void QSslSocket::continueInterruptedHandshake()
アプリケーションがhandshakeInterruptedOnError()シグナルを受信した後でもハンドシェイクを完了させたい場合は、この関数を呼び出す必要があります。この呼び出しは、そのシグナルにアタッチされたスロット関数内から行う必要があります。シグナルとスロットの接続は直接的なものでなければなりません。
この関数は Qt 6.0 で導入されました。
handshakeInterruptedOnError() およびQSslConfiguration::setHandshakeMustInterruptOnError()も参照してください 。
[override virtual] void QSslSocket::disconnectFromHost()
QAbstractSocket::disconnectFromHost() を再実装します。
[signal] void QSslSocket::encrypted()
このシグナルは、QSslSocket が暗号化モードに入ったときに発信されます。このシグナルが発信された後、QSslSocket::isEncrypted()はtrueを返し、そのソケットでのそれ以降のすべての送信は暗号化されます。
QSslSocket::connectToHostEncrypted() およびQSslSocket::isEncrypted()も参照してください 。
qint64 QSslSocket::encryptedBytesAvailable() const
復号待ちの暗号化バイト数を返します。通常、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 ハンドシェイクフェーズ中にエラーが発生しなかった場合(つまり、相手側の身元が問題なく確認された場合)、QSslSocket はsslErrors() シグナルを発生させないため、この関数を呼び出す必要はありません。
警告: sslErrors() シグナルによって報告されたエラーを、必ずユーザーに確認させ、ユーザーから続行の許可が得られた場合にのみ、このメソッドを呼び出してください 。予期しないエラーが発生した場合は、接続を中断する必要があります。実際のエラーを確認せずにこのメソッドを呼び出すと、アプリケーションにセキュリティ上のリスクをもたらす可能性が非常に高くなります。使用には細心の注意を払ってください!
注:この スロットは オーバーロードされています。このスロットに接続するには:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
sslSocket, qOverload<>(&QSslSocket::ignoreSslErrors));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
sslSocket, [receiver = sslSocket]() { receiver->ignoreSslErrors(); });sslErrors()も参照してください 。
void QSslSocket::ignoreSslErrors(const QList<QSslError> &errors)
この方法では、QSslSocket に対し、errors に指定されたエラーのみを無視するように指示します。
注: ほとんどの SSL エラーは証明書に関連しているため 、そのほとんどについては、その SSL エラーに関連する期待される証明書を設定する必要があります。たとえば、自己署名証明書を使用しているサーバーに接続したい場合は、次のコードスニペットを参考にしてください:
QList<QSslCertificate> cert = QSslCertificate::fromPath("server-certificate.pem"_L1);
QSslError error(QSslError::SelfSignedCertificate, cert.at(0));
QList<QSslError> expectedSslErrors;
expectedSslErrors.append(error);
QSslSocket socket;
socket.ignoreSslErrors(expectedSslErrors);
socket.connectToHostEncrypted("server.tld", 443);この関数を複数回呼び出すと、以前の呼び出しで渡されたエラーのリストが上書きされます。空のリストを引数としてこの関数を呼び出すことで、無視するエラーのリストをクリアできます。
これはオーバーロードされた関数です。
sslErrors() およびsslHandshakeErrors()も参照してください 。
[static, since 6.1] QList<QSsl::ImplementedClass> QSslSocket::implementedClasses(const QString &backendName = {})
この関数は、backendName という名前のバックエンドによって実装された、そのバックエンド固有のクラスを返します。backendName が空の場合、現在アクティブなバックエンドに関するクエリとみなされます。
この関数は Qt 6.1 で導入されました。
QSsl::ImplementedClass 、activeBackend()、およびisClassImplemented()も参照してください 。
[static, since 6.1] bool QSslSocket::isClassImplemented(QSsl::ImplementedClass cl, const QString &backendName = {})
backendName という名前のバックエンドがクラス `cl ` を実装している場合、true を返します。backendName が空の場合、現在アクティブなバックエンドに関するクエリとみなされます。
この関数は Qt 6.1 で導入されました。
implementedClasses()も参照してください 。
bool QSslSocket::isEncrypted() const
ソケットが暗号化されている場合は `true ` を返し、そうでない場合は `false` を返します。
暗号化されたソケットは、write() またはputChar() を呼び出して書き込まれたすべてのデータを、ネットワークに書き出す前に暗号化し、ネットワークから受信したすべてのデータを、read()、readLine()、またはgetChar() を呼び出す前に復号化します。
QSslSocket 暗号化モードに入ると、encrypted() を発行します。
sessionCipher() を呼び出すと、データの暗号化および復号に使用されている暗号化アルゴリズムを確認できます。
mode()も参照してください 。
[static, since 6.1] bool QSslSocket::isFeatureSupported(QSsl::SupportedFeature ft, const QString &backendName = {})
バックエンドbackendName が機能ft をサポートしている場合、trueを返します。backendName が空の場合、現在アクティブなバックエンドに関するクエリとみなされます。
この関数は Qt 6.1 で導入されました。
QSsl::SupportedFeature およびsupportedFeatures()も参照してください 。
[static, since 6.1] bool QSslSocket::isProtocolSupported(QSsl::SslProtocol protocol, const QString &backendName = {})
backendName という名前のバックエンドが `protocol ` をサポートしている場合、true を返します。backendName が空の場合、現在アクティブなバックエンドに関するクエリとみなされます。
この関数は Qt 6.1 で導入されました。
supportedProtocols()も参照してください 。
QSslCertificate QSslSocket::localCertificate() const
ソケットのローカルcertificate を返します。ローカル証明書が割り当てられていない場合は、空の証明書を返します。
setLocalCertificate() およびprivateKey()も参照してください 。
QList<QSslCertificate> QSslSocket::localCertificateChain() const
ソケットのローカルcertificate チェーンを返します。ローカル証明書が割り当てられていない場合は、空のリストを返します。
setLocalCertificateChain()も参照してください 。
QSslSocket::SslMode QSslSocket::mode() const
ソケットの現在のモードを返します。モードは、UnencryptedMode (QSslSocket はQTcpSocket と同様に動作します)か、SslClientMode またはSslServerMode のいずれかです。後者の場合、クライアントはネゴシエーション中か、暗号化モードになっています。
モードが変更されると、QSslSocket はmodeChanged()を発行します。
SslModeも参照してください 。
[signal] void QSslSocket::modeChanged(QSslSocket::SslMode mode)
このシグナルは、QSslSocket がQSslSocket::UnencryptedMode からQSslSocket::SslClientMode またはQSslSocket::SslServerMode のいずれかに変更されたときに発せられます。mode が新しいモードです。
QSslSocket::mode()も参照してください 。
[signal] void QSslSocket::newSessionTicketReceived()
ハンドシェイク中に TLS 1.3 プロトコルがネゴシエートされた場合、QSslSocket は NewSessionTicket メッセージを受信した後、このシグナルを発行します。セッションおよびセッションチケットの有効期間のヒントが、ソケットの設定で更新されます。このセッションは、今後の TLS 接続におけるセッションの再開(および短縮されたハンドシェイク)に使用できます。
注:この 機能は OpenSSL バックエンドでのみ有効であり、OpenSSL v 1.1.1 以降が必要です。
関連項目: QSslSocket::sslConfiguration()、QSslConfiguration::sessionTicket()、QSslConfiguration::sessionTicketLifeTimeHint()も参照してください 。
QList<QOcspResponse> QSslSocket::ocspResponses() const
この関数は、OCSPステープリングを使用したTLSハンドシェイク中にサーバーが送信する可能性のある、オンライン証明書ステータスプロトコル(OCSP)の応答を返します。確定応答が受信されなかった場合、または応答がまったく受信されなかった場合は、リストは空になります。
QSslConfiguration::setOcspStaplingEnabled()も参照してください 。
QSslCertificate QSslSocket::peerCertificate() const
相手側のデジタル証明書(つまり、接続先のホストの直近の証明書)を返します。相手側が証明書を割り当てていない場合は、null 証明書を返します。
ピア証明書はハンドシェイクフェーズ中に自動的に検証されるため、この関数は通常、表示や接続診断の目的で証明書を取得するために使用されます。この証明書には、ホスト名、証明書発行者、ピアの公開鍵など、ピアに関する情報が含まれています。
ピア証明書はハンドシェイクフェーズ中に設定されるため、sslErrors() 信号またはencrypted() 信号に接続されたスロットからピア証明書にアクセスしても安全です。
null 証明書が返された場合、SSL ハンドシェイクが失敗した、接続先のホストに証明書がない、あるいは接続がないことを意味する可能性があります。
ピアの証明書チェーン全体を確認したい場合は、peerCertificateChain() を使用して、それらをまとめて取得してください。
peerCertificateChain()も参照してください 。
QList<QSslCertificate> QSslSocket::peerCertificateChain() const
相手側のデジタル証明書の連鎖、または空の証明書リストを返します。
ピアの証明書は、ハンドシェイクフェーズ中に自動的に検証されます。この関数は通常、表示用や接続診断のために証明書を取得する際に使用されます。証明書には、ホスト名、発行者名、発行者の公開鍵など、ピアおよび証明書発行者に関する情報が含まれています。
ピア証明書はハンドシェイクフェーズ中にQSslSocket に設定されるため、sslErrors()シグナルまたはencrypted()シグナルに接続されたスロットからこの関数を呼び出しても安全です。
空のリストが返された場合、SSL ハンドシェイクが失敗したか、接続先のホストに証明書がないか、あるいは接続がないことを意味する可能性があります。
相手側の直近の証明書のみを取得したい場合は、peerCertificate() を使用してください。
peerCertificate()も参照してください 。
int QSslSocket::peerVerifyDepth() const
SSLハンドシェイクフェーズ中にチェックされる、相手側の証明書チェーン内の証明書の最大数を返します。最大深度が設定されていない場合は 0(デフォルト)が返され、これは証明書チェーン全体をチェックすべきであることを示します。
証明書は発行順に検証され、まず相手側の自身の証明書から始まり、次にその発行者の証明書、という順に進みます。
setPeerVerifyDepth() およびpeerVerifyMode()も参照してください 。
[signal] void QSslSocket::peerVerifyError(const QSslError &error)
QSslSocket SSLハンドシェイク中に、暗号化が確立される前に、この信号を数回発信し、相手側の身元の確認中にエラーが発生したことを示すことがあります。error は通常、QSslSocket が相手側を安全に識別できないことを示しています。
このシグナルは、何か問題が発生した際の早期の兆候となります。このシグナルを監視することで、ハンドシェイクが完了する前に、接続されたスロット側から手動で接続を切断することを選択できます。何の措置も講じられない場合、QSslSocket はQSslSocket::sslErrors()の送信へと進みます。
sslErrors()も参照してください 。
QSslSocket::PeerVerifyMode QSslSocket::peerVerifyMode() const
ソケットの検証モードを返します。このモードによって、QSslSocket が相手側(つまり、クライアントがサーバーに証明書を要求するか、サーバーがクライアントに証明書を要求するか)に証明書を要求するかどうか、およびその証明書が有効であることを必須とするかどうかが決まります。
デフォルトのモードは `AutoVerifyPeer` であり、これにより `QSslSocket ` は、クライアントに対して `VerifyPeer ` を、サーバーに対して `QueryPeer ` を使用するよう指示されます。
setPeerVerifyMode()、peerVerifyDepth()、およびmode()も参照してください 。
QString QSslSocket::peerVerifyName() const
setPeerVerifyName またはconnectToHostEncrypted で設定された、証明書検証用の別のホスト名を返します。
setPeerVerifyName() およびconnectToHostEncrypted()も参照してください 。
[signal] void QSslSocket::preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
QSslSocket PSK暗号スイートのネゴシエーションを行う際にこの信号を発信するため、その後PSK認証が必要となります。
PSKを使用する場合、SSLハンドシェイクを継続するためには、クライアントは有効な識別情報と有効な事前共有鍵をサーバーに送信する必要があります。アプリケーションは、このシグナルに接続されたスロット内で、渡されたauthenticator オブジェクトを必要に応じて設定することで、この情報を提供できます。
注: このシグナルを無視したり 、必要な認証情報を提供しなかったりすると、ハンドシェイクが失敗し、その結果、接続が中断されます。
注: authenticator オブジェクトは ソケットが所有するものであり、アプリケーション側で削除してはなりません。
「QSslPreSharedKeyAuthenticator」も参照してください 。
QSslKey QSslSocket::privateKey() const
このソケットの秘密鍵を返します。
setPrivateKey() およびlocalCertificate()も参照してください 。
QSsl::SslProtocol QSslSocket::protocol() const
ソケットのSSLプロトコルを返します。デフォルトでは、QSsl::SecureProtocols が使用されます。
setProtocol()も参照してください 。
[override virtual protected] qint64 QSslSocket::readData(char *data, qint64 maxlen)
QAbstractSocket::readData (char *data, qint64 maxSize)を再実装します。
[override virtual] void QSslSocket::resume()
QAbstractSocket::resume() の再実装。
一時停止されたソケットでのデータ転送を再開します。このソケットに対して「setPauseMode(QAbstractSocket::PauseOnSslErrors);」が呼び出されており、sslErrors() シグナルを受信した場合、ソケットの処理を再開するにはこのメソッドを呼び出す必要があります。
QAbstractSocket::pauseMode() およびQAbstractSocket::setPauseMode()も参照してください 。
QSslCipher QSslSocket::sessionCipher() const
ソケットの暗号化cipher を返します。接続が暗号化されていない場合は、null cipherを返します。セッション用のソケットのcipherは、ハンドシェイクフェーズ中に設定されます。このcipherは、ソケットを介して送信されるデータの暗号化および復号化に使用されます。
QSslSocket また、ハンドシェイクフェーズで最終的にセッション暗号として選択される暗号の順序付きリストを設定するための関数も提供しています。この順序付きリストは、ハンドシェイクフェーズが開始される前に用意されていなければなりません。
QSslConfiguration::ciphers()、QSslConfiguration::setCiphers()、およびQSslConfiguration::supportedCiphers()も参照してください 。
QSsl::SslProtocol QSslSocket::sessionProtocol() const
ソケットの SSL/TLS プロトコルを返します。接続が暗号化されていない場合は、UnknownProtocol を返します。セッションにおけるソケットのプロトコルは、ハンドシェイクフェーズ中に設定されます。
protocol() およびsetProtocol()も参照してください 。
[static, since 6.1] bool QSslSocket::setActiveBackend(const QString &backendName)
名前が `backendName ` のバックエンドがアクティブなバックエンドとして設定されている場合、`true` を返します。`backendName ` は、`availableBackends()` が返す名前のいずれかでなければなりません。
注:アプリケーションは 、異なるバックエンドを同時に混在させることはできません。つまり、QSslSocket や、QSslCertificate 、QSslKey などの関連クラスを使用する前に、デフォルト以外のバックエンドを選択しておく必要があります。
この関数は Qt 6.1 で導入されました。
activeBackend() およびavailableBackends()も参照してください 。
void QSslSocket::setLocalCertificate(const QSslCertificate &certificate)
ソケットのローカル証明書を `certificate` に設定します。相手側に自身の身元を確認する必要がある場合、ローカル証明書は必須です。これは秘密鍵と組み合わせて使用されます。ローカル証明書を設定する場合は、秘密鍵も設定する必要があります。
ローカル証明書と秘密鍵は、サーバーソケットでは常に必要ですが、サーバーがクライアントに認証を要求する場合、クライアントソケットでもまれに使用されることがあります。
注: macOS のSecure Transport SSL バックエンドは、ローカルの証明書や鍵をインポートすることで、デフォルトのキーチェーン(デフォルトはおそらくログイン用キーチェーン)を更新する場合があります。 また、アプリケーションがこれらの秘密鍵を使用する際に、システムダイアログが表示され、許可を求める場合もあります。このような動作が望ましくない場合は、環境変数 QT_SSL_USE_TEMPORARY_KEYCHAIN を 0 以外の値に設定してください。これにより、QSslSocket は独自の一時キーチェーンを使用するようになります。
localCertificate() およびsetPrivateKey()も参照してください 。
void QSslSocket::setLocalCertificate(const QString &path, QSsl::EncodingFormat format = QSsl::Pem)
ソケットのローカルcertificate を、ファイルpath 内で最初に見つかったものに設定します。このファイルは、指定されたformat に従って解析されます。
これはオーバーロードされた関数です。
void QSslSocket::setLocalCertificateChain(const QList<QSslCertificate> &localChain)
SSLハンドシェイク中に相手側に提示する証明書チェーンを、localChain に設定します。
localCertificateChain() およびQSslConfiguration::setLocalCertificateChain()も参照してください 。
void QSslSocket::setPeerVerifyDepth(int depth)
SSLハンドシェイクフェーズ中に、ピアの証明書チェーン内で検証する証明書の最大数をdepth に設定します。深さを0に設定すると、最大深さが設定されていないことを意味し、証明書チェーン全体が検証されることを示します。
証明書は発行順に検証され、まず相手側の自身の証明書から始まり、次にその発行者の証明書という順で検証されます。
peerVerifyDepth() およびsetPeerVerifyMode()も参照してください 。
void QSslSocket::setPeerVerifyMode(QSslSocket::PeerVerifyMode mode)
ソケットの検証モードを `mode` に設定します。このモードは、QSslSocket が相手側(つまり、クライアントがサーバーに証明書を要求するか、サーバーがクライアントに証明書を要求するか)に証明書を要求するかどうか、およびその証明書が有効であることを必須とするかどうかを決定します。
デフォルトのモードは `AutoVerifyPeer` であり、これにより `QSslSocket ` は、クライアントに対しては `VerifyPeer ` を、サーバーに対しては `QueryPeer ` を使用するよう指示されます。
暗号化が開始された後にこのモードを設定しても、現在の接続には影響しません。
peerVerifyMode()、setPeerVerifyDepth()、およびmode()も参照してください 。
void QSslSocket::setPeerVerifyName(const QString &hostName)
TCP接続で使用されるホスト名ではなく、hostName で指定された別のホスト名を、証明書の検証用に設定します。
peerVerifyName() およびconnectToHostEncrypted()も参照してください 。
void QSslSocket::setPrivateKey(const QSslKey &key)
ソケットの秘密鍵key をkey に設定します。秘密鍵とローカル証明書certificate は、SSLの相手方に自身の身元を証明する必要があるクライアントおよびサーバーによって使用されます。
SSL サーバーソケットを作成する場合は、鍵とローカル証明書の両方が必要です。SSL クライアントソケットを作成する場合、クライアントが SSL サーバーに対して自身を認証する必要がある場合は、鍵とローカル証明書が必要です。
privateKey() およびsetLocalCertificate()も参照してください 。
void QSslSocket::setPrivateKey(const QString &fileName, QSsl::KeyAlgorithm algorithm = QSsl::Rsa, QSsl::EncodingFormat format = QSsl::Pem, const QByteArray &passPhrase = QByteArray())
ファイル `fileName ` 内の文字列を読み取り、指定された `algorithm ` およびエンコーディング `format ` を使用してデコードし、`SSL key` を生成します。エンコードされた鍵が暗号化されている場合は、`passPhrase ` を使用して復号します。
ソケットの秘密鍵は、構築された鍵に設定されます。秘密鍵とローカルcertificate は、SSLの相手方に自身の身元を証明する必要があるクライアントおよびサーバーによって使用されます。
SSL サーバーソケットを作成する場合は、鍵とローカル証明書の両方が必要です。SSL クライアントソケットを作成する場合、クライアントが SSL サーバーに対して自身の身元を証明する必要がある場合は、鍵とローカル証明書が必要です。
これはオーバーロードされた関数です。
privateKey() およびsetLocalCertificate()も参照してください 。
void QSslSocket::setProtocol(QSsl::SslProtocol protocol)
ソケットのSSLプロトコルをprotocol に設定します。これは次に開始されるハンドシェイクに影響します。すでに暗号化されているソケットに対してこの関数を呼び出しても、ソケットのプロトコルには影響しません。
protocol()も参照してください 。
[override virtual] void QSslSocket::setReadBufferSize(qint64 size)
QAbstractSocket::setReadBufferSize (qint64 サイズ)を再実装します。
QSslSocket の内部読み取りバッファのサイズをsize バイトに設定します。
[override virtual] bool QSslSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
QAbstractSocket::setSocketDescriptor(qintptr 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 状態に関連するフィールドを設定することはできません。
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ハンドシェイク後にこのシグナルを発行し、相手側の身元確認中に1つ以上のエラーが発生したことを示します。これらのエラーは通常、QSslSocket が相手側を安全に識別できないことを示しています。何らかの措置を講じない限り、このシグナルが発行された後に接続は切断されます。
発生したエラーにもかかわらず接続を継続したい場合は、このシグナルに接続されたスロット内から `QSslSocket::ignoreSslErrors()` を呼び出す必要があります。後でエラーリストにアクセスする必要がある場合は、`sslHandshakeErrors()` を呼び出すことができます。
errors QSslSocket がピアの身元を確認できない原因となるエラーが 1 つ以上含まれています。
注: このシグナルに接続する際、Qt::QueuedConnection を使用することはできません 。そうした場合、QSslSocket::ignoreSslErrors() を呼び出しても何の効果もありません。
peerVerifyError()も参照してください 。
QList<QSslError> QSslSocket::sslHandshakeErrors() const
発生した最新のSSLエラーのリストを返します。これは、QSslSocket がsslErrors()シグナルを介して渡すリストと同じものです。エラーなしで接続が暗号化されていた場合、この関数は空のリストを返します。
connectToHostEncrypted()も参照してください 。
[static] long QSslSocket::sslLibraryBuildVersionNumber()
コンパイル時に使用されているSSLライブラリのバージョン番号を返します。SSLサポートが利用できない場合は、-1が返されます。
sslLibraryVersionNumber()も参照してください 。
[static] QString QSslSocket::sslLibraryBuildVersionString()
コンパイル時に使用されているSSLライブラリのバージョン文字列を返します。SSLサポートが利用できない場合は、空の値が返されます。
sslLibraryVersionString()も参照してください 。
[static] long QSslSocket::sslLibraryVersionNumber()
使用中のSSLライブラリのバージョン番号を返します。なお、これはコンパイル時ではなく、実行時に使用されているライブラリのバージョンであることに注意してください。SSLがサポートされていない場合は、-1が返されます。
[static] QString QSslSocket::sslLibraryVersionString()
使用中のSSLライブラリのバージョン文字列を返します。これはコンパイル時ではなく、実行時に使用されているライブラリのバージョンであることに注意してください。SSLがサポートされていない場合、空の値が返されます。
[slot] void QSslSocket::startClientEncryption()
クライアント接続に対して遅延SSLハンドシェイクを開始します。この関数は、ソケットがConnectedState の状態にあり、かつUnencryptedMode の状態にあるときに呼び出すことができます。まだ接続されていない場合、またはすでに暗号化されている場合、この関数は何の効果も持ちません。
STARTTLS 機能を実装しているクライアントは、多くの場合、遅延 SSL ハンドシェイクを利用します。その他のほとんどのクライアントは、代わりにconnectToHostEncrypted() を使用することで、この関数を直接呼び出す必要がなくなります。 () は自動的にハンドシェイクを実行します。
connectToHostEncrypted() およびstartServerEncryption()も参照してください 。
[slot] void QSslSocket::startServerEncryption()
サーバー接続に対して遅延SSLハンドシェイクを開始します。この関数は、ソケットがConnectedState の状態にあり、かつUnencryptedMode の状態にあるときに呼び出すことができます。接続されていない場合や、すでに暗号化されている場合は、この関数は何の効果も持ちません。
サーバーソケットの場合、この関数を呼び出すことがSSLハンドシェイクを開始する唯一の方法です。 ほとんどのサーバーは、接続を受信した直後、あるいはSSLモードに入るよう指示するプロトコル固有のコマンドを受信した結果として、この関数を呼び出します(例えば、サーバーは「STARTTLS\r\n 」という文字列を受信した際に、この関数を呼び出して応答する場合があります)。
SSL サーバーを実装する最も一般的な方法は、QTcpServer のサブクラスを作成し、QTcpServer::incomingConnection() を再実装することです。その後、返されたソケット記述子はQSslSocket::setSocketDescriptor() に渡されます。
connectToHostEncrypted() およびstartClientEncryption()も参照してください 。
[static, since 6.1] QList<QSsl::SupportedFeature> QSslSocket::supportedFeatures(const QString &backendName = {})
この関数は、backendName という名前のバックエンドがサポートする機能を返します。backendName が空の場合、現在アクティブなバックエンドに関するクエリとみなされます。
この関数は Qt 6.1 で導入されました。
QSsl::SupportedFeature およびactiveBackend()も参照してください 。
[static, since 6.1] QList<QSsl::SslProtocol> QSslSocket::supportedProtocols(const QString &backendName = {})
backendName という名前のバックエンドが利用可能な場合、この関数は、そのバックエンドがサポートする TLS プロトコルバージョンのリストを返します。backendName が空の場合、現在アクティブなバックエンドに関する問い合わせとみなされます。それ以外の場合は、この関数は空のリストを返します。
この関数は Qt 6.1 で導入されました。
availableBackends()、activeBackend()、およびisProtocolSupported()も参照してください 。
[static] bool QSslSocket::supportsSsl()
このプラットフォームがSSLをサポートしている場合はtrue を返し、そうでない場合はfalseを返します。プラットフォームがSSLをサポートしていない場合、ソケットは接続フェーズで失敗します。
[override virtual] bool QSslSocket::waitForBytesWritten(int msecs = 30000)
QAbstractSocket::waitForBytesWritten (int msecs)を再実装しています。
[override virtual] bool QSslSocket::waitForConnected(int msecs = 30000)
QAbstractSocket::waitForConnected(int msecs) の再実装です。
ソケットが接続されるか、msecs ミリ秒が経過するかのいずれか早い方まで待機します。接続が確立されている場合、この関数はtrue を返します。そうでない場合はfalse を返します。
QAbstractSocket::waitForConnected()も参照してください 。
[override virtual] bool QSslSocket::waitForDisconnected(int msecs = 30000)
QAbstractSocket::waitForDisconnected(int msecs) を再実装します。
ソケットが切断されるか、msecs ミリ秒が経過するかのいずれか早い方まで待機します。接続が切断された場合、この関数はtrue を返します。それ以外の場合はfalse を返します。
QAbstractSocket::waitForDisconnected()も参照してください 。
bool QSslSocket::waitForEncrypted(int msecs = 30000)
ソケットがSSLハンドシェイクを完了し、encrypted() を発行するまで、あるいはmsecs ミリ秒が経過するまで待機します(いずれか早い方)。encrypted() が発行された場合、この関数は true を返します。それ以外の場合(例えば、ソケットが切断された場合やSSLハンドシェイクが失敗した場合など)は、false を返します。
次の例は、ソケットの暗号化が完了するまで最大1秒間待機します:
socket->connectToHostEncrypted("imap", 993);
if(socket->waitForEncrypted(1000))
qDebug("Encrypted!");msecs が -1 の場合、この関数はタイムアウトしません。
startClientEncryption()、startServerEncryption()、encrypted()、およびisEncrypted()も参照してください 。
[override virtual] bool QSslSocket::waitForReadyRead(int msecs = 30000)
QAbstractSocket::waitForReadyRead (int msecs)を再実装します。
[override virtual protected] qint64 QSslSocket::writeData(const char *data, qint64 len)
QAbstractSocket::writeData (const char *data, qint64 size)を再実装します。
関連する非メンバー関数
[since 6.0] enum class AlertLevel
アラートメッセージのレベルを記述します
この列挙型は、送信または受信されたアラートメッセージのレベルを表します。
| 定数 | 値 | 説明 |
|---|---|---|
QSslSocket::AlertLevel::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 では、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 ステープリング (Online Certificate Status Protocol)。 |
QSslSocket::SupportedFeature::Psk | 4 | 事前共有鍵。 |
QSslSocket::SupportedFeature::SessionTicket | 5 | セッションチケット。 |
QSslSocket::SupportedFeature::Alerts | 6 | 送受信されたアラートメッセージに関する情報。 |
この列挙型は Qt 6.1 で導入されました。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.