Zum Hauptinhalt springen

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:

  1. 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.

  2. 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".

  3. 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.