hello_request (0): Diese Nachricht hat keine Parameter. Sie wird vom Server geschickt, um den Client zu einem client_hello zu veranlassen. In einem laufenden Handshake wird diese Nachricht vom Client ignoriert.
client_hello (1): Mit der client_hello Nachricht startet der Client den Aufbau der SSL-Verbindung. In einer bereits aktiven SSL-Verbindung führt diese Nachricht zu einer Neuverhandlung der Sicherheitsparameter. Der Client schickt mit dieser Meldung die Parameter Version, Zufallswert, Sitzungsnummer, Chiffriermodus und Kompressionsmethode. Der Parameter Version gibt die Versionsnummer von SSL an, die der Client benutzen möchte. Im Falle von SSL Version 3.0 stünde hier demnach die 3.0. Der Zufallswert setzt sich aus einem 32-Bit-Wert für Zeit und Datum nach UNIX-Format und einem 28-Byte-Zufallswert, erzeugt durch einen Pseudo-Zufallszahlengenerator, zusammen. Die Sitzungsnummer wird vom Client angegeben, wenn bereits eine sichere Verbindung besteht, auf die sich der Client beziehen will. Der Parameter Chiffriermodus enthält eine Liste der vom Client unterstützten Chiffren, wobei die bevorzugte Chiffre als erste angegeben wird. Hat der Client auf eine bestehende Sitzung per Sitzungsnummer verwiesen, muss er als Chiffriermodus mindestens den bereits eingesetzten Modus angeben. Der Parameter Kompressionsmethode gibt eine Liste von Kompressionsalgorithmen an, wobei der bevorzugte Algorithmus als erster angegeben wird. Hat der Client auf eine bestehende Sitzung hingewiesen, so muss mindestens der bereits verwendete Kompressionsalgorithmus angegeben werden.
server_hello (2): Mit der server_hello Nachricht antwortet der Server auf das client_hello des Clients. Die Nachricht enthält die gleichen Parameter, wie die client_hello Nachricht, teilweise allerdings mit leicht abgewandelter Bedeutung. Der Parameter Version enthält die höchstmögliche Versionsnummer, die von Server und Client unterstützt werden. Der Zufallswert setzt sich bei der server_hello Nachricht genauso zusammen, wie bei der client_hello Nachricht. Er ist unabhängig von dem zuvor gesendeten Zufallswert des Clients. Der Server vergibt eine neue Sitzungsnummer. Hat der Client eine Sitzungsnummer vorgeschlagen, überprüft der Server diese Sitzungsnummer und übernimmt sie, sofern diese Sitzung noch nicht zu lange zurück liegt. Gibt der Server keine Sitzungsnummer an, so bedeutet dies, dass die gegenwärtige Sitzung später nicht erneut aufgenommen werden kann. Der Server wählt einen Chiffriermodus aus der Liste der vom Client gesendeten Chiffren aus. Wurde eine alte Sitzung erneut aufgenommen, so entspricht dieser Parameter dem der letzten Sitzung. Gleiches gilt für die Auswahl der Kompressionsmethode.
certificate (11): Der Server und der Client haben die Möglichkeit sich durch Übermittlung ihres Zertifikats zu authentifizieren. Beim Server handelt es sich hierbei im Normalfall um ein X.509v3-Zertifikat oder um ein modifiziertes X.509-Zertifikat im Falle von KEA. Der Client erhält vom Server eine Auswahl erlaubter Zertifikate. Besitzt er keines der angegebenen, so antwortet er mit der Alert Meldung no_certificate. Dies ist unkritisch, es sei denn, die Authentifizierung des Clients ist zwingend erforderlich. In diesem Fall führt die Meldung zum Abbruch der Verbindung. Der Parameter certificate enthält eine Liste, die mit dem Zertifikat des Servers oder des Clients beginnt. Die weiteren Zertifikate stammen gegebenenfalls von den Beglaubigungsstellen, den sogenannten Certification Authorities CAs. Diese Zertifikate müssen aber nicht vorhanden sein.
sever_key_exchange (12): Diese Meldung wird nicht geschickt, wenn der Server ein Zertifikat mit festen Diffie-Hellman Parametern oder mit RSA-Schlüsselaustausch besitzt. Im Falle von anonymem Diffie-Hellman, ephemeral Diffie-Hellman, KEA oder, wenn RSA nur zur Signierung benutzt wird, wird die Meldung server_key_exchange gesendet. Die Meldung enthält die einzelnen Parameter, die das jeweilige Schlüsselaustauschverfahren benötigt, und wird vom Server signiert. Zur Signierung dienen die Zufallswerte von Client und Server und die Parameter des Schlüsselaustauschs als Input für den DSS oder die Hashfunktion. Im letzteren Fall wird der Hashwert mit dem öffentlichen Schlüssel des Servers verschlüsselt.
certificate_request (13): Ein nichtanonymer Server kann von dem Client verlangen, sich per Zertifikat zu authentifizieren. Hierzu gibt der Server dem Client in den Parametern eine Liste von Zertifikaten, die er verarbeiten kann. Diese sind nach den Präferenzen des Servers sortiert. Außerdem schickt der Server eine Liste von Beglaubigungsstellen (CAs), die er akzeptiert. Schickt ein anonymer Server die Meldung certificate_request, führt dies zu der fatalen Alert Meldung handshake_failure.
server_hello_done (14): Die server_hello_done Meldung wird vom Server geschickt, da die Meldungen certificate, server_key_exchange und certificate_request nicht notwendigerweise geschickt werden. So erkennt der Client das Ende der Begrüßungsmeldungen des Servers.
certificate_verify (15): Mit dieser Meldung signiert der Client sein Zertifikat, sofern er eines geschickt hat. Dies gilt für alle Zertifikate – mit Ausnahme von Zertifikaten, die feste Diffie-Hellman Parameter enthalten. Die Signatur erfolgt abhängig vom privaten Schlüssel des Clients mit Hilfe von DSS oder RSA. Als Input dient hierbei der von SSL erstellte MAC, der als Input alle Handshake Nachrichten, den geheimen Schlüssel und die Paddingwerte hat.
client_key_exchange (16): Die Nachricht client_key_exchange wird in jedem Fall geschickt. Der Inhalt der Nachricht ist vom gewünschten Schlüsselaustausch abhängig. Handelt es sich um Schlüsselaustausch mit festen Diffie-Hellman Schlüsseln, enthält die Nachricht keine Daten, da die erforderlichen Parameter durch das Zertifikat des Clients übermittelt wurden. Im Falle von ephemeral oder anonymem Diffie-Hellman Schlüsselaustausch werden die erforderlichen Diffie-Hellman Parameter übermittelt. Hat der Client ein RSA-Schlüsselpaar, so generiert er ein sogenanntes Pre-Master Secret, das er mit dem öffentlichen RSA-Schlüssel des Servers oder dem temporären RSA-Schlüssel aus der server_key_exchange Meldung verschlüsselt. Aus diesem Pre-Master Secret wird der geheime Schlüssel gewonnen. Soll KEA zum Schlüsselaustausch genutzt werden, schickt der Client seine KEA Parameter und signiert diese mittels DSS.
Finished (20): Die Meldung finished wird vom Client und vom Server nach der Meldung change_cipher_spec gesendet. Sie enthält die MACs der bis dahin gesendeten Handshake Meldungen, des geheimen Schlüssels, der Paddingwerte und der Identifikation, ob die Meldung vom Client oder vom Server stammt, erstellt mit MD5 und SHA-1. Die beiden MACs werden aneinander gehängt. Diese Meldung ist die erste Nachricht, die bereits mit den neuen Sicherheitsparametern für das Record Protokoll behandelt wird.