Как установить openssl на windows server 2012

Содержание
  1. Протокол HTTP и WWW-серверы
  2. Йиржи Данек, xdanek7@fi.muni.cz
  3. Контент
  4. HTTP
  5. История
  6. Версия протокола
  7. другие соответствующие документы RFC
  8. текущие события
  9. URI, URL, URN
  10. Ход общения
  11. Образцы
  12. Методы
  13. Заголовки
  14. Некоторые заголовки, отправленные клиентом
  15. некоторые заголовки, отправленные сервером
  16. Некоторые заголовки, связанные с отправленными данными
  17. Коды состояния
  18. Интернет-серверы
  19. Апач
  20. Установка
  21. Литература
  22. Конфигурация
  23. Выбранные простые директивы
  24. Директивы выбранной пары
  25. Литература
  26. Объединение
  27. Литература
  28. Структура Apache
  29. Пример с фильтром, переменной окружения и обработчиком
  30. Литература
  31. Модули
  32. Использование
  33. Debian Ubuntu
  34. Базовая аутентификация
  35. mod_status
  36. Виртуальные серверы
  37. Обсуждение контента
  38. suEXEC
  39. Перенаправление
  40. mod_alias
  41. Параметры типов переадресации
  42. mod_rewrite
  43. Создание самоподписанного сертификата
  44. настройки апача
  45. Как тестировать
  46. Проблема с HTTPS и виртуальными серверами
  47. Литература
  48. Общий интерфейс шлюза (CGI)
  49. Настройка в Apache
  50. Литература
  51. nginx
  52. Литература Использование nginx в качестве обратного прокси-сервера для ускорения разработки App Engine блог, в котором кратко представлен сервер Пример конфигурации пример конфигурации NGINX PRIMER 2: ОТ APACHE К NGINX
  53. собственная программа
  54. Питон
  55. Производительность
  56. оставить в живых
  57. конвейерная обработка
  58. КОМЕТА
  59. Длительное объединение.
  60. Потоковая передача HTTP
  61. Веб-сокеты
  62. Разделение домена
  63. Сеть распространения контента CDN
  64. Кэширование
  65. Кэширование в HTTP/1.1
  66. Заголовки данных, относящиеся к кэшированию
  67. Заголовки данных и запросов связаны с кэшированием
  68. Литература
  69. Разделение домена
  70. Безопасность
  71. Социальная инженерия
  72. Литература
  73. Подделка межсайтовых запросов
  74. Междоменный AJAX
  75. Литература
  76. Межсайтовый скриптинг (XSS), внедрение SQL
  77. Литература
  78. SSL-атаки
  79. Отключение SSL
  80. Дополняющая атака оракула
  81. Атака счастливчиков тринадцати
  82. Литература
  83. ЗВЕРЬ
  84. Литература
  85. ПРЕСТУПНОСТЬ
  86. Литература
  87. Атаки в обход TLS

Протокол HTTP и WWW-серверы

Йиржи Данек, xdanek7@fi.muni.cz

Контент

  • Протокол HTTP
    • История
    • Методы
    • Заголовки
    • Компьютерная графика
    • SSL
    • Виртуальные серверы
  • Интернет-серверы
    • Апач
      • Установка
      • Компиляция в NetBSD
      • Конфигурация
    • nginx
      • Конфигурация
  • Производительность
    • Keep-alive, конвейеризация
    • Разделение домена, CDN
    • Кэш (браузер, прокси, веб-сервер, веб-приложение и т. д.)
  • Безопасность
    • Социальная инженерия
    • Атаки на веб-приложения (CSRF, XSS, внедрение SQL)
    • Атаки на SSL (Padding oracle, BEAST, CRIME)
    • Атаки сетевого уровня
  • Литература

HTTP

протокол

HTTP (протокол передачи гипертекста) — это протокол прикладного уровня, используемый для передачи данных в системе World Wide Web. Всемирная паутина (www) состоит из документов HTML, хранящихся на веб-серверах, которые делают их доступными для клиентов, веб-браузеров, через HTTP.

История

У истоков www стоит Тим ​​Бернерс-Ли, который спроектировал систему в 1989 году, написал первоначальную спецификацию протокола HTTP и формата HTML, а также запрограммировал первый веб-сервер и браузер (также выступавший в качестве редактора WYSIWYG для HTML). В настоящее время разработка сети защищена инициированным им Консорциумом Всемирной паутины (W3C).

Версия протокола

  • 0.9 — (1990 г.) не был выпущен в качестве RFC
    • исходная версия, только метод GET
  • 1.0 — RFC 1945 (1996)
    • был создан одновременно с версией 0.9 как надмножество
    • заголовки для запросов, ответов и данных
    • коды статуса в ответах
    • методы GET, HEAD, POST, PUT, DELETE
      • и были и такие, которые не сохранились в стандарте до наших дней, ССЫЛКА, ОТСОЕДИНЕНИЕ, ИСПРАВЛЕНИЕ, ПРЫЖОК (!), ПРОВЕРКА, ПОИСК ТЕКСТОВ…
  • 1.1 — RFC 2068 (1997), RFC 2616 (1999)
    • последнее обновление на данный момент, оно стремится унифицировать реализации и вносит новые возможности в протокол
    • Y2K, двузначный формат года в заголовках не рекомендуется
    • поддержка активности, конвейеризация, запросы диапазона, кеширование
    • фрагментированное Transfer-Encoding, обязательный заголовок узла: – подходит для виртуальных серверов
    • методы GET, POST, HEAD, PUT,DELETE,TRACE,CONNECT и OPTIONS

другие соответствующие документы RFC

  • RFC 2018 (2000) HTTP через TLS
  • RFC 2817 (2000) Обновление до TLS в HTTP/1.1
  • RFC 3546 () Расширения Transport Layer Security (TLS)
    • SNI (индикация имени сервера)
  • RFC 4918 (2007 г.) HTTP-расширения для распределенной веб-авторизации и управления версиями (WebDAV)
  • RFC 5023 (2007) Протокол публикации Atom
  • RFC 5785 (2010 г.) Определение общеизвестных унифицированных идентификаторов ресурсов (URI)
  • RFC 6266 (2011) Использование поля заголовка Content-Disposition в протоколе передачи гипертекста (HTTP)
  • RFC 2109 (1997), 2965 (2000), 6265 (2011) Механизм управления состоянием HTTP
    • применяет файлы cookie
    • Атрибуты Secure и HttpOnly
  • RFC 6455 (2011) Протокол WebSocket
  • RFC 6585 (2012) Дополнительные коды состояния HTTP
    • код 511 Network Authentication Required
    • интересен

  • RFC 6797 (2012) Строгая транспортная безопасность HTTP
    • сервер отправляет клиенту заголовок о том, что все дальнейшие запросы к этому серверу могут быть сделаны только через HTTPS, а используемый сертификат должен быть действительным и не должен быть самоподписанным. Если сертификат недействителен, браузер должен выдать сообщение об ошибке, которое пользователь не может обойти.

текущие события

работает над следующей версией HTTP/1.1 и HTTP/2.0

URI, URL, URN

  • Единый URI ресурсаИдентификатор
  • Унифицированный URL-адрес ресурса
  • Универсальное имя ресурса URN

URI может быть URL, URN или и тем, и другим, в зависимости от того, идентифицирует ли он ресурс по имени или местоположению. Термины URI и URL, т. е. URN, на практике взаимозаменяемы. [rfc3305]

В связи с идеалом Semantic Web возникли идеи ввести URC, унифицированное цитирование ресурсов. Предполагалось, что это будут метаданные об источнике, т. е. классическая информация о цитировании.

Ход общения

Веб-сервер обычно прослушивает TCP-порт 80. После подключения клиента и установления TCP-соединения обмен данными начинается с использованием HTTP. Сначала клиент отправляет запрос на сервер, сервер обрабатывает запрос и отправляет ответ клиенту. Сервер разрывает соединение.

Этот базовый сценарий можно изменить

  • keep-alive — сервер поддерживает соединение открытым, клиент может использовать его для других запросов.
  • конвейерная обработка — клиенту не нужно ждать ответа сервера на предыдущий GET-запрос, и он может немедленно отправить еще один или несколько GET-запросов. Сервер отправляет ответы в порядке поступления запросов (FIFO)
  • Заголовок обновления — клиент инициирует обновление до протокола, отличного от HTTP, используя заголовок обновления. Например, веб-сокеты. Если обновление прошло успешно, дальнейшая связь осуществляется по правилам нового протокола.
  • метод CONNECT — Клиент создает туннель TCP через прокси-сервер. Обычно прокси разрешает туннель только через TCP-порт 443 для HTTPS.

Образцы

HTTP/0.9
HTTP/1.1

Методы

GET запрос HTML-страницы по заданному URL
HEAD запрос заголовка HTML-страницы
POST передать данные на сервер
PUT загрузить файл на сервер
УДАЛИТЬ удаляет файл на сервере
OPTIONS поиск параметров подключения и/или информации о HTML-странице без прямого запроса к ней (как с HEAD)
TRACE мониторинг запроса, отправленного на сервер
CONNECT установление TCP-соединения через HTTP-прокси (обязательно для HTTPS)
/.*/ пользовательские методы

Заголовки

Некоторые заголовки, отправленные клиентом

Хост: www.muni.cz указывает полное доменное имя сервера
Принять: text/html,application/ xhtml+xml ,application/xml;q=0.9,*/*;q=0.8 список типов MIME, понятных клиенту, и их предпочтения
Accept-Charset : ISO-8859-1,utf-8;q=0.7,*;q=0.3 предпочтительные наборы символов
Accept-Encoding: gzip,deflate,sdch предпочтительная кодировка
Accept-Language: cs,en-US;q=0.8,en;q=0.6 предпочитаемые языки
User-Agent идентификация клиента
Соединение: keep-alive говорим о keep-alive
Диапазон: байты=900-999 мы говорим только о части страницы
Пример запроса
Запрос диапазона выборки

некоторые заголовки, отправленные сервером

Дата: Вт, 15 ноября 1994 г. 08:12:31 GMT в большинстве случаев обязательный заголовок, указывает время, когда сервер выдал ответ
Сервер: Apache идентификация сервера
Accept-Ranges: байты таким образом, сервер может сообщить клиенту, что он может сделать запросы диапазона, т.е. «установить загрузку»
местоположение для перенаправления (коды состояния 3xx)
Keep-Alive: timeout=2, max=90 Сервер может сообщить клиенту, как именно будет выполняться KeepAlive.
Соединение: закрыть после получения этого ответа я закрою соединение (клиент также может отправить его)

Некоторые заголовки, связанные с отправленными данными

Content-Type: text/html; charset=ISO-8859-2 MIME-тип отправляемых данных, например, image/png
Content-Encoding кодирование отправляемых данных отправлено (сжатие, а не набор символов)
Content-Length: 11258 размер данных в байтах
Content- Язык: en язык документа

Коды состояния

  • 1xx информационный
  • 2xx успеха — пример 200 OK
  • Перенаправление 3xx — например, 301 Перемещено навсегда
  • Ошибка 4xx на стороне клиента — например, 404 Not Found
  • Ошибка на стороне сервера 5xx — например, 503 Служба недоступна

Интернет-серверы

Согласно Netcraft, который публикует рейтинг WWW-серверов по количеству обслуживаемых доменов с 1995 года, Apache по-прежнему является наиболее используемым сервером. Таблица лидеров за март 2013 г. выглядит следующим образом:

  • Апач 54%
  • Майкрософт ИСС 18%
  • nginx 14%
  • Google 4%
  • Другие 11%

Апач

Проект Apache зародился как серия исправлений для сервера NCSA httpd 1.3. Отсюда и название «PAtCHy сервер». Однако сегодня апачи официально получили свое название от знаменитого индейского племени апачей за их боевые искусства и выносливость. Сервер в настоящее время разрабатывается Apache Software Foundation.

Установка

На момент написания статьи Apache2 версии 2.4 доступен на странице проекта, а версия 2.5 находится в разработке.

  • Fedora, CentOS — установка yum httpd
  • Debian, Ubuntu — apt-get install apache2
  • NetBSD — pkgin install apache-2.4.4

Структура файла сервера обычно похожа на следующую

/usr/sbin/ двоичные файлы httpd, apachectl
/etc/httpd соответственно. /etc/apache2 файлы конфигурации
/var/log/httpd журнал доступа, журнал ошибок
Компиляция в NetBSD

Компиляция позволяет нам выбрать MPM (многопроцессорный модуль), опустить suExec, наоборот компилировать поддержку языка Lua.

  • установите pkgsrc в соответствии с руководством, вики или каким-нибудь блогом
  • cd /usr/pkgsrc/
  • обновление резюме
  • cd /usr/pkgsrc/www/apache24
  • сделать параметры отображения
  • создание файла vim
  • установить PKG_OPTIONS.apache=»lua»
  • скопируйте /usr/pkg/share/examples/rc.d/apache в /etc/rc.d/ и просмотрите /usr/pkg/share/examples/httpd/
  • добавьте apache=YES в /etc/rc.conf
  • запуск apachetl

это возможность использовать сценарии Lua. Это экспериментальная функция. Скрипты на lua по сути являются модулями Apache, поэтому не рекомендуется делать эту функциональность доступной для всех пользователей.

Создать файл

другая более тонкая настройка пакета может быть выполнена в начале Makefile

Многопроцессорные модули (MPM)

В системах Unix в Apache доступны три модуля, отвечающие за параллельную обработку клиентов: event, worker и prefork. Если операционная система поддерживает потоки и пулы, лучше всего использовать событийную модель. Если потоки поддерживаются, а объединение в пул — нет, используется рабочая модель. В остальных случаях используется модель prefork. В дистрибутивах Apache обычно присутствует в префорковом варианте.

prefork — процессы — главный процесс разветвляет несколько дочерних процессов, которые прослушивают входящие соединения. Когда клиент присоединяется, один из потомков берет на себя управление. Когда ребенок заканчивает обслуживать клиента, он возвращается к слушанию. Проблема 1, в зависимости от конкретной реализации: голодание, еслимы прослушиваем более одного сокета, громоподобное стадо, если мы используем неблокирующий прием, это работает очень хорошо, если мы используем мьютекс. Итак, Apache использует мьютекс. Проблема 2: Когда мы включаем поддержку активности, у нас внезапно появляется множество потомков, каждый из которых просто поддерживает одно соединение и ничего не делает. Таким образом, Keep-alive обычно имеет очень короткое время ожидания (5 с).

Мьютексы (или семафоры Unix system V, используемые сервером в качестве мьютексов) могут быть перечислены с помощью команды ipcs -s. Если сервер настроен на использование другой реализации мьютексов (директива Mutex), то, конечно, эта команда ничего не покажет.

worker — процессы и потоки — основной процесс разветвляет несколько дочерних процессов, каждый дочерний процесс создает заданное количество рабочих потоков и один слушающий поток. Когда поток-слушатель получает клиента, он передает его одному из своих потоков-обработчиков. Прослушивающие потоки используют мьютекс, как и в модели prefork.

событие — потоки и объединение — сервер поддерживает несколько потоков обслуживания и один поток слушателя. Запросы обслуживаются служебными потоками. обслуживается одним потоком. Когда запрос обслуживается, соединение перемещается в поток прослушивания. Устраняет проблему с KeepAlive.

Внимание: mod_cgi работает только с моделью prefork. Если вы используете другую модель, вам нужно использовать модуль mod_cgid. С точки зрения пользователя оба модуля идентичны, за исключением директивы ScriptSock. Точно так же некоторые другие модули работают только в модели prefork, например, mod_php необходимо заменить на PHP через FastCGI.

Литература

  • HTTP-сервер Apache версии 2.4 : HTTP-сервер Apache версии 2.4
    • введение в MPM в документации Apache
  • Как выбрать, какой Apache MPM использовать?
    • хороший вопрос и хороший ответ на SE.
  • HTTP-сервер Apache версии 2.4: префорк Apache MPM
    • описание и параметры конфигурации для предварительно разветвленного Apache
  • HTTP-сервер Apache версии 2.4: настройка производительности Apache
    • обсуждение проблем, возникающих в связи с гипотетической реализацией без мультиплексирования в префорке MPM
  • HTTP-сервер Apache версии 2.4: событие Apache MPM
    • описание и параметры конфигурации для этого MPM

Apache — это модульное программное обеспечение. При компиляции есть возможность выбрать, какие модули будут скомпилированы, какие будут подгружаться динамически при старте сервера, а какие будут пропущены совсем. Даже функциональность веб-сервера является модульной и может быть исключена из компиляции 😉 Модули, скомпилированные непосредственно на сервере, могут быть перечислены с помощью команды

.

Конфигурация

Обычно можно начать с примера файла конфигурации дистрибутива

Конфигурация Apache состоит из основного файла, содержащего директивы. Директивы делятся на простые и контейнерные директивы. Парные директивы заключаются в фигурные скобки, как теги в HTML. Используя простую директиву Include, конфигурацию можно разделить на несколько файлов. Такая «централизованная» конфигурация все же может быть дополнена файлами .htaccess, размещенными непосредственно в отдельных папках веб-презентации.

Debian, Ubuntu

главным файлом конфигурации Apache является /etc/apache2/apache2.conf, который включает /etc/apache2/http.conf и все файлы в /etc/apache2/conf.d/ и в /etc/apache2/sites- включено/; кроме того, в каждой папке веб-презентации может быть файл с именем .htaccess, который может дополнительно изменять настройки для данной папки и подпапок, если он не отключен ни в одном из предыдущих конфигов

NetBSD

Основным файлом конфигурации является /usr/pkg/etc/httpd/httpd.conf, который может включать другие файлы /usr/pkg/etc/httpd/httpd-* Конечно, они применяются снова.и .htaccess.

В зависимости от того, где находится директива, она относится к одному из четырех контекстов.

  • Основная конфигурация — глобальная конфигурация
  • Виртуальный хост — конфигурация внутри парных директив
  • Каталог — конфигурация внутри директив контейнера и
  • htaccess — конфигурация в файлах .htaccess, находящихся непосредственно в веб-презентации. Он ограничен директивой AllowOverride в любом из предыдущих контекстов
  • .

Не каждая директива контейнера создает контекст. Только директивы контейнера Directory, Files, Location и VirtualHost создают контексты. Например. директива Limit container не создает контекст.

Выбранные простые директивы

ServerRoot «/usr/pkg» предшествует всем относительным путям в конфигурации (которые не начинаются с «/»)
Listen 80 указывает, где (адрес и порт) сервер будет ожидать запросов. Может быть указано несколько раз
LoadModule rewrite_module lib/httpd/mod_rewrite.so загрузка модуля
ServerName www.example .com сопоставляется с заголовком Host в запросе. Важно для виртуальных серверов
ServerTokens OS содержимое заголовка сервера. Опция ОС отправит точную версию сервера и очень приблизительную идентификацию ОС (например, Unix). Полный (параметр по умолчанию) также отправляет версию активированных модулей.
DocumentRoot «/usr/pkg/share/httpd/htdocs» корневой каталог веб презентация
KeepAlive no разрешает или отключает ранее упомянутые постоянные подключения
Включить etc/httpd/httpd-vhosts. conf вставить конфигурацию из другого файла. Идея состоит в том, чтобы сделать конфигурацию более понятной. В пути можно использовать *.

Директивы выбранной пары

в начальные угловые скобки seуказывает путь, к которому применяются настройки

Параметры
Нет отключить все
все включить все, кроме MultiViews
Индексы автоматическое создание индексов
ExecCGI выполнение сценариев CGI
MultiViews автоматическая генерация карт типов в соответствии с расширениями
Разрешить переопределение
  • Все
  • Нет
  • Параметры
  • Информация о файле
  • Настройка авторизации
  • Ограничение

Литература

  • HTTP-сервер Apache версии 2.4: основные функции Apache
    • документация для директивы Options

Объединение

Отдельные разделы конфигурации сервера применяются в строго определенном порядке. Для решения задачи достаточно знать, что директивы в разделе переопределяют глобальные директивы. И последняя директива переопределяет предыдущие.

Каждый отдельный модуль отвечает за слияние конфигурации, поэтому здесь можно проявить некоторую гибкость, например, с директивами Alias ​​и Redirect в конфигурации модуля mod_alias. Но мы создадим в задаче только один редирект, так что не проблема.

Литература

Структура Apache

С точки зрения конфигурации внутреннюю структуру Apache можно представить как набор взаимно взаимодействующих модулей. Модули обеспечивают функциональные возможности генераторов контента, метаданных модулей и фильтров.

Каждый запрос представлен на сервере некоторой внутренней структурой, которая проходит много этапов обработки.

  • переменные среды, которые несут дополнительную информацию, могут быть связаны с каждым запросом.

Модули могут преобразовывать запрос различными способами (например, mod_rewrite), назначать ему обработчик или устанавливать и читать переменные среды. Сюда же относятся модули контроля авторизации. Все эти модули называютсямодули метаданных.

  • Это реализовано таким образом, что сервер Apache предоставляет хуки для модулей. Каждому этапу обработки запроса сервером соответствует одна точка захвата. Контрольная точка — это список функций, которые будут вызываться на соответствующем этапе. Во время инициализации модули могут регистрировать свои функции в этих точках захвата.
  • Процесс, описанный в предыдущем пункте, назначает обработчик каждому запросу. Если обработчик не назначен, по умолчанию используется обработчик по умолчанию. Модули, реализующие обработчики, называются генераторами контента или модулями-обработчиками.
    • например набор обработчиков mod-cgi приведет к тому, что запрос будет обработан модулем обработчика mod_cgi, который запустит соответствующий файл на диске как сценарий CGI; default-handler заставляет запрос обрабатываться обработчиком по умолчанию, который находит файл на диске и отправляет его в обычном режиме.
    • Для каждого запроса всегда существует только один генератор контента.
  • Модули также могут вмешиваться в этот процесс отправки, это последняя группа модулей, и это модули, реализующие входные и выходные фильтры. Примером такого модуля является mod_deflate. Может быть активным более одного фильтра.
  • Пример с фильтром, переменной окружения и обработчиком

    Литература

    • Обработка запросов в Apache
      • документация разработчика по процессу обработки запроса, содержит наглядную схему
    • Часто задаваемые вопросы по фильтру Apache
      • объясняет различия между модулем, фильтром и обработчиком
    • HTTP-сервер Apache версии 2.4: использование обработчика Apache
      • введение в обработчики в документации Apache
    • Apache HTTP Server версии 2.4: переменные среды в Apache
      • введение в переменные в документации Apache
    • HTTP-сервер Apache версии 2.4: фильтры
      • введение в фильтры в документации Apache
      • здесь повторяется иллюстративная схемапо первой ссылке

    Модули

    некоторые важные модули

    • mod_ssl
    • mod_alias
    • mod_negotiation
    • mod_cgi
    • mod_so
    • http_core
    • mod_dir
    • mod_log_config

    Использование

    • Запуск
      • запуск apachetl
    • Проверка синтаксиса конфигурационного файла
      • конфигурационный тест apachectl
    • Перезапустите рабочий сервер
      • apachectl изящный

      Debian Ubuntu

      • пример a2dissite
      • пример a2ensite
      • a2enmod [имя-модуля]
      • a2dismod [имя-модуля]

      Базовая аутентификация

      создать файл паролей
      настройка папки
      Литература

      mod_status

      Виртуальные серверы

      Когда Apache обрабатывает входящие подключения, соответствующий виртуальный сервер определяется следующим образом

      • Передаются все пары IP:порт в объявлениях
        • ЕСЛИ ничего не соответствует
          • ТОГДА используется основной невиртуальный сервер
        • ЕСЛИ ровно один соответствует
          • ТОГДА этот соответствующий виртуальный сервер
          • используется

        • ЕСЛИ более одного совпадения
        • ТОГДА все объявления ServerName и ServerAlias ​​передаются для этих виртуальных серверов и используется
          • первый совпадающий виртуальный сервер, ЕСЛИ найдено совпадение
          • первый виртуальный сервер в списке, если совпадений не найдено
      Литература
      • VirtualHost берет на себя каталог без имени хоста в запросе
        • имеет +2 голоса и является принятым ответом

      список настроенных виртуальных серверов можно получить с помощью команды apachectl -S

      Обсуждение контента

      • В какой кодировке находится файл?
        • файл -b файл
      • преобразование между кодировками
        • iconv -f utf-8 -t iso-8859-2 file.utf8 > файл.iso8859-2
        • iconv также существует как функция тарелки
      • тестирование
        • curl -v —header «Accept-Charset: utf-8» —header «Accept-Language: en» 127.0.0.1/test.html
        • —header или -H добавляет заголовок
        • -v покажет исходящие и входящие заголовки HTTP

        Модули Mod_mime и mod_negotiation необходимы для согласования контента. Оба модуля, вероятно, уже установлены в исходной конфигурации дистрибутива. Достаточно просто включить MultiViews.

        suEXEC

        Если мы не используем suEXEC, все сценарии CGI выполняются под пользователем веб-сервера. Если у пользователей есть свои веб-сайты на сервере и они могут запускать сценарии cgi, это проблема безопасности.

        Плохо настроенный suEXEC также может быть проблематичным. В крайних случаях это может позволить пользователю запустить процесс от имени другого пользователя.

        Перенаправление

        Мы можем использовать mod_alias или более мощный mod_rewrite

        mod_alias

        mod_alias использует две основные директивы: Alias ​​и Redirect

        заказ на обработку

        внутри группы обработка будет происходить в том порядке, в котором они находятся в файле конфигурации. Обработка заканчивается на первой соответствующей директиве.

        • Псевдоним /image /ftp/pub/image
          • работает по принципу поиска и замены, аналогично sed s/^\/image/\/ftp/pub/image
        • AliasMatch (?i)^/image(.*) /ftp/pub/image$1
          • пример сопоставления без учета регистра
        • Постоянная переадресация /one http://example.com/two
        • RedirectMatch (.*)\.gif$ http://other.example.com$1.jpg
        • Псевдоним сценария /cgi-bin/ /web/cgi-bin/
        • Соответствие псевдониму скрипта

        Параметры типов переадресации

        permanent возвращает код 301, «перемещен навсегда».
        temp код 302, значение по умолчанию.
        см.другие код 303
        ушел код 410
        300-399 прямой код, должен быть действительным

        ScriptAlias, помимо установки псевдонима, также устанавливает обработчик cg-script для всех файлов по данному адресу и добавляет опции +ExecCGI

        Разница между ScriptAlias ​​и его эквивалентной настройкой, как показано ниже, заключается в том, что после того, как ScriptAlias ​​установлен для определенного поддерева, его нельзя переопределить при дальнейшей настройке.

        mod_rewrite

        Он используется, чтобы у нас были красивые URL

        Создание самоподписанного сертификата

        настройки апача

        Как тестировать

        Проблема с HTTPS и виртуальными серверами

        SSL включен в уровень OSI между TCP и HTTP. Сначала устанавливается TCP-соединение, затем SSL-соединение и только потом HTTP. При установлении SSL-соединения сервер не знает, на какой виртуальный сервер будет направлен запрос клиента. Если у каждого виртуального сервера разные сертификаты, невозможно определить, какой из них использовать на данном этапе.

        Есть несколько возможных решений этой ситуации [осень 2011]

        1. отправить сертификат наиболее посещаемого домена, т.е. первый сертификат, указанный в конфигурации. Наивное решение, при котором теоретически большинство посетителей не заметят никакой проблемы. Недостатком является то, что посетители других доменов получат неправильный сертификат и, вероятно, будут предупреждены веб-браузером о том, что сертификат недействителен для этого домена.
        2. запускать каждый домен на другом порту. Неудобно для пользователя.
        3. назначить каждому виртуальному серверу собственный общедоступный IP-адрес. Но адресов IPv4 не хватает, а IPv6 еще недостаточно распространен.
        4. SNI (индикация имени сервера) — обновление SSL/TLS в соответствии с RFC 3546. Клиент указывает домен на первом этапе установления связи SSL (ClientHello). Это расширение должно поддерживаться как клиентом, так и сервером. Поддерживатьэто хорошо в браузерах.
        5. один сертификат SAN/UCC для нескольких доменов (subjectAltName/). Проблема в том, что домены могут принадлежать разным владельцам. Необходимо найти ЦС, который подпишет такой сертификат. Если вам нужно разместить новый домен, для которого требуется HTTPS, вам необходимо повторно выпустить сертификат, расширенный другим доменным именем.
        6. Подстановочный сертификат, если все виртуальные серверы являются поддоменами в пределах одного родительского домена.
        7. S-HTTPS. Существует только как экспериментальный RFC 2660 (1999 г.), не реализованный в производственной версии ПО.
        8. Обновление до TLS в пределах HTTP/1.1. Выпущен как RFC 2817 для решения проблемы безудержных неэлегантных версий протоколов. Он использует заголовок Upgrade:. Введение в RFC довольно забавное («комитет решил, и все копаются в этом»). Веб-серверы (Apache 2.1+) поддерживают это, веб-браузеры никогда не реализовывали эту функцию и, вероятно, никогда не будут.

        Литература

        • ЛАМПА
          • страница на вики archlinux, команды для генерации сертификата взяты оттуда
        Проблема с виртуальными серверами (PVS)
        • VhostTaskForce — CAcert Wiki
          • обсуждение вариантов решения ПВС с использованием общего сертификата или SNI
        • Ошибка 276813 — [RFE] Поддержка обновления RFC 2817/TLS для HTTP 1.1
          • запрос функции для Firefox
        • Ошибка 4527: внедрение RFC 2817: обновление до TLS в пределах HTTP/1.1
          • то же самое в Google Chrome

        Общий интерфейс шлюза (CGI)

        Стандартный протокол, с помощью которого веб-сервер делегирует генерацию ответа другой исполняемой программе, обычно сценарию.

        Детали реализации протокола зависят от платформы, в Unix переменные среды используются для передачи заголовков и других переменных в скрипт, на стандартный вводскрипт получает данные POST, вывод скрипта отправляется на stdout

        Кроме того, Apache позволяет сценариям записывать в журнал ошибок, записывая данные в stderr.

        Настройка в Apache

        • Опции ExecCGI; cgi-скрипт SetHandler
        • или псевдоним сценария

        простой, но довольно длинный скрипт CGI в Bash

        Запуск вне веб-сервера
        Запуск через Apache

        Apache добавит заголовок Date and Status, если сценарий CGI не предоставил его

        Литература

        nginx

        произносится [enginex]

        Сервер запрограммировал Игорь Сысоев, автор логотипа Клифф Уэллс

        [S]иногда сначала описывается обратный прокси-сервер, а затем веб-сервер. Он безумно быстро обслуживает статические файлы, использует мало памяти, и его настройка оказалась простой. Кроме того, кто может устоять перед этим логотипом?

        С точки зрения внутреннего функционирования весь сервер основан на событиях.

        Литература
        • Использование nginx в качестве обратного прокси-сервера для ускорения разработки App Engine
          • блог, в котором кратко представлен сервер
        • Пример конфигурации
          • пример конфигурации
        • NGINX PRIMER 2: ОТ APACHE К NGINX

        собственная программа

        Некоторые языки программирования характеризуются тем, что на них очень легко написать WWW-сервер. Обычно это связано с поддержкой стандартной библиотеки. Это такие языки, как Python, JavaScript (NodeJS) или GO

        Питон

        • в любом каталоге запустите python -m SimpleHTTPServer 8000
        • создать потомка класса BaseHTTPRequestHandler и реализовать методы, соответствующие HTTP-запросам

        Производительность

        • минимизировать количество запросов
        • объединение файлов (один .js, один .css)
        • поместите .js внизу страницы (во время обработки файла .js веб-браузер временно прекратит отправку дальнейших запросов)
        • Спрайты CSS (значки сливаютсяв одно изображение, которое всегда позиционируется с помощью CSS так, чтобы из него была видна только нужная иконка)
        • встроенные изображения (URL-адрес данных), если это имеет смысл

        оставить в живых

        HTTP/1.1, возможность повторного использования открытого соединения для отправки другого запроса (все соединения сохраняются, но время ожидания установлено на несколько секунд)

        конвейерная обработка

        HTTP/1.1, отправка нескольких запросов одновременно. Он относительно широко распространен на мобильных устройствах. Из настольных браузеров конвейерную обработку по умолчанию использует только Opera.

        Проблема в том, что «HTTP требует строгой семантики FIFO для всех [конвейерных] запросов». Поэтому, если первый GET застревает на чем-то, все должно подождать. Другая проблема заключается в том, что прокси обычно не поддерживают конвейерную обработку

        .

        Сохраненные файлы cookie

        отправляются в каждом запросе

        КОМЕТА

        Название происходит от того факта, что Comet, как и Ajax, являются названиями обычных бытовых чистящих средств в Америке. Ха-ха-ха.

        HTTP не поддерживает двустороннюю связь. В частности, он не может обрабатывать связь, инициированную сервером.

        Пример: мы программируем веб-чат. Мы хотим показывать пользователю новые входящие сообщения в режиме реального времени. Классическое решение — клиент обновляется каждые 5 секунд. Благодаря методам, описанным ниже, мы можем сделать то же самое немного эффективнее.

        Комета — это собирательное название методов, пытающихся как-то решить эту проблему. Два основных механизма, длинный пул и потоковая передача HTTP, будут описаны позже.

        Длительное объединение.

        Клиент, в частности веб-страница, использующая Ajax, отправляет запрос на сервер. Сервер держит соединение открытым, и только когда у него есть данные, подготовленные для клиента, он отправляет ответ и закрывает соединение. Клиент немедленно подготавливает новое соединение для получения следующего пакета данных с сервера.

        Потоковая передача HTTP

        Аналогично длинному пулу, но сервер отправляет ответв таких частях, как Transfer-Encoding: chunked, то есть нам не нужно обновлять соединение после каждого ответа сервера. В среде HTTP/1.0 также есть вариант, который не может выполнять функция chunked.

        На стороне клиента обычно есть невидимый iframe, называемый «вечным фреймом». Отдельные куски всегда содержат один файл . Веб-браузер выполняет эти сценарии, как только они входят в iframe.

        Веб-сокеты

        Это не механизм из семейства Comet, а системное решение проблемы с новым протоколом.

        Используя заголовок Upgrade, мы перейдем с HTTP/1.1 на новый протокол — WebSocket, который поддерживает двустороннюю связь. Заголовок Upgrade является пошаговым, поэтому, если мы используем HTTP-прокси, нам нужно запросить прямой туннель к серверу с помощью CONNECT. WebSocket относится к семейству технологий HTML5.

        Разделение домена

        Клиентам, которые используют постоянные соединения, СЛЕДУЕТ ограничивать количество одновременных соединений, которые они поддерживают с данным сервером.Однопользовательский клиент НЕ ДОЛЖЕН поддерживать более двух соединений с любым сервером или прокси. […] Эти рекомендации предназначены для улучшения времени отклика HTTP и предотвращения перегрузки. [rfc2616]

        RFC 2616 рекомендует ограничить количество одновременных подключений к одному серверу двумя. Например, если у нас на странице много изображений и мы хотим добиться большего параллелизма, мы можем разбить изображения на несколько (два, четыре) доменных имени. Это называется разделением домена. Текущие веб-браузеры игнорируют эту рекомендацию и открывают до 6 подключений, поэтому сегментация не так важна, как раньше. Производительность может даже ухудшиться, поскольку каждый сегментированный домен должен быть разрешен с помощью DNS.

        Сеть распространения контента CDN

        CDN — это специальная служба хостинга для статического контента. Преимущество в том, что выбран географически близкий сервер, к тому же контент находится на отдельном домене,поэтому все файлы cookie не нужно отправлять снова и снова с каждым запросом.

        В прошлом обычный человек обычно мало что с ним делал, он был очень дорогим и практически бесполезным для такой домашней веб-разработки. Но если вы используете Google App Engine или Microsoft Azure, у вас, вероятно, есть CDN в этой облачной службе.

        Кэширование

        Почти все в Интернете может запускать кеширование в той или иной форме. Будь то веб-браузер или прокси-серверы, которым уделяется наибольшее внимание в следующем обзоре, но веб-сервер или веб-приложение также могут кэшировать.

        Кэширование в веб-приложении — дело программиста, а не администратора. Кэширующий сервер memcached.

        можно использовать

        Веб-сервер Apache поддерживает кэширование контента с помощью модуля mod_cache. Этот модуль действует как кэширующий обратный прокси-сервер, как если бы он находился перед веб-сервером.

        Кэширование в HTTP/1.1

        Заголовки данных, относящиеся к кэшированию

        Последнее изменение: среда, 17 декабря 2003 г., 08:57:03 по Гринвичу дата последнего изменения
        ETag: e6eee- 2bfa -3cea94a6415c0 уникальный хэш для статических данных, сгенерированный веб-сервером
        Expires: устанавливает дату, после которой страница должна быть запрошена снова
        Cache-Control: max-age= Устанавливает время в секундах после доставки (заголовок Date), в течение которого ответ действителен. Если указаны и Expires, и Cache-Control: max-age, используется Cache-Control. Его также можно использовать в запросе.

        Заголовки данных и запросов связаны с кэшированием

        If-Match Значение ETag зависит от запросов PUT, мы можем реализовать что-то вроде CAS (Compare and Swap)
        Last- Modified/ If-Modified-Since последнее изменение, условный запрос в зависимостипри последнем изменении
        ETag/If-None-Match ETag, условный запрос в зависимости от ETag
        Cache-Control : max-age=0 все кэширующие прокси на пути должны подтвердить, что у них установлена ​​текущая версия
        Cache-Control: no-cache все кеширующие прокси должны загружать текущую версию.

        Для Apache по умолчанию ETag вычисляется на основе индексного дескриптора, времени модификации и размера файла в байтах. По сравнению с Last-Modified, он может меняться после каждого запроса (Last-Modified имеет гранулярность в 1 секунду)

        .

        Если у нас есть несколько серверов, каждый из них, вероятно, вычисляет разные ETag для одного и того же файла. Решение в таком случае — не использовать ETag.

        Пример ETag и Last-Modified:

        Когда браузер обнаруживает, что страница устарела, он может либо снова загрузить ее в обычном режиме, либо выполнить запрос диапазона в заголовках Last-Modified и/или ETag.

        Литература

        «Если браузер должен сделать запрос HTTP GET к определенному URL-адресу, а в этот самый момент запрос к тому же URL-адресу выполняется в другом окне того же браузера, браузер ЖДЕТ и будет сделать этот запрос только после завершения текущего.»

        Разделение домена

        • Почему разделение доменов — это плохая новость для мобильных устройств и пользователей
          • текущая статья, объясняет идею шардинга домена и демонстрирует, что сегодня это не так плохо, как раньше
        кэширование
        • блог mnot: ETags, ETags, ETags
          • разглагольствования об ETags, введение в проблему, чтобы указать, что ETags не обречены на провал
        • if-modified-since vs if-none-match
          • вопрос по SO относительно кэширования и условных запросов
        • Оптимизация кэширования
          • статья с портала Google с инструкциями по ускорению работы вашего сайта
        • Рекомендации по ускорению работы в ИнтернетеСайт
          • Статья на веб-сайте с похожими советами, на этот раз от Yahoo!
        • Руководство по кэшированию HTTP-сервера Apache версии 2.4
          • страница в документации Apache, в основном описывает модуль mod_cache, реализующий кэширование HTTP/1.1 (то же самое с условными запросами)
        • Упаковка JS/CSS для минимизации количества запросов и случайных вредоносных алгоритмов – Бен Каменс
          • блог, описывающий, как автор работал над ускорением сайта KhanAcedema.org
          • они устанавливают чрезвычайно долгий срок действия для статического контента, и когда они развертывают новую версию, они просто меняют все URL-адреса (версии файлов являются частью имен)
          • проблема номер три, которую вы описываете, характерна для Google App Engine
            • Файл CSS не обновляется при развертывании (Google AppEngine)
              • ответ на SO от автора этого блога, объясняющий проблему номер 3 немного по-другому
        • Ускорение загрузки страниц ISu
          • блог о кэшировании в ИС MU

        Безопасность

        Социальная инженерия

        В этом типе атаки злоумышленник пытается манипулировать жертвой, чтобы она сообщила злоумышленнику некоторую информацию (пароль) или выполнила какое-либо действие (установила вредоносное ПО на свой компьютер).

        Литература

        Подделка межсайтовых запросов

        Пример. Злоумышленник атакует небезопасную страницу, которую посещает жертва, и внедряет следующий HTML

        В тот момент, когда жертва заходит на взломанную страницу, загружаются ссылки на домашнюю страницу ИБ. Прибыль.

        Если пользователь в данный момент не вошел в IS, …

        Его можно улучшить, несколько лет назад нюхание истории css (или взлом истории css) работало, сегодня это было решено.

        Решение состоит в том, чтобы добавить параметр в адреса и скрытое поле с токеном в формы (тип ввода=скрытое имя=_значение=xyz). Злоумышленник не имеет возможности обнаружить токен. Если у него есть способ, пусть будет такему не обязательно выполнять CSRF, но он может причинить другой вред и многое другое.

        Междоменный AJAX

        Литература

        • Памятка по предотвращению подделки межсайтовых запросов (CSRF)
          • описывает как решения, которые не работают, так и решения, которые работают
        • Загрузка произвольных файлов между доменами Redux
          • блог о том, как использовать междоменный AJAX для CDRF

        Межсайтовый скриптинг (XSS), внедрение SQL

        XSS, внедрение SQL и т. д. они работают по принципу, что в сети мы используем вместе множество технологий, форматов и языков, и то, что в одном контексте является либо безобидным мусором, либо легитимным текстом, в другом контексте является абсолютной катастрофой.

        Такой «rm -rf /» является безвредным HTML, безвредной строковой константой JavaScript, безвредным SQL, вредоносной командой оболочки. Если эта строка каким-то образом попадет в оболочку, у нас проблема

        настоящая проблема: функция фильтра в PHP, не понимающая UTF-16.

        «И хотя фильтр не понимает UTF-16, базовая структура понимает, поэтому контент нормализуется и интерпретируется точно так же, как и все остальное, что позволяет продолжить выполнение запроса без фильтрации». [Тайлер Ларсон, security.stackexchange.com]

        Литература

        • Безопасность модов
          • инструмент мониторинга и брандмауэр веб-приложений
        • Как анонимный пользователь использовал UTF-16 ASCII, чтобы обмануть экранирование PHP?
          • запрос на сайте security.stackexchange.com
        • xkcd: Подвиги мамы
          • известный комикс XKCD о внедрении SQL
        • Использование уязвимости межсайтового скриптинга на Facebook
          • описание реальной XSS-уязвимости на Facebook

        SSL-атаки

        Отключение SSL

        Просмотр через HTTPS (почти) всегда начинается с HTTP. Атака работает по принципу «Человек посередине». Мы действуем как «прокси», который связывается с сервером с помощью HTTPS ион переводит весь трафик атакуемому пользователю в HTTP.

        Литература
        • Новые хитрости для победы над SSL на практике
          • презентация, план:
          • «basicConstraints: CA=FALSE» (большое событие в 2002 г.)
          • HTTPS и пользовательский интерфейс, веб-сайты и просмотр веб-страниц
            • принцип атаки SSL-stripping заключается в том, чтобы обмануть пользователя
          • Зачистка SSL, наконец
            • улучшение: мы перехватываем запрос фавикона и вместо него вставляем замок
          • атака омографом; злоупотребление ИДИ
            • «В 2005 году Эрик Йохансон зарегистрировал paypal.com, в котором используется символ, похожий на букву «а» Cryllic, и отображается как paypal.com»
          • комбинация атаки SSL-stripping и омографа
            • https://www.gmail.com/accounts/ServiceLogin
            • https://www.gmail.com∕accounts∕ServiceLogin?!f.ijjk.cn
              • см. https://bugzilla.mozilla.org/show_bug.cgi?id=301694
          • информация из видео, он проверил это, запустив шлюз TOR
        • Программное обеспечение >> sslstrip
          • Скрипт Python, который в сочетании с arpspoof может выполнять атаку «Человек посередине» на TLS

        Дополняющая атака оракула

        Вы можете найти хорошее объяснение во вступительном тексте к задаче 4 в 4-м блоке заочного семинара по компьютерным наукам.

        Атака счастливчиков тринадцати

        Текущие события, опубликовано в феврале 2013 г.

        Литература

        ЗВЕРЬ

        Теоретически давно было известно, что SSL 3.0 и TLS 1.0 и более ранние версии небезопасны. Авторам этой атаки удалось практически реализовать работающий эксплойт для HTTPS.

        «CBC IV для каждой записи, кроме первой, является последним блоком зашифрованного текста предыдущих записей. Таким образом, шифрование не защищено от злоумышленников, которые могут адаптивно выбирать открытый текст; см. второе сообщение электронной почты, воспроизведенное ниже [Дата : пятница, 8 февраля 2002 г.]. Обратите внимание, что для большинства приложенийпротоколы, такие атаки практически невозможны.»

        Это атака по известному открытому тексту, а точнее атака по выбранным границам.

        Лучший способ защитить себя — перейти на TLS/1.1. К сожалению, TLS/1.1 пока плохо поддерживается браузерами. Поэтому рекомендуется хотя бы изменить предпочитаемый алгоритм шифрования на RC4, который не имеет хорошей репутации среди криптологов (=руки прочь;), но устойчив к BEAST.

        Литература

        • Tor и SSL-атака BEAST
          • доступное объяснение принципа с кратким введением в криптографию, ссылками на Википедию, умозрительным анализом влияния на TOR, если бы TOR выглядел немного иначе, и даже иначе
        • Атака выбранной границы
          • интерактивный пример (JavaScript) и объяснение атаки Choosen-boundary
        • Тай Дуонг и Джулиано Риццо А вот и The XOR Ninjas
          • научная статья авторов атаки, удобные картинки, можно погуглить ПДФ
        • ЗВЕРЬ
          • блог одного из авторов BEAST, описывает процесс проектирования и реализации атаки с точки зрения человека
        • Смягчение атаки BEAST на TLS
          • практическое руководство по лучшей защите TLS/1.0 от BEAST
        • Ошибка 665814 — (CVE-2011-3389) Атака Rizzo/Duong с выбранным открытым текстом (BEAST) на SSL/TLS 1.0 (с помощью веб-сокетов -76)
          • Ошибка для Mozilla, ссылка ведет к комментарию, в котором некий поклонник Xuelei предлагает, как обращаться с BEAST в намерениях TSL/1.0 таким образом, чтобы не нарушать столько существующих реализаций, как другие предложения
        • Шифры OpenSSL(1)
          • список шифров, доступных в TLS/1.0

        ПРЕСТУПНОСТЬ

        Еще одна атака на TLS от тех же людей, что и BEAST, несколько похожа внешне.

        Как и в случае с BEAST, мы предполагаем, что злоумышленник может прослушивать трафик (открытый WiFi) и может отправлять свои запросы на сервер (например,некоторые XSS или преодолели ту же политику происхождения.)

        В отличие от BEAST, нам не требуется определенная версия TLS, вместо этого мы предполагаем, что веб-браузер выполняет сжатие заголовков DEFLATE (gzip). Если эти предварительные условия соблюдены, злоумышленник может украсть файл cookie сеанса.

        Атакующий получит доступ к различным адресам на HTTPS-сервере из нашего браузера и будет следить за изменением размера заголовка запроса, сгенерированного браузером. Из этого он может догадаться, насколько введенные им данные похожи на другие данные, которые уже есть в шапке, особенно на нашу сессионную куку. Злоумышленник может систематизировать догадку по одному символу за раз.

        Урок: не сжимайте заголовки (в настоящее время), возможно, сжимайте с помощью чего-то другого, кроме DEFLATE (будущее, SPPDY и HTTP/2.0)

        Литература

        • ПРЕСТУПЛЕНИЕ — Как победить преемника ЗВЕРЯ?
          • вопрос по SE с очень содержательным и понятным описанием атаки
        • ПРЕСТУПНАЯ АТАКА
          • слайды из презентации, где авторы впервые представили атаку CRIME
        • Как вы можете защитить себя от CRIME, преемника BEAST?
          • блог о ЗВЕРЕ

        Атаки в обход TLS

        Все ранее описанные атаки основаны на уязвимостях алгоритмов шифрования. Однако на практике атака обычно основывается на том, что администратор применяет шифрование не так, как предполагалось авторами.

    Читайте также:  Как забиндить смену языка на одну клавишу windows 10
    Поделиться с друзьями
    ОС советы