4. TLS Client and Server Handshake Behavior (TLS-Client- und Server-Handshake-Verhalten)
4. TLS Client and Server Handshake Behavior (TLS-Client- und Server-Handshake-Verhalten)
Diese Spezifikation erweitert die ClientHello- und ServerHello-Nachrichten gemäß den in [RFC5246] definierten Erweiterungsverfahren. Sie erweitert oder modifiziert keine andere TLS-Nachricht.
Hinweis: Es sind keine neuen Cipher-Suites erforderlich, um rohe öffentliche Schlüssel zu verwenden. Alle vorhandenen Cipher-Suites, die eine Schlüsselaustauschmethode unterstützen, die mit der definierten Erweiterung kompatibel ist, können verwendet werden.
Der High-Level-Nachrichtenaustausch in Abbildung 5 zeigt die client_certificate_type und server_certificate_type-Erweiterungen, die zu den Client- und Server-Hello-Nachrichten hinzugefügt wurden.
client_hello,
client_certificate_type,
server_certificate_type ->
<- server_hello,
client_certificate_type,
server_certificate_type,
certificate,
server_key_exchange,
certificate_request,
server_hello_done
certificate,
client_key_exchange,
certificate_verify,
change_cipher_spec,
finished ->
<- change_cipher_spec,
finished
Application Data <-------> Application Data
Figure 5: Basic Raw Public Key TLS Exchange (Abbildung 5: Einfacher TLS-Austausch mit rohen öffentlichen Schlüsseln)
4.1. Client Hello (Client Hello)
Um die Unterstützung von rohen öffentlichen Schlüsseln anzuzeigen, fügen Clients die client_certificate_type und/oder die server_certificate_type Erweiterungen in eine erweiterte Client-Hello-Nachricht ein. Der Hello-Erweiterungsmechanismus wird in Abschnitt 7.4.1.4 von TLS 1.2 [RFC5246] beschrieben.
Die client_certificate_type-Erweiterung im Client-Hello gibt die Zertifikatstypen an, die der Client dem Server auf Anfrage mit einer certificate_request-Nachricht bereitstellen kann.
Die server_certificate_type-Erweiterung im Client-Hello gibt die Zertifikatstypen an, die der Client verarbeiten kann, wenn sie vom Server in einer nachfolgenden Certificate-Nutzlast bereitgestellt werden.
Die im Client-Hello gesendeten client_certificate_type- und server_certificate_type-Erweiterungen enthalten jeweils eine Liste unterstützter Zertifikatstypen, sortiert nach Client-Präferenz. Wenn der Client nur einen Zertifikatstyp unterstützt, handelt es sich um eine Liste mit einem einzelnen Element.
Der TLS-Client MUSS Zertifikatstypen aus der client_certificate_type-Erweiterung im Client-Hello weglassen, wenn er nicht über den entsprechenden rohen öffentlichen Schlüssel oder das entsprechende Zertifikat verfügt, das er dem Server auf Anfrage mit einer certificate_request-Nachricht bereitstellen kann, oder wenn er nicht konfiguriert ist, einen solchen mit dem gegebenen TLS-Server zu verwenden. Wenn der Client im Client-Hello keine verbleibenden Zertifikatstypen außer dem Standard-X.509-Typ zu senden hat, MUSS er die client_certificate_type-Erweiterung im Client-Hello weglassen.
Der TLS-Client MUSS Zertifikatstypen aus der server_certificate_type-Erweiterung im Client-Hello weglassen, wenn er den entsprechenden rohen öffentlichen Schlüssel oder einen anderen Zertifikatstyp nicht verarbeiten kann. Wenn der Client im Client-Hello keine verbleibenden Zertifikatstypen außer dem Standard-X.509-Zertifikatstyp zu senden hat, MUSS er die gesamte server_certificate_type-Erweiterung aus dem Client-Hello weglassen.
4.2. Server Hello (Server Hello)
Wenn der Server ein Client-Hello empfängt, das die client_certificate_type-Erweiterung und/oder die server_certificate_type-Erweiterung enthält, sind drei Ergebnisse möglich:
-
Der Server unterstützt die in diesem Dokument definierte Erweiterung nicht. In diesem Fall gibt der Server das Server-Hello ohne die in diesem Dokument definierten Erweiterungen zurück.
-
Der Server unterstützt die in diesem Dokument definierte Erweiterung, hat jedoch keinen Zertifikatstyp mit dem Client gemeinsam. Dann beendet der Server die Sitzung mit einem fatalen Alarm vom Typ "unsupported_certificate".
-
Der Server unterstützt die in diesem Dokument definierten Erweiterungen und hat mindestens einen Zertifikatstyp mit dem Client gemeinsam. In diesem Fall werden die unten beschriebenen Verarbeitungsregeln befolgt.
Die client_certificate_type-Erweiterung im Client-Hello gibt die Zertifikatstypen an, die der Client dem Server auf Anfrage mit einer certificate_request-Nachricht bereitstellen kann. Wenn der TLS-Server ein Zertifikat vom Client anfordern möchte (über die certificate_request-Nachricht), MUSS er die client_certificate_type-Erweiterung in das Server-Hello aufnehmen. Diese client_certificate_type-Erweiterung im Server-Hello gibt dann den Zertifikatstyp an, den der Client in einer nachfolgenden Certificate-Nutzlast bereitstellen soll. Der in der client_certificate_type-Erweiterung übermittelte Wert MUSS aus einem der Werte ausgewählt werden, die in der im Client-Hello gesendeten client_certificate_type-Erweiterung bereitgestellt wurden. Der Server MUSS auch eine certificate_request-Nutzlast in die Server-Hello-Nachricht aufnehmen.
Wenn der Server keine certificate_request-Nutzlast sendet (z. B. weil die Client-Authentifizierung auf der Anwendungsschicht erfolgt oder keine Client-Authentifizierung erforderlich ist) oder keines der vom Client unterstützten Zertifikate (wie in der client_certificate_type-Erweiterung im Client-Hello angegeben) mit den vom Server unterstützten Zertifikatstypen übereinstimmt, MUSS die client_certificate_type-Nutzlast im Server-Hello weggelassen werden.
Die server_certificate_type-Erweiterung im Client-Hello gibt die Zertifikatstypen an, die der Client verarbeiten kann, wenn sie vom Server in einer nachfolgenden Certificate-Nutzlast bereitgestellt werden. Wenn das Client-Hello die Unterstützung von rohen öffentlichen Schlüsseln in der server_certificate_type-Erweiterung angibt und der Server sich für die Verwendung von rohen öffentlichen Schlüsseln entscheidet, MUSS der TLS-Server die SubjectPublicKeyInfo-Struktur in die Certificate-Nutzlast einfügen. Mit der server_certificate_type-Erweiterung im Server-Hello gibt der TLS-Server den in der Certificate-Nutzlast transportierten Zertifikatstyp an. Dieser zusätzliche Hinweis ermöglicht die Vermeidung von Parsing-Mehrdeutigkeiten, da die Certificate-Nutzlast entweder das X.509-Zertifikat oder eine SubjectPublicKeyInfo-Struktur enthalten kann. Beachten Sie, dass in der server_certificate_type-Erweiterung nur ein einzelner Wert zulässig ist, wenn sie im Server-Hello transportiert wird.
4.3. Client Authentication (Client-Authentifizierung)
Wenn der TLS-Server RawPublicKey als client_certificate_type angegeben hat, wird die Authentifizierung des TLS-Clients gegenüber dem TLS-Server nur durch die Authentifizierung der empfangenen Client-SubjectPublicKeyInfo über eine Out-of-Band-Methode unterstützt.
4.4. Server Authentication (Server-Authentifizierung)
Wenn der TLS-Server RawPublicKey als server_certificate_type angegeben hat, wird die Authentifizierung des TLS-Servers gegenüber dem TLS-Client nur durch die Authentifizierung der empfangenen Client-SubjectPublicKeyInfo über eine Out-of-Band-Methode unterstützt.