Что происходит в сети, когда установлено соединение TLS / LDAP или TLS / HTTP? - PullRequest
15 голосов
/ 07 сентября 2010

Я переписываю свой вопрос, надеюсь, я смогу получить лучший ответ. Я задал похожий вопрос о serverfault здесь , и считают , что правильный и действительный сервер TLS - это тот, который ожидает команду «STARTTLS».

Правда ли, что STARTTLS может быть выдан правильно настроенному серверу LDAP или HTTP TLS без дополнительного порта? Я знаю, что это верно с точки зрения SMTP, но не уверен, насколько широко я могу применить этот опыт к другим протоколам.

Я потратил время на чтение (но не до конца понял)

Q: Что происходит в сети прямо перед настройкой сеанса TLS через LDAP или HTTP? Поскольку это основано на TCP, могу ли я просто подключиться к этому порту через telnet и выполнить команду, чтобы убедиться, что он работает (до этого момента)?

Ответы [ 3 ]

23 голосов
/ 07 сентября 2010

Существует очень мало различий между SSL и TLS в том, как они используются.Однако существует фундаментальное различие между предварительным установлением SSL / TLS и использованием такой команды, как STARTTLS.Иногда «TLS» используется в отличие от «SSL», что означает «использование режима STARTTLS», но это неверно.

Предварительный TLS / SSL

В этом случаеклиент инициирует соединение TLS / SSL раньше всего, поэтому сначала происходит рукопожатие SSL / TLS.Когда защищенный сокет включен, приложение, использующее его, может начать отправку различных команд для протокола выше TLS (например, HTTP, LDAP в этом режиме, SMTP).

В этом режиме версии SSL / TLS имеютработать на порте, отличном от их простых аналогов, например: HTTPS на порту 443, LDAPS на порту 636, IMAPS на порту 993 вместо 80, 389, 143 соответственно.

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

TLS после STARTTLS (или эквивалент)

Спецификация TLS допускает рукопожатие в любое время, в том числе после обмена некоторыми данными в обычном TCP через одно и то же TCP-соединение.

Некоторые протоколы, включая LDAP, включают команду, сообщающую протоколу приложения, что произойдет обновление.По сути, первая часть обмена данными LDAP происходит в виде простого текста, затем отправляется сообщение STARTTLS (все еще в виде простого текста), которое указывает, что текущее соединение TCP будет повторно использовано, но что следующие команды будут заключены в TLS/ SSL уровень.На этом этапе происходит квитирование TLS / SSL, и связь «обновляется» до TLS / SSL.Только после этого связь защищается через TLS / SSL, и клиент и серверы знают, что им нужно обернуть / развернуть свои команды из уровня TLS (обычно добавляя библиотеку TLS между уровнем TCP и уровнем приложения).

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

Даже HTTP имеет вариант с использованиемэтот механизм, хотя в основном он никогда не поддерживается: RFC 2817 Обновление до TLS в HTTP / 1.1 .Это полностью отличается от способа работы HTTPS ( RFC 2818 ), который сначала запускает TLS / SSL.

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

( EDIT : я удалил неправильное предложение, так как@GregS указал, спасибо.)

( РЕДАКТИРОВАТЬ : я также больше рассказал о SSL против TLS в этом ответе на ServerFault .)

3 голосов
/ 07 сентября 2010

«Команда STARTTLS» - это то, что определено вне спецификации TLS.Это то, что клиент отправляет на сервер по ранее незашифрованному соединению, чтобы сказать: «Хорошо, давайте начнем согласование TLS сейчас».

Не все протоколы реализуют такую ​​команду.SMTP делает, но HTTP и LDAP (насколько я знаю) этого не делают.

Когда нет явной команды для начала TLS, обычной альтернативой является назначение определенного порта: например, 443 для HTTP(s) и 636 для LDAP.В этом случае согласование TLS начинается, как только установлено соединение TCP.

Хорошим инструментом для устранения неполадок, который является инструментом "s_client" в openssl.Например:

openssl s_client -connect ldap.mycompany.com:636

подключится и выгрузит сертификат сервера.Думайте об этом как о "Telnet" для соединения TLS.(Конечно, LDAP не является текстовым протоколом, поэтому после установки соединения TLS с клавиатуры ничего не поделаешь.)

1 голос
/ 22 июня 2011

LDAP использует расширенную операцию для запуска установки уровня TLS. См. Также раздел 4.14 в RFC .

...