QSslServer Class

TLS による暗号化されたセキュアな TCP サーバーを実装します。詳細...

Header: #include <QSslServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Since: Qt 6.4
Inherits: QTcpServer

パブリック関数

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 が削除されると削除される。メモリの浪費を避けるため、このオブジェクトを使い終わったら明示的に破棄するのが良い方法です。

QTcpServerQSslConfiguration 、および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::AlertLevelQSsl::AlertTypeも参照

[signal] void QSslServer::alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)

QSslServer socket からピアにアラートメッセージが送信された場合、このシグナルを発行します。 は、それが警告か致命的なエラーかを記述します。 は、アラートメッセージのコードを示します。アラートメッセージのテキストによる説明が利用可能な場合、それは で提供される。level type description

注意: このシグナルはほとんどが情報提供であり、デバッグ目的で使用することができます。

注意: すべてのバックエンドがこの機能をサポートしているわけではありません。

alertReceived()、QSsl::AlertLevelQSsl::AlertTypeも参照のこと

[signal] void QSslServer::errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError)

このシグナルは、ハンドシェーク中にエラーが発生した後に発行される。socketError パラメータは、発生したエラーのタイプを記述する。

ソケットハンドシェイクが暗号化状態に達していない場合、このシグナルが発せられた後、socket は自動的に削除される。しかし、socket が暗号化に成功すると、QSslServer の保留中のコネクションキューに挿入される。ユーザがQTcpServer::nextPendingConnection() を呼び出した場合、socket を破棄するのはユーザの責任であり、socketQSslServer オブジェクトが破棄されるまで破棄されない。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) を再実装する。

新しい接続が確立されたときに呼び出される。

socketQSslSocket に変換する。

[signal] void QSslServer::peerVerifyError(QSslSocket *socket, const QSslError &error)

QSslServer は、SSL ハンドシェイクの間、暗号化が確立される前にこのシグナルを何度か発して、相手の ID を確立する際にエラーが発生したことを示すことができます。 は通常、 がピアを安全に識別できないことを示す。error socket

このシグナルは、何か問題が発生したときに、その兆候を早期に示してくれる。このシグナルに接続することで、ハンドシェイクが完了する前に、接続されたスロットの内部から手動で接続を切断することを選択できる。何もアクションを起こさなければ、QSslServersslErrors()の発信に進む。

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 ハンドシェイクを開始するときに発行されます。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。