SSL/TLS — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Добавил handshake.)
 
(Добавил record и стаб введения.)
Строка 1: Строка 1:
 +
=Протоколы SSL и TLS=
 +
'''SSL (Secure Sockets Layer)''' и '''TLS (Transport Level Security)''' {{---}} криптографические протоколы, обеспечивающие защищенную передачу данных в компьютерной сети.
  
====Подтверждение связи (handshake)====
+
Соединение, защищенное протоколом TLS, обладает одним или несколькими следующими свойствами:
 +
* ''Безопасность'': симметричное шифрование защищает передаваемую информацию от прочтения посторонними лицами.
 +
* ''Аутентификация'': "личность" участника соединения можно проверить с помощью асимметричного шифрования.
 +
* ''Целостность'': каждое сообщение содержит код ('''Message Authentication Code, MAC'''), с помощью которого можно проверить, что данные не были изменены или потеряны в процессе передачи.
 +
 
 +
Протокол TLS делится на два слоя: TLS Record и TLS Handshake.
 +
 
 +
===Подтверждение связи (handshake)===
 
[[Файл:Handshake.png|border|right|Схема подтверждения связи]]
 
[[Файл:Handshake.png|border|right|Схема подтверждения связи]]
 
# Клиент посылает сообщение '''ClientHello''', указывающее версию SSL или TLS и поддерживаемые клиентом методы шифрования (англ. ''CipherSuite''). Это сообщение также содержит случайное число (набор байт), которое используется в последующих вычислениях. Протокол также позволяет указать поддерживаемые клиентом методы сжатия данных.
 
# Клиент посылает сообщение '''ClientHello''', указывающее версию SSL или TLS и поддерживаемые клиентом методы шифрования (англ. ''CipherSuite''). Это сообщение также содержит случайное число (набор байт), которое используется в последующих вычислениях. Протокол также позволяет указать поддерживаемые клиентом методы сжатия данных.
Строка 8: Строка 17:
 
# Если сервер потребовал у клиента сертификат, клиент отсылает набор байт, зашифрованный его секретным ключом, и свой цифровой сертификат, или оповещение об отсутствии сертификата.
 
# Если сервер потребовал у клиента сертификат, клиент отсылает набор байт, зашифрованный его секретным ключом, и свой цифровой сертификат, или оповещение об отсутствии сертификата.
 
# Сервер проверяет сертификат клиента.
 
# Сервер проверяет сертификат клиента.
 +
# Клиент и сервер отправляют друг другу сообщение '''ChangeCipherSpec''', объявляя об изменении режима передачи данных с незащищенного на защищенный.
 
# Клиент отправляет сообщение '''Finished''', зашифрованное секретным ключом, и таким образом завершает подтверждение связи со своей стороны.
 
# Клиент отправляет сообщение '''Finished''', зашифрованное секретным ключом, и таким образом завершает подтверждение связи со своей стороны.
 
# Аналогичные действия производит сервер.
 
# Аналогичные действия производит сервер.
 
# На протяжении данной сессии клиент и сервер могут обмениваться сообщениями, зашифрованными секретным ключом.
 
# На протяжении данной сессии клиент и сервер могут обмениваться сообщениями, зашифрованными секретным ключом.
 +
 +
====Возобновление сессии====
 +
# Клиент посылает сообщение '''ClientHello''', используя ID сессии, которую нужно возобновить.
 +
# Сервер проверяет, есть ли у него в кэше соответствующий идентификатор. Если есть и сервер способен возобновить сессию, он отсылает клиенту сообщение '''ServerHello''' с этим же ID сессии. Если нет, сервер генерирует новый ID сессии и выполняет процедуру handshake с клиентом.
 +
# Клиент и сервер обмениваются сообщениями '''ChangeCipherSpec''', а затем '''Finished'''.
 +
# Передача данных по защищенному каналу возобновляется.
 +
 +
===Протокол записи===
 +
Этот слой защищает данные с помощью ключей, полученных при подтверждении связи, и проверяет целостность и источник входящих сообщений. Он выполняет следующие функции:
 +
* Разбиение исходящих сообщений на блоки нужного размера и "склеивание" входящих сообщений.
 +
* Сжатие исходящих сообщений и распаковку входящих (используется не всегда).
 +
* Применение кода аутентификации к исходящим сообщениям и проверку входящих с помощью MAC.
 +
* Шифрование исходящих сообщений и дешифровку входящих.
 +
 +
После обработки протоколом TLS Record зашифрованные данные передаются на слой TCP для передачи.

Версия 01:10, 12 декабря 2016

Протоколы SSL и TLS

SSL (Secure Sockets Layer) и TLS (Transport Level Security) — криптографические протоколы, обеспечивающие защищенную передачу данных в компьютерной сети.

Соединение, защищенное протоколом TLS, обладает одним или несколькими следующими свойствами:

  • Безопасность: симметричное шифрование защищает передаваемую информацию от прочтения посторонними лицами.
  • Аутентификация: "личность" участника соединения можно проверить с помощью асимметричного шифрования.
  • Целостность: каждое сообщение содержит код (Message Authentication Code, MAC), с помощью которого можно проверить, что данные не были изменены или потеряны в процессе передачи.

Протокол TLS делится на два слоя: TLS Record и TLS Handshake.

Подтверждение связи (handshake)

Схема подтверждения связи
  1. Клиент посылает сообщение ClientHello, указывающее версию SSL или TLS и поддерживаемые клиентом методы шифрования (англ. CipherSuite). Это сообщение также содержит случайное число (набор байт), которое используется в последующих вычислениях. Протокол также позволяет указать поддерживаемые клиентом методы сжатия данных.
  2. Сервер отвечает сообщением ServerHello, которое содержит метод шифрования, выбранный сервером из списка, предложенного клиентом, а также идентификатор сессии и еще одно случайное число. Также сервер посылает свой цифровой сертификат. Если серверу нужен сертификат для аутентификации клиента, на этом шаге он может послать клиенту запрос такого сертификата.
  3. Клиент проверяет сертификат сервера.
  4. Клиент отправляет случайное число, которое клиент и сервер используют для шифрования последующих сообщений. Сама строка из байт шифруется публичным ключом сервера.
  5. Если сервер потребовал у клиента сертификат, клиент отсылает набор байт, зашифрованный его секретным ключом, и свой цифровой сертификат, или оповещение об отсутствии сертификата.
  6. Сервер проверяет сертификат клиента.
  7. Клиент и сервер отправляют друг другу сообщение ChangeCipherSpec, объявляя об изменении режима передачи данных с незащищенного на защищенный.
  8. Клиент отправляет сообщение Finished, зашифрованное секретным ключом, и таким образом завершает подтверждение связи со своей стороны.
  9. Аналогичные действия производит сервер.
  10. На протяжении данной сессии клиент и сервер могут обмениваться сообщениями, зашифрованными секретным ключом.

Возобновление сессии

  1. Клиент посылает сообщение ClientHello, используя ID сессии, которую нужно возобновить.
  2. Сервер проверяет, есть ли у него в кэше соответствующий идентификатор. Если есть и сервер способен возобновить сессию, он отсылает клиенту сообщение ServerHello с этим же ID сессии. Если нет, сервер генерирует новый ID сессии и выполняет процедуру handshake с клиентом.
  3. Клиент и сервер обмениваются сообщениями ChangeCipherSpec, а затем Finished.
  4. Передача данных по защищенному каналу возобновляется.

Протокол записи

Этот слой защищает данные с помощью ключей, полученных при подтверждении связи, и проверяет целостность и источник входящих сообщений. Он выполняет следующие функции:

  • Разбиение исходящих сообщений на блоки нужного размера и "склеивание" входящих сообщений.
  • Сжатие исходящих сообщений и распаковку входящих (используется не всегда).
  • Применение кода аутентификации к исходящим сообщениям и проверку входящих с помощью MAC.
  • Шифрование исходящих сообщений и дешифровку входящих.

После обработки протоколом TLS Record зашифрованные данные передаются на слой TCP для передачи.