Существует очень мало различий между 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 .)