QSslKeyingMaterial Class
Beschreibt exportiertes Schlüsselmaterial, das aus einer TLS-Sitzung stammt. Mehr...
| Kopfzeile: | #include <QSslKeyingMaterial> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Seit: | Qt 6.12 |
| Status: | Technologievorschau |
Diese Klasse befindet sich in der Technologievorschau und kann sich noch ändern.
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QSslKeyingMaterial ist Teil der Netzwerkprogrammier-API.
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
QSslKeyingMaterial – Vergleiche
| Kategorie | Vergleichbare Typen |
|---|---|
| Gleichheit | QSslKeyingMaterial |
Öffentliche Funktionen
| QSslKeyingMaterial() | |
| QSslKeyingMaterial(const QByteArray &label, qsizetype size) | |
| QSslKeyingMaterial(const QByteArray &label, qsizetype size, const QByteArray &context) | |
| QSslKeyingMaterial | clone() const |
| QByteArray | context() const |
| bool | isValid() const |
| QByteArray | label() const |
| qsizetype | requestedSize() const |
| void | swap(QSslKeyingMaterial &other) |
| QByteArray | value() const |
Verwandte Nicht-Mitglieder
| size_t | qHash(const QSslKeyingMaterial &key) |
| size_t | qHash(const QSslKeyingMaterial &key, size_t seed) |
| QDebug | operator<<(QDebug debug, const QSslKeyingMaterial &keying) |
Ausführliche Beschreibung
QSslKeyingMaterial stellt eine Anforderung an Schlüsselmaterial dar, das mithilfe des TLS-Exporter-Mechanismus aus einer bestehenden TLS-Verbindung abgeleitet wurde.
Der Exporter-Mechanismus ist in RFC 5705 für TLS 1.2 und frühere Versionen sowie in RFC 8446 für TLS 1.3 definiert. Er ermöglicht es Anwendungen, kryptografisch getrenntes Schlüsselmaterial aus der TLS-Sitzung abzuleiten, ohne die Verkehrsschlüssel der Sitzung offenzulegen.
Jedes QSslKeyingMaterial-Objekt gibt Folgendes an:
- eine Exporter-Kennung, die den Zweck des abgeleiteten Schlüsselmaterials angibt
- einen optionalen Kontextwert, der das Schlüsselmaterial an anwendungsspezifische Daten bindet
- die gewünschte Größe des exportierten Schlüsselmaterials
Das eigentliche Schlüsselmaterial wird vom TLS-Backend nach einem erfolgreichen Handshake abgeleitet und kann mit ` value()` ausgelesen werden.
QSslKeyingMaterial-Objekte werden in der Regel vor dem Aufbau einer TLS-Verbindung über ` QSslConfiguration::setKeyingMaterial()` konfiguriert.
Beispiel: Deterministischer Export auf Client und Server
// Both client and server configure the same label and optional context
QSslKeyingMaterial keying("session-label", 32, "app-specific-context");
// After the TLS handshake completes get data from QSslConfiguration.
QByteArray derived = sslConfiguration().takeKeyingMaterial(keying)->value();
// Both client and server will obtain the same 'derived' bytes
// even though they each performed the derivation independently.
use(derived);Sicherheitshinweise
Exportiertes Schlüsselmaterial ist ein Geheimnis. ` QByteArray ` ist ein Copy-on-Write-Container, sodass sich jedes `QSslKeyingMaterial`-Objekt, das einen Wert enthält, einen gemeinsamen Puffer teilt und das Geheimnis so lange im Speicher verbleibt, wie eines dieser Objekte existiert. Eine Anwendung, die sicherstellen muss, dass sie die einzige verbleibende Referenz hält, muss die Qt-internen Referenzen explizit freigeben.
Nach einem erfolgreichen Handshake befindet sich der Wert an genau einer Stelle innerhalb von Qt: dem Eintrag „QSslKeyingMaterial“ in der internen „ QSslConfiguration “ des Sockets. Jedes von „ QSslSocket::sslConfiguration()“ zurückgegebene „ QSslConfiguration “ ist eine eigenständige Kopie dieser Konfiguration, die sich den Puffer des Werts mit ihr teilt.
Beide Überladungen von ` QSslConfiguration::takeKeyingMaterial()` übergeben die Werte, anstatt sie gemeinsam zu nutzen: Was sie zurückgeben, enthält die einzige Referenz auf den Wert, und die Einträge, die sie in der Konfiguration hinterlassen, in der sie aufgerufen wurden, sind wertlose ` clones`. Kopieren Sie den Wert mit ` value()` aus dem zurückgegebenen Objekt heraus und lassen Sie das Objekt selbst aus dem Gültigkeitsbereich verschwinden; schreiben Sie anschließend die Konfiguration zurück in den Socket: Dadurch wird der Eintrag des Sockets mit dem wertlosen Eintrag überschrieben, wodurch die letzte Referenz, die Qt hält, entfernt wird.
QSslConfiguration config = socket->sslConfiguration();
// Copy the value out of the temporary that owns it, and let it die:
QByteArray secret = config.takeKeyingMaterial(request)->value();
// Overwrite the socket's copy with the entry left behind, which has no value:
socket->setSslConfiguration(config);Die folgenden Kopien liegen außerhalb der Kontrolle des Sockets und müssen separat behandelt werden:
- Jede andere Kopie von ` QSslConfiguration `, die die Anwendung noch hält, einschließlich einer, die in einem ` QNetworkRequest ` gespeichert oder mit ` QSslConfiguration::setDefaultConfiguration()` installiert wurde. Das Entnehmen des Werts aus einer Kopie hat keine Auswirkungen auf die anderen.
- Eine Konfiguration, die nie an den Socket zurückgeschrieben wurde. Das Abrufen der Werte aus einem ` QSslConfiguration ` entfernt nur diese Kopie der Konfiguration; der Socket behält seine eigene, bis er die wertlosen Einträge erhält.
- Jede von der Anwendung selbst erstellte Kopie von `QSslKeyingMaterial`. Verwenden Sie ` clone()` (), wenn eine Kopie einer Anforderung ohne deren Wert benötigt wird.
Der Socket verwirft die Werte außerdem, wenn er einen neuen Handshake startet – da seine Einträge dann auf wertlose Klone zurückgesetzt werden – sowie bei seiner Zerstörung. Beides ersetzt nicht den oben genannten expliziten Schritt für einen Socket, der aktiv bleibt.
Dokumentation der Member-Funktionen
QSslKeyingMaterial::QSslKeyingMaterial()
Erstellt standardmäßig eine Instanz von QSslKeyingMaterial.
Eine Standardinstanz ist niemals gültig.
Siehe auch ` isValid()`.
[explicit] QSslKeyingMaterial::QSslKeyingMaterial(const QByteArray &label, qsizetype size)
[explicit] QSslKeyingMaterial::QSslKeyingMaterial(const QByteArray &label, qsizetype size, const QByteArray &context)
Erstellt ein „ QSslKeyingMaterial “-Objekt mit dem angegebenen Exporter „ label “, der Ausgabe „ size “ und dem optionalen „ context “.
Das „ label “ gibt den Zweck des exportierten Schlüsselmaterials an und darf nicht leer sein. „ size “ gibt die Anzahl der Bytes an, die aus dem TLS-Exporter abgeleitet werden sollen.
Der optionale „ context “ ist anwendungsdefiniertes Datenmaterial, das in den Schlüsselableitungsprozess eingebunden wird, um eine Domänentrennung zu gewährleisten.
Das Schlüsselmaterial selbst wird erst generiert, wenn ein TLS-Handshake erfolgreich abgeschlossen wurde.
Hinweis: Unter TLS 1.2 (RFC 5705) erzeugen ein Null-Kontext und ein leerer (nicht-Null-)Kontext unterschiedliches Schlüsselmaterial: Das Feld für die Kontextlänge wird vollständig weggelassen, wenn kein Kontext vorhanden ist, was zu einer unterschiedlichen PRF-Eingabe führt. Unter TLS 1.3 (RFC 8446) sind ein fehlender Kontext und ein leerer Kontext als gleichwertig definiert und erzeugen dasselbe Schlüsselmaterial. Verwenden Sie QByteArray::isNull(), um sie zu unterscheiden.
Siehe auch isValid(), label(), context() und value().
QSslKeyingMaterial QSslKeyingMaterial::clone() const
Gibt eine Kopie dieser Schlüsselmaterialanforderung zurück, ohne die Funktion „ value()“.
Das zurückgegebene Objekt enthält die Exporter- label(), context() und requestedSize(), sodass es verwendet werden kann, um dasselbe Schlüsselmaterial erneut anzufordern; sein value() ist jedoch leer. Verwenden Sie es, um eine Kopie zu initialisieren oder einen Eintrag zurückzusetzen, ohne den Wert zu übernehmen.
Siehe auch „ value()“.
QByteArray QSslKeyingMaterial::context() const
Gibt den optionalen Kontextwert zurück, der zur Ableitung des Schlüsselmaterials verwendet wird.
Der Kontextwert bindet das exportierte Schlüsselmaterial an anwendungsspezifische Daten und trägt dazu bei, eine versehentliche Wiederverwendung identischer Schlüssel für unterschiedliche Zwecke zu verhindern.
Wenn kein Kontext angegeben wurde, wird ein null/leeres „ QByteArray “ zurückgegeben (siehe QSslKeyingMaterial::QSslKeyingMaterial()).
Siehe auch label() und value().
[noexcept] bool QSslKeyingMaterial::isValid() const
Gibt „true“ zurück, wenn dieses „ QSslKeyingMaterial “-Objekt eine gültige Exporter-Anfrage beschreibt.
Ein ` QSslKeyingMaterial `-Objekt gilt als gültig, wenn es eine nicht leere Exporter-Bezeichnung und eine positive Ausgabegröße aufweist.
Siehe auch „ label()“ und „ value()“.
QByteArray QSslKeyingMaterial::label() const
Gibt die Exporteur-Kennung zurück, die zur Ableitung des Schlüsselmaterials verwendet wurde.
Die Bezeichnung identifiziert den Zweck des exportierten Schlüsselmaterials und wird wörtlich in die TLS-Exporter-Ableitung übernommen.
Siehe auch context() und value().
[noexcept] qsizetype QSslKeyingMaterial::requestedSize() const
Die gewünschte Größe des Schlüsselmaterials.
Die gewünschte Größe ist die Anzahl der Bytes, die das Handshake-Protokoll für den in den Funktionen „ label()“ () und „ context()“ () des angeforderten Schlüsselmaterials beschriebenen Zweck generieren soll.
Siehe auch value().
[noexcept] void QSslKeyingMaterial::swap(QSslKeyingMaterial &other)
Ersetzt dieses Schlüsselmaterial durch „ other “. Dieser Vorgang ist sehr schnell und schlägt niemals fehl.
QByteArray QSslKeyingMaterial::value() const
Gibt das exportierte Schlüsselmaterial zurück.
Das zurückgegebene „ QByteArray “ enthält das Schlüsselmaterial, das unter Verwendung der konfigurierten Exporter-Bezeichnung und des Kontexts aus der TLS-Sitzung abgeleitet wurde.
Wenn der TLS-Handshake nicht erfolgreich abgeschlossen wurde oder das TLS-Backend keine Schlüsselexporter unterstützt, gibt diese Funktion einen leeren Wert zurück.
Hinweis: Der Inhalt des zurückgegebenen Schlüsselmaterials ist sicherheitsrelevant und muss mit Sorgfalt behandelt werden. Informationen dazu, wie sichergestellt werden kann, dass das zurückgegebene „ QByteArray “ die einzige Kopie davon bleibt, finden Sie unter „ Security Considerations “.
Siehe auch label(), context() und requestedSize().
Verwandte Nicht-Mitglieder
[noexcept] size_t qHash(const QSslKeyingMaterial &key)
[noexcept] size_t qHash(const QSslKeyingMaterial &key, size_t seed)
Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.
QDebug operator<<(QDebug debug, const QSslKeyingMaterial &keying)
Schreibt eine textuelle Darstellung des Schlüsselmaterials keying in das Debug-Objekt debug.
Siehe auch Debugging-Techniken.
© 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.