Протокол ssl
SSL (Secure Socket Layer, Протокол (или уровень) защищенных сокетов) спроектирован для обеспечения конфиденциальности обмена между двумя прикладными процессами клиента и сервера. Он предоставляет возможность аутентификации сервера и, опционно, клиента. SSL и требует применения надежного транспортного протокола (например, TCP).
SSL – это коммуникационный протокол с шифрованием, применяемый для передачи защищенной информации по Internet. Преимуществом SSL является то, что он независим от прикладного протокола. Протоколы приложения, такие как HTTP, FTP, TELNET и т.д. могут работать поверх протокола SSL совершенно прозрачно.
Взаимодействие SSL с приложениями:
SSL действует как промежуточный протокол между TCP/IP и протоколами прикладных уровней и, когда клиент устанавливает защищенное соединение, невидимо осуществляет кодирование и декодирование информации.
Основой SSL является шифрование. В SSL используется метод шифрования, называемый криптографией открытых ключей, когда серверная сторона соединения посылает клиенту открытый ключ для шифрования информации, дешифровать которую может только сервер с помощью хранимого им личного ключа. Клиент использует открытый ключ для шифрования и посылки серверу своего собственного ключа, который однозначно идентифицирует его на сервере и не позволяет наблюдающим за линией связи между двумя системами имитировать сервер или клиента.
Протокол SSL предоставляет "безопасный канал", который имеет три основные свойства:
- Канал является частным. Шифрование используется для всех сообщений после простого диалога, который служит для определения секретного ключа.
- Канал аутентифицирован. Серверная сторона диалога всегда аутентифицируется, в то время как клиентская – аутентифицируется опционно.
- Канал надежен. Транспортировка сообщений включает в себя проверку целостности.
Сертификат представляет собой зашифрованную информацию, которая связывает открытый ключ шифрования с удостоверением подлинности личности, сервера или другой сущности, известной как субъект. Издателем сертификата является бюро сертификации (Certification Authority – CA). Сертификат содержит:
- имя объекта,
- название организации, с которой связан объект,
- отдел организации, с которой связан объект,
- название города или района, в котором находится объект,
- название штата или области, в котором находится объект,
- название страны, в которой находится объект,
- серийный номер сертификата,
- время действия сертификата.
Самые известные СА – это Verisign и Thawte. Они исследуют различные юридические документы организаций, которые хотят установить свою аутентичность в Internet и после независимой проверки подписывают (заверяют) сертификат собственным открытым ключом.
Сертификат обычно передается в бинарном или кодированном текстовом формате.
Пример транзакции SSL:
| ||||
|
Для того, чтобы web-сервер Apache реагировал на соединения SSL, нужно убедиться в том, что он прослушивает порт 443 – стандартный порт для SSL. Указать это можно в директиве
Listen 443
Для активизации SSL нужно указать Apache способ и время использования этого протокола, введя директивы SSL в конфигурацию сервера.
Включение механизма SSL:
SSLEngine On
Личный ключ сервера:
SSLCertificateKeyFile conf/ssl/www.server.com.key
Сертификат для личного ключа:
SSLCertificateFile conf/ssl/www.server.com.crt
При динамической загрузке SSL эти директивы нужно размещать после директив
LoadModule/AddModule
чтобы Apache их понимал. Если указать директивы на уровне сервера, SSL будет разрешен для всего сервера и обычные НТТР-соединения не будут работать ни по какому порту. Если же расположить их в виртуальном хосте на основе IP-адресов, SSL будет разрешен только для одного хоста, выделенного для порта 443.
<VirtualHost 192.168.1.1:443>
ServerName server.com
DocumentRoot /www/docs
…
SSLCertificateKeyFile conf/ssl/www.server.com.key
SSLCertificateFile conf/ssl/www.server.com.crt
</VirtualHost>
Реализация SSL в отдельной области:
<Directory /home/www/secure/>
SSLrequireSSL
</Directory>