6.3.1 Сообщение запроса приветствия (HelloRequest)
Данное сообщение может быть послано сервером в любой момент и используется для оповещения клиента о том, что тот должен начать процесс согласования параметров сессии заново. В ответ на данный запрос клиент должен послать сообщение приветствия ClientHello.
Данное сообщение должно быть проигнорировано клиентом, если в этот момент он уже участвует в процессе согласования параметров сессии. В случае если клиент отказывается пересогласовывать параметры сессии, то он может проигнорировать это сообщение либо послать в ответ оповещение no_renegotiation (см. раздел 8).
Если сервер послал сообщение запроса приветствия HelloRequest, но не дождался сообщения ClientHello в качестве ответа со стороны клиента, он может закрыть соединение, передав оповещение об ошибке с уровнем fatal (см. раздел 8).
После отправки сообщения запроса приветствия HelloRequest сервер не должен повторно отправлять данное сообщение до тех пор, пока последующий процесс согласования параметров сессии на этапе выполнения протокола Handshake не будет завершен.
Данное сообщение не должно входить в переменную НМ.
6.3.2 Сообщение приветствия клиента (ClientHello)
Клиент посылает сообщение приветствия ClientHello в одном из следующих случаев:
- клиент впервые подключается к серверу;
- как ответ на сообщение запроса приветствия HelloRequest;
- с целью пересогласования параметров сессии.
Сообщение ClientHello содержит следующие параметры:
версия протокола (client_version) | - | максимальная версия протокола из тех, которые готов поддерживать клиент [настоящие рекомендации описывают криптонаборы для протокола TLS 1.2, для которого значение версии равняется (3, 3)]; |
строка со случайными данными (random) | - | строка данных длины 32 байта, выработанная клиентом, в которой первые 4 байта занимает значение текущего времени в 32-битном формате UNIX [количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года], а остальные 28 байт занимает строка, выработанная случайным образом; |
идентификатор сессии (session_id) | - | идентификатор сессии, выбранный клиентом. Если данное поле пусто, значит клиент хочет согласовать параметры новой сессии; |
список криптонаборов (cipher_suites) | - | список криптонаборов, которые поддерживает клиент. Порядок криптонаборов в списке отражает их степень предпочтения (предпочтительные идут первыми). Если поле ClientHello.session_id не пустое, поле ClientHello.cipher_suites должно содержать идентификатор криптонабора, согласованного во время установления параметров сессии, имеющей идентификатор ClientHello.session_id; |
список методов сжатия (compression_methods) | - | данная версия протокола не поддерживает методы сжатия, и поле должно содержать один метод с идентификатором null (0); |
расширения (extensions) | - | криптонаборы, описанные в настоящем документе, предполагают наличие трех обязательных расширений со стороны клиента: signature_algorithms, extended_master_secret и renegotiation_info. |
Сообщение ClientHello имеет следующую структуру: