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 はNetwork Programming 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 |
詳細説明
トランスポート・レイヤー・セキュリティ(TLS)を使用する TCP サーバーを実装するために、QTcpServer の代わりに使用するクラスです。
セキュア・ハンドシェイク設定を構成するには、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 を破棄するのはユーザの責任である。socket はQSslServer オブジェクトが破棄されるまで破棄されない。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 ハンドシェイクの間、暗号化が確立する前にこのシグナルを何度か発して、相手の ID を確立する際にエラーが発生したことを示すことができる。 は通常、 がピアを安全に識別できないことを示す。error socket
このシグナルは、何か問題が発生したときに、その兆候を早期に示してくれる。このシグナルに接続することで、ハンドシェイクが完了する前に、接続されたスロットの内部から手動で接続を切断することを選択できる。何もアクションを起こさなければ、QSslServer はsslErrors()の発信に進む。
sslErrors()も参照のこと 。
[signal]
void QSslServer::preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator)
QSslServer は、 がPSK暗号スイートをネゴシエートするときにこのシグナルを発するので、PSK認証が必要となる。socket
PSKを使う場合、SSLハンドシェイクを続けるためには、サーバーは有効なIDと有効な事前共有鍵を提供しなければなりません。アプリケーションはこのシグナルに接続されたスロットに、渡された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 ハンドシェイクの後にこのシグナルを発して、ピアの ID を確立する間に 1 つ以上のエラーが発生したことを示す。エラーは通常、 がピアを安全に識別できないことを示す。何らかのアクションを取らない限り、このシグナルが発せられた後に接続は切断されます。socket
エラーが発生したにもかかわらず接続を続行したい場合は、このシグナルに接続されたスロットの内部からQSslSocket::ignoreSslErrors() を呼び出す必要がある。後の時点でエラーリストにアクセスする必要がある場合は、sslHandshakeErrors() を呼び出すことができる。
errors には、 がピアの ID を検証できないようなエラーが 1 つ以上含まれている。QSslSocket
注意: このシグナルへの接続時にQt::QueuedConnection を使用することはできない。また、QSslSocket::ignoreSslErrors() を呼び出しても何の効果もない。
peerVerifyError()も参照のこと 。
[signal]
void QSslServer::startedEncryptionHandshake(QSslSocket *socket)
このシグナルは、socket に接続されたクライアントがTLSハンドシェイクを開始するときに発せられる。
© 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.