SSL/TLS — различия между версиями
Heatwave (обсуждение | вклад) (Добавил handshake.) |
Heatwave (обсуждение | вклад) (Добавил record и стаб введения.) |
||
Строка 1: | Строка 1: | ||
+ | =Протоколы SSL и TLS= | ||
+ | '''SSL (Secure Sockets Layer)''' и '''TLS (Transport Level Security)''' {{---}} криптографические протоколы, обеспечивающие защищенную передачу данных в компьютерной сети. | ||
− | + | Соединение, защищенное протоколом 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)
- Клиент посылает сообщение ClientHello, указывающее версию SSL или TLS и поддерживаемые клиентом методы шифрования (англ. CipherSuite). Это сообщение также содержит случайное число (набор байт), которое используется в последующих вычислениях. Протокол также позволяет указать поддерживаемые клиентом методы сжатия данных.
- Сервер отвечает сообщением ServerHello, которое содержит метод шифрования, выбранный сервером из списка, предложенного клиентом, а также идентификатор сессии и еще одно случайное число. Также сервер посылает свой цифровой сертификат. Если серверу нужен сертификат для аутентификации клиента, на этом шаге он может послать клиенту запрос такого сертификата.
- Клиент проверяет сертификат сервера.
- Клиент отправляет случайное число, которое клиент и сервер используют для шифрования последующих сообщений. Сама строка из байт шифруется публичным ключом сервера.
- Если сервер потребовал у клиента сертификат, клиент отсылает набор байт, зашифрованный его секретным ключом, и свой цифровой сертификат, или оповещение об отсутствии сертификата.
- Сервер проверяет сертификат клиента.
- Клиент и сервер отправляют друг другу сообщение ChangeCipherSpec, объявляя об изменении режима передачи данных с незащищенного на защищенный.
- Клиент отправляет сообщение Finished, зашифрованное секретным ключом, и таким образом завершает подтверждение связи со своей стороны.
- Аналогичные действия производит сервер.
- На протяжении данной сессии клиент и сервер могут обмениваться сообщениями, зашифрованными секретным ключом.
Возобновление сессии
- Клиент посылает сообщение ClientHello, используя ID сессии, которую нужно возобновить.
- Сервер проверяет, есть ли у него в кэше соответствующий идентификатор. Если есть и сервер способен возобновить сессию, он отсылает клиенту сообщение ServerHello с этим же ID сессии. Если нет, сервер генерирует новый ID сессии и выполняет процедуру handshake с клиентом.
- Клиент и сервер обмениваются сообщениями ChangeCipherSpec, а затем Finished.
- Передача данных по защищенному каналу возобновляется.
Протокол записи
Этот слой защищает данные с помощью ключей, полученных при подтверждении связи, и проверяет целостность и источник входящих сообщений. Он выполняет следующие функции:
- Разбиение исходящих сообщений на блоки нужного размера и "склеивание" входящих сообщений.
- Сжатие исходящих сообщений и распаковку входящих (используется не всегда).
- Применение кода аутентификации к исходящим сообщениям и проверку входящих с помощью MAC.
- Шифрование исходящих сообщений и дешифровку входящих.
После обработки протоколом TLS Record зашифрованные данные передаются на слой TCP для передачи.