Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Веб программирование.Начало пути.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
7.81 Mб
Скачать

Протокол ssl

Прикладные протоколы HTTP, SMTP, POP3, IMAP были придуманы во времена, когда в Сети люди доверяли друг другу. Сейчас Интернет нельзя представить без защиты данных. Имена пользователей, номера кредитных карт и другая информация, передаваемая «открытым текстом» уязвимы для вмешательства. Для безопасности используются протоколы https, smtps, pop3s, imaps, ssh и др., которые будут хранить конфиденциальную информацию с применением SSL шифрования.

Шифрование данных

Протокол SSL использует как симметричные, так и ассиметричные ключи для шифрования данных.

При шифровании симметричным ключом, используется один и тот же ключ для шифрования данных на клиенте и сервере. Шифрование симметричным ключом обычно используется для шифрования большого объема данных, так как этот процесс быстрый. Обычно используются алгоритмы DES (Data Encryption Standard) и AES (Advanced Encryption Standard.

Как правило, алгоритмы ассиметричных ключей более стойкие их практически невозможно взломать. Шифрование с применением ассиметричного (открытого) ключа использует пару ключей. Один из ключей используется в качестве открытого, сертификационный центр публикует открытый ключ в самом сертификате. Секретный ключ держится в тайне. Эти ключи работают в паре: если открытый ключ используется чтоб шифровать данные, то расшифровать их можно только секретным ключом. Если данные шифруются секретным ключом, то открытый ключ должен это расшифровывать. Любой пользователь может получить открытый ключ и использовать его для шифрования данных, расшифровать которые может только пользователь, у которого есть секретный ключ. Если пользователь шифрует данные, используя свой секретный ключ, каждый может расшифровать данные, используя соответствующий открытый ключ. Это является основой для цифровых подписей. Протокол SSL использует шифрование с открытым ключом, чтобы подтвердить клиенту подлинность сервера, и наоборот.

Самый распространенный алгоритм, который используется при шифровании с ассиметричными ключами – RSA.

Протокол SSL, совместно разработанный Netscape Communications и RSA Data Security, обеспечивает установление безопасного соединения между клиентом и сервером и обеспечивает безопасность по установленному сетевому соединению. На основании протокола SSL 3.0 был разработан стандарт RFC, получивший имя TLS.

Протокол SSL обеспечивает конфиденциальность обмена данными между клиентом и сервером, использующими TCP/IP на основе протокола HTTPS (Hypertext Transfer Protocol Secure). Данные, которые передаются по протоколу HTTPS, «упаковываются» в криптографический протокол SSL или TLS. В отличие от HTTP, для HTTPS по умолчанию используется TCP-порт 443 вместо 80. Подключение по SSL инициируется вызовом URL-адреса, начинающегося с https:// вместо http:// .

SSL поддерживает 3 типа аутентификации:

• аутентификация и клиента и сервера,

• аутентификация сервера с не аутентифицированным клиентом

• полная анонимность.

Когда сервер аутентифицируется, канал безопасен против попытки перехвата данных между веб-сервером и браузером. Аутентифицированный клиент должен предоставить сертификат серверу. Главная цель процесса обмена ключами — это создание секрета клиента (pre_master_secret), известного только клиенту и серверу и используемого для создания общего секрета (master_secret). Общий секрет необходим, чтобы создать сообщение для проверки сертификата, ключей шифрования, секрета MAC (message authentication code) и сообщения «finished».

Анонимный обмен ключами

Полностью анонимная сессия может быть установлена при использовании алгоритма RSA или Диффи-Хеллмана для создания ключей обмена. В случае использования RSA клиент шифрует секрет (pre_master_secret) с помощью открытого ключа несертифицированного сервера. Открытый ключ клиент узнает из сообщения обмена ключами от сервера. Результат посылается в сообщении обмена ключами от клиента. При использовании алгоритма Диффи-Хеллмана открытые параметры сервера содержатся в сообщении обмена ключами от сервера, и клиенту посылают в сообщении обмена ключами.

Обмен ключами и аутентификация

Открытый ключ может содержаться в сертификате сервера или может быть использован временный ключ RSA, который посылается в сообщении обмена ключами от сервера. Сервер может использовать временный ключ RSA только однажды для создания сессии. После проверки сертификата сервера клиент шифрует секрет (pre_master_secret) при помощи открытого ключа сервера. После успешного декодирования секрета (pre_master_secret) создается сообщение «finished», тем самым сервер демонстрирует, что он знает частный ключ соответствующий сертификату сервера.

Когда RSA используется для обмена ключами, для аутентификации клиента используется сообщение проверки сертификата клиента. Клиент подписывается значением, вычисленным из master_secret и всех предшествующих сообщений протокола рукопожатия. Эти сообщения рукопожатия включают сертификат сервера, который ставит в соответствие сигнатуре сервера, сообщение Server_Hello.random, которому ставит в соответствие сигнатуру текущему сообщению рукопожатия.

Протокол записи (Record Layer)

Существует четыре протокола записи: протокол рукопожатия (handshake protocol), протокол тревоги (alert protocol), протокол изменения шифра (the change cipher spec protocol), протокол приложения (application data protocol).

Протокол рукопожатия (handshake)

SSL клиент и сервер договариваются об установлении связи с помощью процедуры рукопожатия. Во время рукопожатия клиент и сервер договариваются о различных параметрах, которые будут использованы, чтобы обеспечить безопасность соединения. Рукопожатие начинается тогда, когда клиент подключается к SSL серверу. Запрос безопасного соединения представляет собой список поддерживаемых шифров и хэш-функций.

Из этого списка сервер выбирает самый сильный шифр и хэш-функцию, которую он также поддерживает, и отсылает это решение в виде цифрового сертификата. Сертификат, обычно, содержит имя сервера, доверенный Центр Сертификации, и открытый ключ шифрования сервера. Клиент может связаться с сервером, который выдал сертификат и убедиться, что сертификат является подлинным.

Для того чтобы сгенерировать ключи сеанса, используется безопасное соединение. Клиент шифрует случайное число с помощью открытого ключа сервера и отправляет результат на сервер. Только сервер в состоянии расшифровать его с закрытым ключом, и этот факт делает ключи скрытыми от третьей стороны. Клиент знает открытый ключ и случайное число, а сервер знает закрытый ключ и случайное число. Из случайного числа обе стороны создают ключевые данные для шифрования и расшифровывания.

На этом рукопожатие завершается, и начинается защищенное соединение, которое зашифровывается и расшифровывается с помощью ключевых данных. Если любое из перечисленных выше действий не удается, то рукопожатие SSL не удалось, и соединение не создается.

Сообщение тревоги с критическим уровнем незамедлительно прерывает соединение.

Протокол приложения (Application Data Protocol) используется для шифрования данных на основе текущего состояния соединения.

Протокол SSL использует среду с несколькими слоями, что и обеспечивает безопасность обмена информации. Конфиденциальность общения устанавливается за счёт того, что безопасное подключение открывается только целевым пользователям.

Безопасный SSL протокол размещается между двумя протоколами: протоколом, который использует программа-клиент (HTTP, FTP, IMAP, LDAP и т.д.) и транспортным протоколом TCP/IP. Создавая заслонки с обеих сторон, он защищает и передает данные на транспортный уровень.

Хеширование

Во время подтверждения подключения согласовывается также хеш-алгоритм. Хеш-функция принимает на входе сообщение произвольной длины и возвращает значение фиксированной длины. Хеш-значения играют роль идентификационной отметки и являются уникальными. Популярными хеш-алгоритмами являются MD5 (Message Digest 5) и SHA-1 (Standard Hash Algorithm). MD5 создает 128 битное хеш-значение, а SHA-1 создает 160 битное хеш-значение. Хеш-значение используется для проверки целостности переданных данных. Это значение создается с использованием MAC - Message Authentication Code – код проверки сообщения. MAC гарантирует, что данные не были изменены во время передачи. SSL использует MAC.