QSslServer Class
TLS 上に、暗号化された安全な TCP サーバーを実装します。詳細...
| ヘッダー: | #include <QSslServer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| 以下のように: | Qt 6.4 |
| 継承元: | QTcpServer |
- 継承されたメンバーを含む全メンバーの一覧
- QSslServer は、ネットワークプログラミング API の一部です。
パブリック関数
| QSslServer(QObject *parent = nullptr) | |
| virtual | ~QSslServer() override |
| int | handshakeTimeout() const |
| void | setHandshakeTimeout(int timeout) |
| void | setSslConfiguration(const QSslConfiguration &sslConfiguration) |
| QSslConfiguration | sslConfiguration() const |
シグナル
| void | alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
| void | alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
| void | errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError) |
| void | handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error) |
| void | peerVerifyError(QSslSocket *socket, const QSslError &error) |
| void | preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator) |
| void | sslErrors(QSslSocket *socket, const QList<QSslError> &errors) |
| void | startedEncryptionHandshake(QSslSocket *socket) |
再実装されたプロテクトされた関数
| virtual void | incomingConnection(qintptr socket) override |
詳細な説明
QTcpServer の代わりに使用して、Transport Layer Security (TLS) を使用した TCP サーバーを実装するためのクラスです。
セキュアなハンドシェイク設定を行うには、QSslConfiguration オブジェクトに対して該当するセッター関数を使用し、それをsetSslConfiguration() 関数の引数として指定します。その後処理されるすべての着信接続では、これらの設定が適用されます。
着信接続のリスニングを開始するには、`QTcpServer` から継承された `listen()` 関数を使用します。その他の設定は、`QTcpServer ` クラスから継承されたセッター関数を使用して構成できます。
着信接続の試行に応答するには、このクラスのシグナルに接続してください。これらはQSslSocket のシグナルと同じですが、対象のソケットへのポインタも渡されます。
pendingConnectionAvailable() シグナルに応答する際は、nextPendingConnection() 関数を使用して、次の着信接続を取得し、保留中の接続キューから取り出してください。QSslSocket は QSslServer の子オブジェクトであり、QSslServer が破棄されるとともに破棄されます。メモリの無駄遣いを避けるため、使用が終了したらオブジェクトを明示的に破棄することをお勧めします。
QTcpServer 、QSslConfiguration 、およびQSslSocketも参照してください 。
メンバ関数のドキュメント
[explicit] QSslServer::QSslServer(QObject *parent = nullptr)
指定されたparent を使用して、新しいQSslServerを構築します。
[override virtual noexcept] QSslServer::~QSslServer()
QSslServer を削除します。
開いているすべての接続が閉じられます。
[signal] void QSslServer::alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslServer socket がピアからアラートメッセージを受信した場合、このシグナルを発行します。 は、そのアラートが致命的なものか警告かを示します。 は、アラートが送信された理由を説明するコードです。アラートメッセージのテキストによる説明が利用可能な場合は、 にその内容が渡されます。level type description
注:この シグナルは 主に情報提供およびデバッグを目的としており、アプリケーション側での処理は必要ありません。アラートが致命的なものである場合、基盤となるバックエンドがこれを処理し、接続を閉じます。
注: すべてのバックエンドがこの機能をサポートしているわけではありません 。
関連項目: alertSent()、QSsl::AlertLevel 、およびQSsl::AlertType 。
[signal] void QSslServer::alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslServer socket からピアにアラートメッセージが送信された場合、このシグナルを発行します。 には、それが警告か致命的なエラーかが記述されます。 には、アラートメッセージのコードが指定されます。アラートメッセージのテキストによる説明が利用可能な場合は、 にその内容が渡されます。level type description
注:この シグナルは 主に情報提供を目的としており、デバッグに使用できますが、通常、アプリケーション側での対応は不要です。
注: すべてのバックエンドがこの機能をサポートしているわけではありません 。
関連項目: alertReceived()、QSsl::AlertLevel 、およびQSsl::AlertType 。
[signal] void QSslServer::errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError)
このシグナルは、ハンドシェイク中にエラーが発生した後に発行されます。socketError パラメータは、発生したエラーの種類を表します。
ソケットのハンドシェイクが暗号化状態に達していない場合、このシグナルが発信された後、socket は自動的に削除されます。しかし、socket の暗号化に成功した場合は、QSslServer の保留中の接続キューに挿入されます。ユーザーがQTcpServer::nextPendingConnection()を呼び出した場合、socket を破棄するのはユーザーの責任であり、そうしないと、QSslServer オブジェクトが破棄されるまで、socket は破棄されません。socket が保留中の接続キューに挿入された後にエラーが発生した場合、このシグナルは発火せず、socket は削除も破棄もされません。
注: このシグナルに接続する際に `Qt::QueuedConnection ` を使用することは できません。そうした場合、シグナルが処理される時点で `socket ` はすでに破棄されてしまっていることになります。
関連項目: QSslSocket::error() およびerrorString()。
[signal] void QSslServer::handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error)
QSslServer socket によって証明書検証エラーが検出され、かつ で早期エラー報告が有効になっている場合、このシグナルを発行します。アプリケーションは、 を確認し、ハンドシェイクを継続するか、それとも中止して相手側に警告メッセージを送信するかを判断することが期待されます。シグナルとスロットの接続は直接でなければなりません。QSslConfiguration error
QSslSocket::continueInterruptedHandshake()、sslErrors()、およびQSslConfiguration::setHandshakeMustInterruptOnError()も参照してください 。
int QSslServer::handshakeTimeout() const
現在設定されているハンドシェイクのタイムアウトを返します。
setHandshakeTimeout()も参照してください 。
[override virtual protected] void QSslServer::incomingConnection(qintptr socket)
QTcpServer::incomingConnection (qintptr socketDescriptor)を再実装します。
新しい接続が確立されたときに呼び出されます。
socket をQSslSocket に変換します。
[signal] void QSslServer::peerVerifyError(QSslSocket *socket, const QSslError &error)
QSslServer SSLハンドシェイク中、暗号化が確立される前に、このシグナルを数回発信し、相手側の身元確認中にエラーが発生したことを示すことがあります。error は通常、socket が相手側を安全に識別できないことを示しています。
このシグナルは、何か問題が発生した際の早期の兆候となります。このシグナルに接続することで、ハンドシェイクが完了する前に、接続済みのスロット内から手動で接続を切断することを選択できます。何の措置も講じられない場合、QSslServer はsslErrors()の送信に進みます。
sslErrors()も参照してください 。
[signal] void QSslServer::preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator)
QSslServer socket がPSK暗号スイートをネゴシエートする際、この信号を発信します。そのため、その後PSK認証が必要となります。
PSK を使用する場合、SSL ハンドシェイクを継続するためには、サーバーが有効な識別情報と有効な事前共有鍵を提供する必要があります。アプリケーションは、このシグナルに接続されたスロット内で、渡された `authenticator ` オブジェクトを必要に応じて設定することで、この情報を提供できます。
注: このシグナルを無視したり 、必要な認証情報を提供しなかったりすると、ハンドシェイクが失敗し、その結果、接続が中断されます。
注: authenticator オブジェクトは socket が所有しており、アプリケーション側で削除してはなりません。
「QSslPreSharedKeyAuthenticator」も参照してください 。
void QSslServer::setHandshakeTimeout(int timeout)
すべての着信ハンドシェイクで使用するtimeout を、ミリ秒単位で設定します。
これは、悪意のあるものか偶発的なものかを問わず、クライアントがサーバーに接続したものの、通信やハンドシェイクの開始を試みないというシナリオに関連します。その場合、QSslServer は、timeout ミリ秒が経過すると自動的に接続を終了します。
デフォルトのタイムアウトは 5000 ミリ秒 (5 秒) です。
注: 基盤となる TLSフレームワークには 、現在または将来的に独自のタイムアウトロジックが実装される可能性がありますが、この関数はそれには影響しません。
注: この関数に渡される` timeout ` は 、新しい接続にのみ適用されます。クライアントがすでに接続されている場合は、接続時に設定されたタイムアウトが使用されます。
handshakeTimeout()も参照してください 。
void QSslServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)
以降のすべての着信接続で使用するsslConfiguration を設定します。
すべてのハンドシェイク中に所望の設定が確実に適用されるようにするため、listen() を呼び出す前に、この関数を呼び出す必要があります。
sslConfiguration() およびQSslSocket::setSslConfiguration()も参照してください 。
QSslConfiguration QSslServer::sslConfiguration() const
現在のSSL設定を返します。
setSslConfiguration()も参照してください 。
[signal] void QSslServer::sslErrors(QSslSocket *socket, const QList<QSslError> &errors)
QSslServer SSLハンドシェイク後にこのシグナルを発行し、対等側の身元確認中に1つ以上のエラーが発生したことを示します。これらのエラーは通常、socket が対等側を安全に識別できないことを示しています。何らかの措置を講じない限り、このシグナルが発行された後に接続は切断されます。
発生したエラーにもかかわらず接続を継続したい場合は、このシグナルに接続されたスロット内から `QSslSocket::ignoreSslErrors()` を呼び出す必要があります。後でエラーリストにアクセスする必要がある場合は、`sslHandshakeErrors()` を呼び出すことができます。
errors QSslSocket が相手先の身元を検証できない原因となるエラーが 1 つ以上含まれています。
注: このシグナルに接続する際、Qt::QueuedConnection を使用することはできません 。また、QSslSocket::ignoreSslErrors() を呼び出しても何の効果もありません。
peerVerifyError()も参照してください 。
[signal] void QSslServer::startedEncryptionHandshake(QSslSocket *socket)
このシグナルは、socket に接続しているクライアントが TLS ハンドシェイクを開始したときに発生します。
© 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.