Рисунок 6.5.1. Алгоритм работы SSL
Ниже представлено несколько вариантов обмена сообщениями в рамках протокола диалога SSL. В этих примерах представлены два участника диалога: клиент (С) и сервер (S). Если что-то помещено в фигурные скобки, например, "{нечто}key", это означает, что “нечто” зашифровано с помощью ключа "key".
6.5.2.2.1. При отсутствии идентификатора сессии
Client-hello |
C ® S: |
challenge, cipher_specs |
server-hello |
S ® C: |
connection-id,server_certificate,cipher_specs |
client-master-key |
C ® S: |
{master_key}server_public_key |
client-finish |
C ® S: |
{connection-id}client_write_key |
server-verify |
S ® C: |
{challenge}server_write_key |
server-finish |
S ® C: |
{new_session_id}server_write_key |
6.5.2.2.2. Идентификатор сессии найден клиентом и сервером
сlient-hello |
C ® S: |
challenge, session_id, cipher_specs |
server-hello |
S ® C: |
connection-id, session_id_hit |
client-finish |
C ® S: |
{connection-id}client_write_key |
server-verify |
S ® C: |
{challenge}server_write_key |
server-finish |
S ® C: |
{session_id}server_write_key |
6.5.2.2.3. Использован идентификатор сессии и аутентификация клиента
сlient-hello |
C ® S: |
challenge, session_id, cipher_specs |
server-hello |
S ® C: |
connection-id, session_id_hit |
client-finish |
C ® S: |
{connection-id}client_write_key |
server-verify |
S ® C: |
{challenge}server_write_key |
request-certificate |
S ® C: |
{auth_type,challenge'}server_write_key |
client-certificate |
C ® S: |
{cert_type,client_cert, response_data}client_write_key |
server-finish |
S ® C: |
{session_id}server_write_key |
В последнем обмене, response_data является функцией auth_type.
6.5.2.3. Ошибки
Обработка ошибок в протоколе соединений SSL весьма проста. Когда ошибка детектирована, обнаруживший его посылает своему партнеру сообщение. Ошибки, которые являются неустранимыми, требуют от клиента и сервера разрыва соединения. Серверы и клиент должны "забыть" все идентификаторы сессии, сопряженные с разорванным соединением.