Протокол Secure Sockets Layer (SSL – протокол защищенных сокетов), а равно пришедший ему на смену Transport Layer Security (TLS – протокол защиты транспортного уровня) – это два наиболее популярных в мире протокола защиты сетевых соединений. SSL широко используется в браузерах для обеспечения безопасности электронной торговли. Он применяется для защиты сети и во многих приложениях, не предназначенных для работы в Web. На самом деле, говоря о безопасности, программисты часто имеют в виду именно протокол SSL.

Примечание. Для краткости мы будем считать, что аббревиатура SSL обозначает оба протокола: SSL и TLS.

Программные API, поддерживающие SSL, обычно заменяют традиционную абстракцию ТСР–сокета, соединяющего две точки, понятием «защищенного соке–та» (отсюда и название протокола). Это означает, что SSL шифрует трафик, проверяет целостность сообщений и предоставляет каждой стороне возможность аутентифицировать партнера. SSL, на первый взгляд, прост. Для большинства программистов он выглядит как прозрачная замена одних сокетов другими. При этом еще надо добавить простую начальную аутентификацию, работающую по защищенному соединению, и вроде бы все. Однако за этой кажущейся простой скрывается несколько проблем, и некоторые из них весьма серьезны. Самое главное – это то, что надлежащая аутентификация сервера обычно не выполняется автоматически. Для этого нужно написать довольно много кода.А если сервер не аутентифицирован, то противник может подслушивать передачу, модифицировать данные и даже полностью перехватить сеанс, оставаясь незамеченным. И сделать это гораздо проще, чем вы можете себе представить; в сети есть множество программ с открытыми исходными текстами для организации такой атаки.