Функциональные последствия различий в SSL и TLS

31

Я знаю, что TLS, по сути, является более новой версией SSL и, как правило, поддерживает переход соединения из незащищенного в защищенное (обычно с помощью команды STARTTLS).

Что я не понимаю, так это то, почему TLS важен для ИТ-специалиста и почему, если бы у меня был выбор, я бы выбрал одно из другого. Действительно ли TLS - просто более новая версия, и если да, то совместимый ли протокол?

Как ИТ-специалист: когда я использую какой? Когда я не использую какой?

Рэнделл
источник

Ответы:

44

Краткий ответ:

SSL является предшественником TLS. SSL был проприетарным протоколом, разработанным Netscape Communications, позже стандартизированным в IETF и переименованным в TLS. Короче говоря, версии идут в следующем порядке: SSLv2, SSLv3, TLSv1.0, TLSv1.1 и TLSv1.2.

Вопреки относительно распространенному мнению, это вовсе не означает, что нужно запускать службу на отдельном порту с SSL и иметь возможность на том же порту, что и простой текстовый вариант с TLS. И SSL, и TLS могут использоваться для двух подходов. Речь идет о разнице между SSL / TLS при подключении (иногда называемой «неявным SSL / TLS») и SSL / TLS после того, как команда была выполнена на уровне протокола, обычно STARTTLS(иногда называемой «явным SSL / TLS») , Ключевое слово в STARTTLS«START», а не TLS. Это сообщение на уровне протокола приложения, указывающее на необходимость переключения на SSL / TLS, если оно не было инициировано до какого-либо обмена протоколом приложения.

Использование любого из этих режимов должно быть эквивалентным при условии, что клиент настроен так или иначе ожидать SSL / TLS, чтобы не понижать его до простого текстового соединения.

Более длинный ответ:

SSL против TLS

Насколько я знаю, SSLv1 никогда не покидал лабораторию. SSLv2 и SSLv3 были протоколами, разработанными Netscape. Некоторое время SSLv2 считался небезопасным, так как подвержен атакам с понижением рейтинга. SSLv3 внутренне использует в (3,0)качестве номера версии (в ClientHelloсообщении).

TLS является результатом стандартизации как более открытого протокола в IETF. (Мне кажется, я где-то читал, возможно, в книге Э. Резкорлы, что название было выбрано таким образом, что все участники были одинаково недовольны им, чтобы не отдавать предпочтение конкретной компании: это довольно распространенная практика в стандартах body.) Те, кто интересуется тем, как был выполнен переход, могут прочитать FAQ по SSL-Talk List ; существует множество копий этого документа, но большинство ссылок (на ) устарели.netscape.com

TLS использует очень похожие сообщения (достаточно разные, чтобы сделать протоколы несовместимыми, хотя возможно согласование общей версии ). В TLS 1.0 , 1.1 и 1.2 ClientHello сообщения используют (3,1), (3,2), (3,3)чтобы указать номер версии, которая ясно показывает продолжение с SSL.

В этом ответе есть больше деталей о различиях протокола .

Когда я использую что? Когда я не использую какой?

Используйте самую высокую версию, какую только сможете. На практике, как поставщик услуг, это потребует, чтобы у ваших пользователей были клиенты, которые поддерживают эти версии. Как обычно, это всегда упражнение по оценке риска (желательно, при необходимости, с экономическим обоснованием). Как говорится, отключите SSLv2 в любом случае.

Кроме того, обратите внимание, что безопасность, обеспечиваемая SSL / TLS, зависит не только от используемой версии, но и от правильной конфигурации: безусловно, предпочтительнее использовать SSLv3 с набором надежных шифров, чем TLSv1.0 со слабым (или набор шифров анонимного / нулевого шифрования. Некоторые наборы шифров, считающиеся слишком слабыми, были явно запрещены новыми версиями TLS. Таблицы в провайдере Java 7 SunJSSE (и их сноски) могут быть интересны, если вы хотите больше подробностей.

Было бы предпочтительнее использовать хотя бы TLS 1.1, но, к сожалению, не все клиенты их поддерживают (например, Java 6). При использовании версии под 1.1, безусловно, стоит обратить внимание на уменьшение уязвимости BEAST .

В общем, я бы порекомендовал книгу Эрика Рескорлы - SSL и TLS: проектирование и создание защищенных систем, Addison-Wesley, 2001 ISBN 0-201-61598-3, людям, которые действительно хотят больше подробностей.

Неявный против явного SSL / TLS

Существует миф о том, что TLS позволяет использовать один и тот же порт, а SSL - нет. Это просто неправда (и я оставлю объединение портов для этого обсуждения). К сожалению, этот миф, похоже, был распространен среди пользователей тем фактом, что некоторые приложения, такие как MS Outlook, иногда предлагают выбор между SSL и TLS в своих параметрах конфигурации, когда они фактически означают выбор между неявным и явным SSL / TLS. (В Microsoft есть эксперты по SSL / TLS, но, похоже, они не были вовлечены в интерфейс Outlook.)

Я думаю, что причина этого беспорядка - из-за STARTTLSрежима. Некоторые люди, кажется, поняли это как STARTTLS= TLS, но это не так. Ключевое слово в STARTTLS«START», а не TLS. Почему это не было вызвано STARTSSLили STARTSSLORTLSвызвано тем, что эти расширения были указаны в IETF, который использовал только имена, используемые в его спецификациях (при условии, что имя TLS в конечном итоге будет единственным, я полагаю).

  • SSL на том же порту, что и служба простого текста: HTTPS-прокси.

В настоящее время большинство HTTPS-серверов могут обрабатывать TLS, но несколько лет назад большинство людей использовали SSLv3 для HTTPS. HTTPS (строго говоря, стандартизированный как HTTP поверх TLS ) обычно устанавливает соединение SSL / TLS при соединении TCP, а затем обменивается сообщениями HTTP через уровень SSL / TLS. Исключение составляет использование промежуточного прокси-сервера HTTP. В этом случае клиент подключается к HTTP-прокси в незашифрованном виде (обычно через порт 3128), затем выдает команду CONNECTHTTP и, при условии успешного ответа, инициирует рукопожатие SSL / TLS, отправляяClientHelloсообщение. Все это происходит на одном и том же порту, если речь идет о соединении между браузером и прокси (очевидно, не между прокси и целевым сервером: это даже не одна и та же машина). Это прекрасно работает с SSLv3. Многие из нас в ситуациях, связанных с прокси-сервером, использовали это против серверов, которые не поддерживали хотя бы TLS 1.0.

  • SSL на тот же порт, что и текстовая служба: электронная почта.

Этот явно не соответствует спецификациям, но на практике он часто работает. Строго говоря, спецификации говорят о переходе на TLS (не SSL) после использования команды STARTTLS. На практике SSL тоже часто работает (точно так же, как спецификация «HTTP over TLS» также включает использование SSL вместо TLS). Вы можете попробовать это самостоятельно. Предполагая, что у вас есть SMTP или IMAP-сервер, который поддерживает STARTTLS, используйте Thunderbird, зайдите в настройки, дополнительные параметры, редактор настроек и выключите security.enable_tls. Многие серверы по-прежнему будут принимать соединение, просто потому, что их реализации делегируют уровень SSL / TLS в библиотеку SSL / TLS, которая обычно может обрабатывать SSL и TLS таким же образом, если не настроена на это. Как часто задаваемые вопросы OpenLDAP , "Хотя механизм предназначен для использования с TLSv1, большинство реализаций при необходимости будут использовать SSLv3 (и SSLv2). Msgstr "Если вы не уверены, проверьте с помощью такого инструмента, как Wireshark.

  • TLS на отдельном порту.

Многие клиенты могут использовать TLS 1.0 (как минимум) для протоколов, где защищенный вариант находится на другом порту. Очевидно, что существует ряд браузеров и веб-серверов, которые поддерживают TLS 1.0 (или выше) для HTTPS. Аналогично, SMTPS, IMAPS, POPS и LDAPS также могут использовать TLS. Они не ограничены SSL.

Когда я использую что? Когда я не использую какой?

Между явным и неявным SSL / TLS это не имеет большого значения. Важно то, что ваш клиент знает, чего ожидать, и настроен соответствующим образом для этого. Что еще более важно, он должен быть настроен на отклонение текстовых соединений, когда он ожидает соединения SSL / TLS, будь то явное или неявное .

Основное различие между явным и неявным SSL / TLS будет заключаться в ясности настроек конфигурации.

Например, для LDAP, если клиент является сервером Apache Httpd ( mod_ldapк сожалению, его документация неправильно маркирует разницу между SSL и TLS), вы можете использовать неявный SSL / TLS с помощью ldaps://URL (например AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one) или использовать явный SSL / TLS с использованием дополнительного параметра (например AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS).

Существует, возможно , вообще говоря , немного меньший риск при указании протокола безопасности в схеме URL ( https, ldaps, ...) , чем когда ожидает клиента , чтобы настроить дополнительные параметры для включения SSL / TLS, потому что они могут забыть. Это спорно. Также могут быть проблемы в правильности реализации одного и другого (например, я думаю, что клиент Java LDAP не поддерживает проверку имени хоста при использовании ldaps://, когда это необходимо, тогда как это поддерживается с помощью ldap://+ StartTLS).

В случае сомнений и совместимости с большим количеством клиентов, если это возможно, кажется, что не будет никакого вреда предлагать обе услуги, когда сервер их поддерживает (ваш сервер будет просто прослушивать два порта одновременно). Многие реализации серверов для протоколов, которые можно использовать в обоих режимах, будут поддерживать оба.

Клиент несет ответственность за то, чтобы не допустить превращения себя в текстовое соединение. Как администратор сервера, вы ничего не можете сделать технически на своей стороне, чтобы предотвратить атаки понижения версии (кроме, возможно, требования клиентского сертификата). Клиент должен проверить, что SSL / TLS включен, независимо от того, подключен он или после STARTTLSкоманды -like. Точно так же, как браузер не должен позволять перенаправлять себя с https://на http://, клиент для протокола, который поддерживает, STARTTLS должен убедиться, что ответ был положительным, и соединение SSL / TLS было включено, прежде чем продолжить. В противном случае активный злоумышленник MITM может легко понизить соединение.

Например, в более старых версиях Thunderbird была плохая опция под названием «Использовать TLS, если доступно» , что подразумевало, что если злоумышленник MITM сможет изменить сообщения сервера, чтобы он не объявлял о поддержке STARTTLS, клиент молча позволил бы себе понизиться до простого текстового соединения. (Эта небезопасная опция больше не доступна в Thunderbird.)

Bruno
источник
3
Спасибо за размещение не только исчерпывающего ответа, но и правильного ответа с источниками. +1 от меня.
13

TLS является более новым протоколом, чем SSL (но AFAIK, он совместим с SSL v3). Обычно есть только одно отличие, о котором вам нужно беспокоиться:

Протокол SSL обычно имеет отдельный порт - например, 80 для HTTP и 443 для HTTPS (HTTP / SSL). Когда вы подключаетесь к порту SSL, весь сеанс шифруется.

TLS является более новым, чем SSL, и для него не требуется отдельный порт - вместо этого он должен быть согласован клиентом. Например, вы можете запустить IMAP на порту 143, и если и почтовый сервер, и клиент поддерживают TLS, клиент отправит STARTTLSкоманду и только потом включит шифрование. Таким образом, вам не нужен отдельный порт только для SSL, оставаясь совместимым с приложениями без SSL.

Резюме:
SSL : немного старше. Отдельные порты для простых и зашифрованных соединений. Весь трафик через порт SSL всегда зашифрован.
TLS : один порт для простых и зашифрованных соединений. Шифрование включается только после того, как клиент выполнит STARTTLSкоманду.

grawity
источник
Но когда я должен использовать что?
Рэнделл
3
Тот факт, что использование STARTTLSв некоторых протоколах позволяет переключаться на TLS в одном соединении, не является разницей между SSL и TLS. Технически вы можете переключиться на SSLv3 таким же образом.
Бруно
9
Этот ответ, к сожалению, неверен. Еще раз, TLS против SSL не об одном порте против отдельных портов: security.stackexchange.com/q/5126/2435
Бруно
1
Неправильно. -1 голос
Татас
10

TLS - это просто более новая версия SSL. Используйте TLS, когда у вас есть возможность. Больше, как обычно, в Википедии .

InnaM
источник
1
Зачем использовать TLS, когда у меня есть возможность?
Рэнделл
8

Из этой статьи базы знаний Университета Индианы :

SSL обозначает Secure Sockets Layer. Netscape изначально разработал этот протокол для частной передачи информации, обеспечения целостности сообщений и обеспечения идентичности сервера. SSL работает в основном за счет использования шифрования с открытым / закрытым ключом для данных. Он обычно используется в веб-браузерах, но SSL также может использоваться с серверами электронной почты или любым видом транзакций клиент-сервер. Например, некоторые серверы обмена мгновенными сообщениями используют SSL для защиты разговоров.

TLS означает безопасность транспортного уровня. Инженерная рабочая группа по Интернету (IETF) создала TLS в качестве преемника SSL. Он чаще всего используется в качестве параметра в почтовых программах, но, как и SSL, TLS может играть роль в любой транзакции клиент-сервер.

Различия между двумя протоколами очень незначительны и очень технически, но это разные стандарты. TLS использует более надежные алгоритмы шифрования и может работать на разных портах. Кроме того, TLS версии 1.0 не взаимодействует с SSL версии 3.0.

Раджу
источник
2
Отсюда: kb.iu.edu/data/anjv.html
jjnguy
4

TLS является более новой версией SSL. Хотя в некоторых местах эти слова могут означать нечто иное, чем просто протоколы, поэтому, пожалуйста, уточните свой вопрос.

wRAR
источник
ОП уже заявил, что TLS является более новой версией SSL. Остальная часть вашего поста - это комментарий. Не ответ
user207421
@EJP: вы заметили, что ответу> 3 года?
user9517 поддерживает GoFundMonica
(Интересно, может ли даже ♦ -mod отредактировать вопрос другого пользователя, добавив «Я знаю, что ...», что неприменимо к первоначальному пользователю)
wRAR
1
@EJP, чтобы быть справедливым для wRAR, редактирование этого вопроса было предметом долгих дебатов (см. Здесь и здесь ). Конечно, ничего из этого не видно сразу, не просматривая историю. (Обратите внимание, что это изменение было сделано модом ...)
Бруно