Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008 |
Безопасность в Веб-разработке
17.5.2. HTTPS
HTTPS (Hypertext Transfer Protocol Secure) – расширение протокола HTTP, поддерживающее шифрование [37]. Данные, передаваемые по протоколу HTTP, "упаковываются" в криптографический протокол SSL или TLS, тем самым обеспечивается защита этих данных.
HTTPS был разработан компанией Netscape Communications Corporation, чтобы обеспечить аутентификацию и защищенное соединение. HTTPS широко используется в мире Веб для приложений, в которых важна безопасность соединения, например, в платежных системах.
В настоящее время HTTPS поддерживается наиболее популярными браузерами и используется в почтовом сервисе GMail.
Строго говоря, HTTPS не является отдельным протоколом. По сути это обычный HTTP, работающий через шифрованные транспортные механизмы SSL и TLS. Он обеспечивает приемлемую защиту от атак, основанных на прослушивании сетевого соединения – от снифферских атак и атак типа man-in-the-middle при условии, что будут использоваться адекватные шифрующие средства, сертификат сервера проверен и ему доверяют.
По умолчанию HTTPS URL использует 443 TCP-порт (для незащищенного HTTP – 80). Чтобы подготовить веб-сервер для обработки https-соединений, администратор должен получить и установить в систему сертификат для этого веб-сервера. Сертификат состоит из двух частей (двух ключей) – public и private. Public-часть сертификата используется для зашифровывания трафика от клиента к серверу в защищенном соединении, private-часть – для расшифровывания полученного от клиента зашифрованного трафика на сервере. Сертификат можно получить в компании-сертификаторе (например, VeriSign) – это платная услуга. Сертификат должен быть подписан уполномоченной стороной (компанией-сертификатором – Certificate authority), которая будет гарантировать клиентам, что держатель сертификата является тем, за кого себя выдает.
Некоторые сайты используют собственные сертификаты. Существует возможность создать такой сертификат, не обращаясь в компанию-сертификатор. Такие сертификаты могут быть созданы для серверов, работающих под Unix, с помощью таких утилит, как ssl-ca от OpenSSL или gensslcert от SuSE. Подписываются такие сертификаты этим же сертификатом и называются self-signed. Такие сертификаты менее надежны, чем сертификаты, подписанные компаниями-сертификаторами. Такое использование защищает от пассивного прослушивания, но без проверки сертификата каким-то другим способом (например, звонок владельцу и проверка контрольной суммы сертификата) этот метод не будет являться вполне безопасным.
Эта система также может использоваться для аутентификации клиента, чтобы обеспечить доступ к серверу только авторизированным пользователям. Для этого администратор обычно создает сертификаты для каждого пользователя и загружает их в браузер каждого пользователя. Также будут приниматься все сертификаты, подписанные организациями, которым доверяет сервер. Такой сертификат обычно содержит имя и адрес электронной почты авторизованного пользователя, которые проверяются при каждом соединении, чтобы проверить личность пользователя без ввода пароля.
В HTTPS для шифрования используется длина ключа 40, 56, или 128 бит. Некоторые старые версии браузеров используют длину ключа 40 бит (пример тому – IE, версий до 4.0), что связано с экспортными ограничениями в США. Длина ключа 40 бит не является сколько-нибудь надежной. Многие современные сайты требуют использования новых версий браузеров, поддерживающих шифрование с длиной ключа 128 бит, с целью обеспечить достаточный уровень безопасности. Такое шифрование значительно затрудняет злоумышленнику поиск паролей и другой личной информации.
17.5.3. Настройка HTTPS
Для того чтобы веб-запросы/ответы передавались по безопасному протоколу передачи данных HTTPS в ОС Windows необходимо настроить работу сайта через SSL ( HTTPS ) в IIS.
17.5.3.1. Пример настройки для IIS 6
- Установить бюро сертификатов (БС). Про БС можно почитать по ссылке http://www.intuit.ru/department/internet/websadmin/10/.
- Зайти в свойства сайта (рис. 17.18).
- В свойствах сайта перейти во вкладку DirectorySecurity и нажать кнопу ServerSertificate (рис. 17.19).
- В появившемся окне нажать "Далее".
- Потом выбрать пункт "Создать новый сертификат".
- В следующем окне оставить все как есть (Prepare the request now, but send it later).
- В последующих окнах можно ввести дополнительную информацию. В одном из окон нужно будет ввести имя для файла, содержащего запрос на сертификат.
- Нужно зайти на " http://имя_сервера/certsrv " для создания сертификата из запроса.
- Перейти по ссылке Request a certificate.
- Потом перейти по ссылке Advanced certificate request.
- И, наконец, Submit a certificate request by using a base-64-encoded CMC or PKCS #10 file, or submit a renewal request by using a base-64-encoded PKCS #7 file.
- В появившейся форме в поле Saved Request вставить содержание текстового файла с запросом на сертификат, сохраненный ранее (рис. 17.20). Нажать Submit.
- Будет выведен отчет о том, что сертификат передан на рассмотрение. Также отобразится идентификатор сертификата. Его надо запомнить.
- Далее нужно зайти в панель управления сертификатами и разрешить созданный сертификат (панель управления / администрирование / управление сертификатами) (рис. 17.21).
Зайти в раздел ожидающих для рассмотрения сертификатов. Выбрать нужный сертификат и разрешить его.
- Опять идем на " http://имя_сервера/certsrv ", переходим по ссылке View the status of a pending certificate request. Выбираем сертификат и жмем Download certificate.Сохраняем сертификат.
- Потом опять идем в свойства сайта во вкладку безопасность каталога. Выбираем сертификаты сервера (рис. 17.22).
- Заполняем все поля (рис. 17.23).
В данном поле пишем путь к файлу сертификата.
- Сайт теперь доступен по https.
Пример:
- Сайт работает на 90-ом TCP порту и на 443 SSL. Тогда нужно обращаться к сайту по ссылке "https://имя_сервера/".
- Сайт работает на 90-ом TCP порту и на 86787 SSL. Тогда нужно обращаться к сайту по ссылке "https://имя_сервера:86787/".