от Bondoff(19-02-2005)
рейтинг (15)
[ добре ]
[ зле ]
Вариант за отпечатване
Стъпка по стъпка:
Apache 2 с поддръжка на SSL/TLS.
Част I
Предварително се извинявам за качеството на приложените диаграми (А.Б.).
За
повече от 10 години протоколът SSL се наложи, като начин за криптиран
трансфер на данни през Интернет. Никой не може да предположи колко
милиони и милиарди банкови транзакции са осъществени по криптирана
връзка осигурена от протокола SSL. Фактът, че използваме SSL
криптирана връзка, обаче, не означава че тя е сигурна. Възможността
за декриптиране на данните, възможността за проверка на сертификатите
на уеб сървърите, уязвимостта в SSL библиотеките, които уеб сървърите
използват, могат да доведат до пробив в сигурността при предаване на
чувствителна информация.
Тази
статия е първата от три-серийна поредица Стъпка по стъпка:
Apache 2 с поддръжка на SSL/TLS, посветена на конфигуриране на
Apache 2 уеб сървър с поддръжка на SSL/TLS. Целта на автора е
поредицата статии да бъдат справочен материал при настройка и
конфигурация на уеб сървър.
Част
първа на статията третира начина на работа на SSL/TLS, както и някои
любопитни аспекти. Как да инсталираме и конфигурираме Apache 2.0 уеб
сървър с поддръжка на тези протоколи.
Втора част на статия дискутира проблема за конфигурация на mod_ssl
модулът на Apache 2 и автентикацията при https. Също така във втората
част на статията, ще обърнем внимание на създаването на SSL
сертификат за уеб сървър.
Третата
част на статията обсъжда проблемите по клиентска автентикация и някои
типични конфигурационни грешки допускани от системните
администратори, които биха могли да допринесат за увеличаване на
уязвимостта на уеб сървъра.
Представяне
на SSL.
Secure
Socket Layer (SSL) е може би най-широко използваният протокол, за
осъществяване на криптирана връзка между клиент и уеб сървър в
Интернет. По своята същност SSL е доста прост протокол: той
предоставя алгоритъм за криптиране на данни и ключове за
декриптирането им между две страни на комуникационен канал и
предоставя криптиран тунел, за други протоколи
(например HTTP). Като допълнение, SSL предоставя двустранна
автентикация между двете страни посредством сертификат.
SSL
е слоеви протокол, който съдържа в себе си четири
под-протокола:
Позицията
на всеки един от тези под-протоколи, в съответствие с TCP/IP модела,
може да бъде илюстриран по следния начин:

Както
се вижда от диаграмата, SSL се намира в програмния слой на TCP/IP
протокола. По силата на това обстоятелство, SSL може да бъде
имплементиран в почти всяка операционна система, която поддържа
TCP/IP протокол, без да е необходима специална конфигурация на ядрото
на системата или TCP/IP стека. Това обстоятелство дава на SSL голямо
предимство пред други протоколи като IPSec (IP Security Protokol)
например.
Как
работи SSL? Следващата диаграма показва опростен модел на процесите
за установяване на нова SSL връзка между клиент (например уеб
браузър) и сървър в нашиа случай SSL-конфигуриран уеб сървър.

Както
виждате, процесът на установяване на всяка нова SSL връзка започва
с размяна на криптиращи параметри и автентикация на сървърите,
използвайки SSL ръкостискане (SSL Handshake Protocol). Ако
ръкостискането е успешно, може да започне предаване на данни по
криптиран тунел, използвайки SSL Record Layer.
На
практика процесът по установяване на криптирана връзка е малко
по-сложен. За да се избегне ненужно ръкостискане, някои от
криптиращите параметри може да бъда кеширани, да се изпращат Alert
messages и т.н., но тук няма да се впускаме в подробности.
SSL, PCT, TLS и WTLS
(а защо не SSH?)
Независимо,
че SSL е най-известния и най-използвания, той не е единствения
протокол за създаване на криптирана тунел.
Важно
е да се знае, че след създаването на SSL v1.0 (който между другото
никога не се появи на бял свят), бяха създадени поне пет протокола,
изиграли повече или по-малко за ролята на криптираното предаване на
данни в Интернет. Ще посочим някои от тях.
SSL v2.0 Издаден от Netscape Communications през 1994.
Като основна цел, протоколът е създаден за осигуряване на сигурна
обмяна на данни при HTTP сесии в Интернет. За съжаление (на
Netscape) бяха открити значителни пропуски и уязвимости, което му
създаде лоша слава и доведе до ограниченото му използване от много
комерсиални организации и финансови учреждения.
PCT v1.0 Разработен през 1995 от Microsoft, Privacy
Communication Technology (PCT) v1.0 изчиства някои от пропуските на
SSL v2.0. С разработването на PCT, Microsoft си поставя за цел да
елиминира SSL. Така или иначе, този протокол никога не достигна
популярността на SSL v3.0.
TLS v1.0 (познат още като SSL v3.1) Публикуван от IETF
през 1999 (RFC
2246). Базиран на SSL v3.0 и PCT и хармонизира различията между
концепциите на Netscape и Microsoft. Важно е да отбележим, че
независимо от това, че в основата си TLS е SSL базиран протокол, той
не е 100% съвместим с SSL предшественика си. IETF направиха някои
нововъведения, като например използването на HMAC вместо MAC,
допълване на alert код за поддръжка на Fortezza cipher suites, и
други. Крайният резултат от тези промени е непълното съвместяване
със SSL.
WTLS "Mobile and wireless" версия на TLS
протокола, използваща като носител UDP дейтаграми. Той е разработен
и оптимизиран специално за работа при нискоскоростните връзки между
WAP-базирани мобилни устройства. WTLS е включен като стандартна
поддръжка в WAP 1.1 версия на протокола и е създаден от WAP Forum.
След излизането на версия 2 на протокола WAP, WTLS е заменен от
профилираната версия на TLS протокола, който е доста по-сигурен и
устойчив главно поради факта, че не се нуждае от разкриптиране и
прекриптиране на данните, в случаите когато връзката минава през WAP
gateway.
Може
би някои от вас си задават въпроса Защо SSH не се използва за
осигуряване на криптирана връзка/достъп до WWW? Можем да
посочим две причини:
Преди всичко TLS и SSL бяха създадени специално за осигуряване на
криптирани HTTP сесии, докато протоколът SSH беше създаден главно
за да замени Telnet и FTP. SSL има за задача да осъществи
ръкостискане и да създаде криптиран тунел за други протоколи, в
същото време SSH осигурява криптирана конзолна конекция, криптиран
трансфер на файлове и поддръжка на множество автентикационни схеми
(чрез парола, публични ключове, Kerebros и други);
От друга страна SSL/TLS са базирани на X.509v3 и PKI, които правят
дистрибуцията и менажирането на криптиран канал в една HTTP сесия
доста по-лесно.
Да
обобщим. Няколко са протоколите за осигуряване на криптирана връзка
при HTTP сесии, само два от тях (поне за момента) са се наложили: TLS
v1.0 и SSL v3.0
Софтуерни изисквания.
Време
е да обърнем малко внимание на конфигурирането на Apache
2.0 с поддръжка на SSL/TLS. Преди всичко за да можете да
поддържате SSL/TLS ви е необходим модулът mod_ssl.
Системните
изисквания за правилната работа на Apache с поддръжка на SSL/TLS е да
са инсталирани gcc и OpenSSL библиотеки. Практическите примери
представени в статията, би трябвало да работят на повечето Linux и
BSD базирани операционни системи, но както знаете гаранция 100% няма.
Инсталиране на Apache
със SSL/TLS поддръжка.
В
практическите примери, като основен уеб-браузър използваме MS
Internet Explorer, тъй като е най-широко използван по света. Това не
означава, че примерите няма да работят и за други
популярни уеб-браузъри като FireFox,
Mozilla,
Netscape,
Safari, Opera.
Може
да ви прозвучи смешно, но най-напред (ако обичате) си инсталирайте
Apache 2.0. След това създайте в системата група и потребител с име
apache.
<< Стъпка по Стъпка: Apache 2 с поддръжка на SSL/TLS, Част III | Promqna firmware-a na Linksys WRT54G s Linux >>
|