- Настройка HTTPS-серверов
- Оптимизация HTTPS-сервера
- Цепочки SSL-сертификатов
- Единый HTTP/HTTPS сервер
- Выбор HTTPS-сервера по имени
- SSL-сертификат с несколькими именами
- Указание имени сервера
- Совместимость
- Как настроить сервер 443
- Что такое порты в Windows
- Что такое порт 443?
- Почему порт может не работать?
- Как открыть порт 443 на windows 7, 8.1 и 10
- Как открыть порт 443 на windows 7 через командную строку
- Как быть если порт закрыт?
Настройка HTTPS-серверов
Чтобы настроить HTTPS-сервер, необходимо включить параметр ssl на слушающих сокетах в блоке server, а также указать местоположение файлов с сертификатом сервера и секретным ключом:
Сертификат сервера является публичным. Он посылается каждому клиенту, соединяющемуся с сервером. Секретный ключ следует хранить в файле с ограниченным доступом (права доступа должны позволять главному процессу nginx читать этот файл). Секретный ключ можно также хранить в одном файле с сертификатом:
при этом права доступа к файлу следует также ограничить. Несмотря на то, что и сертификат, и ключ хранятся в одном файле, клиенту посылается только сертификат.
С помощью директив ssl_protocols и ssl_ciphers можно ограничить соединения использованием только “сильных” версий и шифров SSL/TLS. По умолчанию nginx использует “ ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ” и “ ssl_ciphers HIGH:!aNULL:!MD5 ”, поэтому их явная настройка в общем случае не требуется. Следует отметить, что значения по умолчанию этих директив несколько раз менялись.
Оптимизация HTTPS-сервера
SSL-операции потребляют дополнительные ресурсы процессора. На мультипроцессорных системах следует запускать несколько рабочих процессов, не меньше числа доступных процессорных ядер. Наиболее ресурсоёмкой для процессора является операция SSL handshake, в рамках которой формируются криптографические параметры сессии. Существует два способа уменьшения числа этих операций, производимых для каждого клиента: использование постоянных (keepalive) соединений, позволяющих в рамках одного соединения обрабатывать сразу несколько запросов, и повторное использование параметров SSL-сессии для предотвращения необходимости выполнения SSL handshake для параллельных и последующих соединений. Сессии хранятся в кэше SSL-сессий, разделяемом между рабочими процессами и настраиваемом директивой ssl_session_cache. В 1 мегабайт кэша помещается около 4000 сессий. Таймаут кэша по умолчанию равен 5 минутам. Он может быть увеличен с помощью директивы ssl_session_timeout. Вот пример конфигурации, оптимизированной под многоядерную систему с 10-мегабайтным разделяемым кэшем сессий:
Цепочки SSL-сертификатов
Некоторые браузеры могут выдавать предупреждение о сертификате, подписанном общеизвестным центром сертификации, в то время как другие браузеры без проблем принимают этот же сертификат. Так происходит потому, что центр, выдавший сертификат, подписал его промежуточным сертификатом, которого нет в базе данных сертификатов общеизвестных доверенных центров сертификации, распространяемой вместе с браузером. В подобном случае центр сертификации предоставляет “связку” сертификатов, которую следует присоединить к сертификату сервера. Сертификат сервера следует разместить перед связкой сертификатов в скомбинированном файле:
Полученный файл следует указать в директиве ssl_certificate:
Если сертификат сервера и связка сертификатов были соединены в неправильном порядке, nginx откажется запускаться и выдаст сообщение об ошибке:
поскольку nginx попытается использовать секретный ключ с первым сертификатом из связки вместо сертификата сервера.
Браузеры обычно сохраняют полученные промежуточные сертификаты, подписанные доверенными центрами сертификации, поэтому активно используемые браузеры уже могут иметь требуемые промежуточные сертификаты и не выдать предупреждение о сертификате, присланном без связанной с ним цепочки сертификатов. Убедиться в том, что сервер присылает полную цепочку сертификатов, можно при помощи утилиты командной строки openssl , например:
При тестировании конфигураций с SNI необходимо указывать опцию -servername , так как openssl по умолчанию не использует SNI.
В этом примере субъект (“s”) сертификата №0 сервера www.GoDaddy.com подписан издателем (“i”), который в свою очередь является субъектом сертификата №1, подписанного издателем, который в свою очередь является субъектом сертификата №2, подписанного общеизвестным издателем ValiCert, Inc., чей сертификат хранится во встроенной в браузеры базе данных сертификатов (которая в тёмном чулане хранится в доме, который построил Джек).
Если связку сертификатов не добавили, будет показан только сертификат сервера №0.
Единый HTTP/HTTPS сервер
Можно настроить единый сервер, который обслуживает как HTTP-, так и HTTPS-запросы:
До версии 0.7.14 SSL нельзя было включить выборочно для отдельных слущающих сокетов, как показано выше. SSL можно было включить только для всего сервера целиком, с помощью директивы ssl, что не позволяло настроить единый HTTP/HTTPS сервер. Для решения этой задачи был добавлен параметр ssl директивы listen. Поэтому использование директивы ssl в современных версиях не рекомендуется.
Выбор HTTPS-сервера по имени
Типичная проблема возникает при настройке двух и более серверов HTTPS, слушающих на одном и том же IP-адресе:
В такой конфигурации браузер получит сертификат сервера по умолчанию, т.е. www.example.com , независимо от запрашиваемого имени сервера. Это связано с поведением протокола SSL. SSL-соединение устанавливается до того, как браузер посылает HTTP-запрос, и nginx не знает имени запрашиваемого сервера. Следовательно, он лишь может предложить сертификат сервера по умолчанию.
Наиболее старым и надёжным способом решения этой проблемы является назначение каждому HTTPS-серверу своего IP-адреса:
SSL-сертификат с несколькими именами
Существуют и другие способы, которые позволяют использовать один и тот же IP-адрес сразу для нескольких HTTPS-серверов. Все они, однако, имеют свои недостатки. Одним из таких способов является использование сертификата с несколькими именами в поле SubjectAltName сертификата, например www.example.com и www.example.org . Однако, длина поля SubjectAltName ограничена.
Другим способом является использование wildcard-сертификата, например *.example.org . Такой сертификат защищает все поддомены указанного домена, но только на заданном уровне. Под такой сертификат подходит www.example.org , но не подходят example.org и www.sub.example.org . Два вышеуказанных способа можно комбинировать. Сертификат может одновременно содержать и точное, и wildcard имена в поле SubjectAltName, например example.org и *.example.org .
Лучше поместить сведения о файле сертификата с несколькими именами и файле с его секретным ключом на уровне конфигурации http, чтобы все серверы унаследовали их единственную копию в памяти:
Указание имени сервера
Более общее решение для работы нескольких HTTPS-серверов на одном IP-адресе — расширение Server Name Indication протокола TLS (SNI, RFC 6066), которое позволяет браузеру передать запрашиваемое имя сервера во время SSL handshake, а значит сервер будет знать, какой сертификат ему следует использовать для соединения. Сейчас SNI поддерживается большинством современных браузеров, однако может не использоваться некоторыми старыми или специализированными клиентами.
В SNI можно передавать только доменные имена, однако некоторые браузеры могут ошибочно передавать IP-адрес сервера в качестве его имени, если в запросе указан IP-адрес. Полагаться на это не следует.
Чтобы использовать SNI в nginx, соответствующая поддержка должна присутствовать как в библиотеке OpenSSL, использованной при сборке бинарного файла nginx, так и в библиотеке, подгружаемой в момент работы. OpenSSL поддерживает SNI начиная с версии 0.9.8f, если она была собрана с опцией конфигурации Начиная с OpenSSL 0.9.8j эта опция включена по умолчанию. Если nginx был собран с поддержкой SNI, то при запуске nginx с ключом “-V” об этом сообщается:
Однако если nginx, собранный с поддержкой SNI, в процессе работы подгружает библиотеку OpenSSL, в которой нет поддержки SNI, nginx выдаёт предупреждение:
Совместимость
- Статус поддержки SNI отображается по ключу “-V” начиная с версий 0.8.21 и 0.7.62.
- Параметр ssl директивы listen поддерживается начиная с версии 0.7.14. До версии 0.8.21 его можно было указывать только совместно с параметром default .
- SNI поддерживается начиная с версии 0.5.23.
- Разделяемый кэш SSL-сессий поддерживается начиная с версии 0.5.6.
- Версия 1.9.1 и более поздние: протоколами SSL по умолчанию являются TLSv1, TLSv1.1 и TLSv1.2 (если поддерживается библиотекой OpenSSL).
- Версия 0.7.65, 0.8.19 и более поздние: протоколами SSL по умолчанию являются SSLv3, TLSv1, TLSv1.1 и TLSv1.2 (если поддерживается библиотекой OpenSSL).
- Версия 0.7.64, 0.8.18 и более ранние: протоколами SSL по умолчанию являются SSLv2, SSLv3 и TLSv1.
- Версия 1.0.5 и более поздние: шифрами SSL по умолчанию являются “ HIGH:!aNULL:!MD5 ”.
- Версия 0.7.65, 0.8.20 и более поздние: шифрами SSL по умолчанию являются “ HIGH:!ADH:!MD5 ”.
- Версия 0.8.19: шифрами SSL по умолчанию являются “ ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM ”.
- Версия 0.7.64, 0.8.18 и более ранние: шифрами SSL по умолчанию являются
“ ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP ”.
Источник
Как настроить сервер 443
Добрый день уважаемые читатели и гости блога, продолжаем изучать безопасность в операционных системах Microsoft, в прошлый раз мы решили проблему с долгим поиском обновлений Windows 7, установили их и теперь система более защищена от внешнего мира, в сегодняшней же стать я затрону такую тему, как что такое порты и как открыть порт 443 в windows, за минуту. Данный материал будет полезным для системных администраторов, так и для разработчиков.
Что такое порты в Windows
Давайте я попробую по простому объяснить, что такое порт. Представим себе большой микрорайон с большим количеством многоэтажных домов, в каждом из них есть квартиры с жильцами, общим количеством 65 536, каждая квартира имеет свой уникальный, порядковый номер. Теперь представим, что вам необходимо попасть к другу Васе, который живет в 1443 квартире, вы что делаете идете в нужный дом с таким номером квартиры, далее вам нужно заскочить к Марине, которая живет в 80 квартире, а теперь представьте, что вместо вас это ваш компьютер и вместо ваших друзей, это порты. Каждый такой порт уникален и отвечает за ответ пользователю по определенной службе, например,
- 80 — это http служба, которая отвечает вам при запрашивании страниц сайта
- 1433 — это порт службы SQL
- 443 — https зашифрованный вариант http, с использованием SSL сертификатов.
Из выше описанного, порты бывают двух типов:
- Жестко забронированные под определенные службы. Это порты которые используются исключительно определенными программами. Диапазон таких портов от 0-1024, но есть и выше, тот же 1433 у SQL или 55777 Vipnet.
- Динамические, используемые для повседневных вещей пользователя. Это диапазон после 1024, и используют их, например, в таком контексте: скачиваете файл, ваш компьютер использует один порт, смотрите online фильм, ваш компьютер использует второй порт и так далее. Как только передача данных заканчивается, порт освобождается.
Порты еще очень часто ассоциируют с сокетами, о которых я уже рассказывал, советую посмотреть.
Что такое порт 443?
Как я и писал выше, чаще всего он используется в двух вещах, первая это конечно подавляющее количество сайтов, работающих по https протоколу на 443 порты, и второй момент это в шифрованных каналах передачи данных. Лет 5 назад, его использовали в основном интернет банки и интернет магазины, где расплачивались электронными картами, сейчас же поисковые системы, стараются и подталкивают, всех вебмастеров, перевести свои ресурсы именно на 443 соединение.
Почему порт может не работать?
Давайте рассмотрим вопрос. по каким причинам может быть закрытым порт 443.
- По умолчанию, когда вы только установили Windows, в ней по умолчанию все порты на ружу закрыты из политики безопасности и это правильно. Их блокирует встроенная программа брандмауэр Windows или по простому файрвол.
- Администратор сети у вас мог заблокировать нужный порт, так как у него есть такие механизмы как групповая политика или доступ к прокси серверу.
- 443 сокет заблокирован на маршрутизаторе
Если 443 порт закрыт, то это означает, что:
- Если на вашем компьютере есть программа или утилита подключающаяся к 443 порту, не сможет этого сделать
- Компьютер из вне не сможет получить доступ к сервису, расположенному вас, например, веб сайту.
Как открыть порт 443 на windows 7, 8.1 и 10
Я расскажу как открыть порт 443 на windows 7, но все описанное ниже, будет актуально и делаться один в один и на современных операционных системах Windows 10 и серверных редакциях. Порядок действий:
- Нажмите Win+R и введите firewall.cpl, это быстрый вызов оснастки брандмауэр, полный список команд смотрите тут.
- Либо же вы можете использовать классический путь, это открыть кнопку «Пуск» и перейти в панель управления Windows
- Выбираем в правом верхнем углу, классический вид с крупными значками и щелкаем по значку брандмауэра.
- Если вам нужно быстро протестировать 443 соединение, то я вам советую полностью отключить брандмауэр, особенно если подпирает время, для этого открываем соответствующий пункт.
Для отключения, выберите соответствующие пункты, по сути теперь будут открыты все порты Windows 7. После тестирования не забываем все включить.
А теперь правильный вариант, перейдите в дополнительные параметры фаэрвола. Вы попадете в повышенный режим безопасности, именно тут можно открыть порт 443 windows.
- Переходим в «Правила для входящих подключений», если нужно чтобы к вам подключались по 443 соединению, если нужно, чтобы вы могли подключаться, при условии, что он закрыт, то выберите «Правила исходящих подключений». Щелкаем правым кликом и выбираем «Создать правило»
- Тут нам интересны два пункта, первый это «Для программы», удобен тем, что вы разрешаете конкретной программе все подключения через фаэрвол, из недостатков, то что если у нее есть зависимые программы, то работать может не полностью или вообще не будет, второй вариант для порта, удобен тем, что единожды открыв нужный порт, вам не нужно думать какая для какой программы вам его разрешать. Простой пример вы используете 80 сокет, сначал он работал на Apache, потом вы его заменили на IIS, в брандмауэре ничего не пришлось менять.
- Если выбрали второй вариант, то указываем протокол TCP или UDP (для большей безопасности)
- Если выбрали первый пункт с программой, то вам необходимо указать до нее путь, до файла exe.
- Указываем действие, в данном случае «разрешить», так как на нужно открытие порта 443.
- Далее указываем на какой сетевой профиль будет оно применяться, доменный это для локальных сетей организаций, частный для домашних сетей, а публичный, для внешнего мира.
- Все задаем имя для создаваемого правила и нажимаем готово.
Если вы допустили ошибку или, что-то поменялось, то вы всегда можете изменить настройки через свойства.
Как открыть порт 443 на windows 7 через командную строку
Когда вы набьете руку и вам надоест щелкать однотипные окна в брандмауэре Windows или вы захотите, все автоматизировать, то вам в этом поможет, командная строка запущенная с правами администратора. Вам необходимо выполнить такую команду:
- netsh advfirewall firewall add rule — добавление правила
- name — имя
- protocol — тип протокола
- localport — открываемый порт
- action — действие
- dir — тип соединения (входящий или исходящий)
Проверяем добавление нашего правила.
Как быть если порт закрыт?
Сейчас мы говорим. про ситуации когда 443 соединение блокируется системным администратором или интернет провайдером. В обоих случаях необходимо связываться с вышестоящими инстанциями и рассказывать, что вам необходимо открыть открыть порт 443 windows, своими силами вы уже не обойдетесь. Еще очень частым вопросом, бывает, как проделать все те же действия на сетевых устройствах, однозначного ответа нет, так как у всех это делается по разному, изучайте документацию. По своей практике могу точно сказать, что провайдеры любят лочить 25 SMTP подключения, чтобы спам не рассылали. Уверен, что вы теперь знаете, как все открывать и сможете это использовать на практике.
Источник