от Bondoff(19-02-2005)

рейтинг (15)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване


Стъпка по стъпка: 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 е “слоеви” протокол, който съдържа в себе си четири под-протокола:

  • SSL Handshake Protocol

  • SSL Change Cipher Spec Protocol

  • SSL Alert Protocol

  • SSL Record Layer


Позицията на всеки един от тези под-протоколи, в съответствие с 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.


  • SSL v3.0
    През 1996 Netscape Communications успешно изигра серията “Завръщането на джедаите”. SSL v3.0 изчиства пропуските от SSL v2.0 и включва в себе си повечето идеи и функции на PCT. По този начин, той се превърна в най-популярния протокол за осъществяване на криптирана връзка в Интернет.


  • 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?” Можем да посочим две причини:

      1. Преди всичко TLS и SSL бяха създадени специално за осигуряване на криптирани HTTP сесии, докато протоколът SSH беше създаден главно за да замени Telnet и FTP. SSL има за задача да осъществи ръкостискане и да създаде криптиран тунел за други протоколи, в същото време SSH осигурява криптирана конзолна конекция, криптиран трансфер на файлове и поддръжка на множество автентикационни схеми (чрез парола, публични ключове, Kerebros и други);

      2. От друга страна 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 >>