- Описание секции sslinsecurerenegotiation в apache 2.2
- Ssl virtual host на apache 2.2 mod_ssl и самоподписанные сертификаты
- Авторизация по клиентским сертификатам в apache 2.2 не работает
- Аутентификация веб сервера
- Описание атрибута
- Атрибут
- Пример значения
- Изменение файла виртуального хоста apache ssl по умолчанию
- Как установить ssl сертификат на apache? |
- Настройка ssl сертификата для apache
- Онлайн курс “sre практики и инструменты”
- Парольная фраза dilemma
- Помогла статья? подписывайся на telegram канал автора
- Предварительные требования
- Рекомендуемые настройки mod_ssl
- Создаем сертификат веб-сервера
- Создание сниппета конфигурации apache с надежными настройками шифрования
- Способ 1: самоподписанный сертификат (только для тестирования)
- Способ 2: сертификат, подписанный доверенным ca (рекомендуется)
- Установка mod_ssl в apache
- Установка сертификата
- Шаг 2 — настройка apache для использования ssl
- Шаг 3 — настройка брандмауэра
- Шаг 4 — активация изменений в apache
- Шаг 6 – переключение на постоянное перенаправление
- Заключение
- Заключение второй части
Описание секции sslinsecurerenegotiation в apache 2.2
Теперь, давайте я расскажу, для чего нам нужна секция SSLInsecureRenegotiation, и стоит ли вообще Вам ее использовать.
Данная секция нужна для включения поддержки старых протоколов SSL и TLS, так как все новые Web сервера и браузеры работают на более новых версиях. Потому что была обнаружена уязвимость, которая позволяла хакеру, вклинится в данное соединение.
Казалось бы, да новые версии, но тогда все должны перейти на них, так оно и есть, но что используете Вы, когда пробуете авторизацию по клиентскому сертификату. Скорей всего Ваша проблема выглядит следующим образом. Вы сгенерировали сертификаты, настроили apache, установили в браузер сертификат (допустим в FireFox или Opera)
, и у Вас все якобы заработало, но когда речь доходит до Internet Explorer у Вас, почему-то не работает. Вы установили сертификат в хранилище «Личное», ну в общем как положено, а все равно не работает. А причина в том, что Вы скорей всего используете старую версию операционной системы, имеется в виду без обновления безопасности, так как Internet Explorer использует локальное хранилище сертификатов ОС, а другие браузеры используют собственное хранилище.
А если у Вас и в этих браузерах не работало, то посмотрите, какую версию Вы используете. Точно не знаю, но по-моему, все версии FireFox до 3.5 работают на старых протоколах. Это относится и к Internet Explorer, версии до 8 не будут работать с клиентскими сертификатами, если Вы используете последние версии Apache и SSL.
Теперь вернемся к секции, если Вы хотите быть уверенным в том, что Вы используете механизм авторизации, который на сегодняшний день является безопасным, то данную секцию писать не нужно, а необходимо обновить ОС и браузеры. Но в этом случае, если у Вас уже есть большая аудитория Вашего ресурса, существует вероятность того, что они перестанут иметь доступ к Вашему ресурсу, из-за тех же проблем что и Вы.
Поэтому в данном случае можно прописать данный параметр, выставив его в ON и одновременно написать своим пользователям, какие требования к ОС и приложениям будут введены с какого-то времени, для того чтобы они обновились, или если у Вас корпоративный ресурс, то попросить админов сделать это.
Ssl virtual host на apache 2.2 mod_ssl и самоподписанные сертификаты
SSL virtual host на Apache 2.2 mod_ssl и самоподписанные сертификаты
Начнем с перечисления раскрываемых в заметке тезисов
1. В Сети бродят слухи о том, что виртуальный SSL хост на Apache невозможен.
Name-based Virtual Host под SSL не возможен, но он нам и не нужен.
Шифрованные HTTPS соединения прекрасно поддерживаются средствами GNU TLS, www.gnu.org/software/gnutls, ru.wikipedia.org/wiki/GnuTLS, wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
1.1. А зачем нам Name-based Virtual Host под SSL?
Затем, чтобы поддерживать три или или сто пятьдесят https web-серверов одной копией Апача.
Без того, чтобы иметь по отдельному IP и отдельному запущенному Апачу на каждый https web-сервер, который вам нужен.
1.2. Почему Apache 2.2?
Потому, что пора.
2. А зачем нам SSL?
А затем, что любой ваш сосед по колокейшену вынюхает, например, абсолютно все ваши пароли от всего к чему только вы или ваши юзеры будут иметь несчатье обратиться, пока его снифер запасает траф.
Ettercap NG ( ettercap.sourceforge.net ), рекомендую.
Если у провайдера/хостера есть есть дисциплина выявления и реакции на arp-spoofing ( xgu.ru/wiki/ARP-spoofing ), — он прихлопнет сниффера в обозримый, но бесполезный срок, — ваши пароли уже у «забаненного».
Arp-spoofing позволяет «прорезать» коммутаторы и слушать весь проходящий через них траф, а не только траф локальной подсети, доступной promiscuous mode интерфейсу.
Борьба с arp-spoofing идет двумя путями:
2.1. VLAN коммуторы настраиваются провайдером так, чтобы минимизировать объем доступных спуферу подсеток. Тут что ваше (когда вы атакуете), то ваше. Большой западный хостер плюет на arp-spoofing, полагаясь на сделанную настройку «железа» и не следит за его проявлениями.
2.2. В этом случае работа СОРМ невозможна. «Коробочка» теряет траф, не «видит» бОльшую его часть.
2.3. Поэтому на Руси спуферу доступен весь траф, проходящий через коммутаторы площадки, а провайдер фильтрует спуфинг на санкционированный и самопальный. Самопальщиков банят.
2.4. Атакующий может купить минимальный контракт на интересующей его площадке, запустить, например, Ettercap NG и наслаждаться результатами ночь или выходные, пока утром понедельника или любым другим утром «админы-супербизоны» не отрегируют на свистки из логов.
2.5. Это в лучшем случае. А в худшем атакующий будет слушать площадку вечно. Ибо дисциплина выявления спуфинга существует не у каждого хостера.
2.6. Если вы и атакующий в одном VLAN’е — arp-spoofing не нужен. Достаточно слушать VLAN, не засвечиваясь спуфингом. Решается так: «Вась, мне высоко/низко к серверу лазать. Вась я хочу в другую стойку ближе/дальше к кондиционеру. Я мерзну/сервер греется. Давай переставим? Я быстро патчи передерну! Все равно три утра, никто даже не заметит. Пиво — с меня.» СерверА, как правило, подписаны фломастерами или выявляются наводящими вопросами под воблу.
Опасность выявления promiscuous mode интерфейсов, если пров/хостер сканирует площадку на предмет их выявления, купируется кусачками — перерезается один проводок RJ-45 фишки и никто никогда не узнает, что ваша сетевая карта находится в promiscuous mode.
Короче, спасения нет.
А СОРМ — знает все. Просто имейте это ввиду. Все, что вам только может прийти в Сети в голову — при минимальном интересе СОРМ к вашей персоне — имеется в распоряжении кого угодно.
Живите и помните — любой заход в Сеть через нешифрованное соединение — это как кейлоггер с бесконечным объемом памяти.
Есть еще и обычай «пить пиво в серверной». Любой может завести себе «знакомого админа» и обснифать площадку «за пиво», прямо из прилегающего к «аквариуму» дата-центра административного помещения ночной смены саппорта.
2.7. Лично меня смешат «интернет-магазины», работающие через HTTP.
3. Единственный способ защитить свои «веб-морды» и «веб-морды» своей организации (CRM, groupware, web-mail, «админки» etc. etc.) — пересадить их за HTTPS.
4. И покончим с вводной частью, чтобы перейти уже к скриптам и конфигам.
Для установления HTTPS соединения нужен SSL сертификат.
4.1. SSL сертификат можно сгенерировать самостоятельно. Тогда браузеры будут давать предупреждения при заходе на защищенную таким сертификатом страницу. Внутри организации или сообщества вопрос решается директивной установкой ваших самопальных сертификатов в браузеры юзеров или директивным требованием доверять сайту и сертификату невзирая на предупреждения браузера.
4.2. SSL сертификат можно купить. Тогда браузеры не будут ругаться (при правильной покупке сертификата (валидный CSR!) и настройке Апача! а то все равно будут ругаться, не глядя на потраченные деньги).
Цена вопроса от 400 руб. в год за RapidSSL сертификат, подтверждющий, что сертификат на домен/сервер выдан лицу/организации, являющейся по данным WHOIS владельцем домена, до 30000-40000р. в год за «брендовый» сертификат, удостоверяющий существование организации, лица, бизнеса, физического адреса офиса и т.д. и т.п.
5. Зачем могут понадобиться самоподписанные сертификаты?
Как бы браузер ни ругался на «подозрительный сертификат» — соединение все равно зашифровано. Задача выполнена, сниферы отдыхают.
Осталось сохранить лицо в глазах новичков и серферов, впервые заходящих на защищенную страницу, купив сертификат у организации, которая «прошита» в браузере из коробки.
Но и в случае покупки «брендового» сертификата БЕЗ самоподписанного сертификата вам НЕ обойтись. Потому, что опыт его выпуска даст вам знания для генерации ключа сервера и CSR файла.
Вам нужно отладить сервер и научиться генерировать ключи веб-серверов и CSR файлы, без которых сколько денег ни отдай — браузеры, в самых оскорбительных выражениях, будут сообщать о не доверенном соединении.
6. Процесс покупки сертификата (или генерации самоподписанного сертификата) выглядит так:
Средствами OpenSSL вы создаете ключ веб-сервера (без него Апач НЕ запустится!), «самопальный» сертификат сервера и CSR файл (Certificate Signing Request).
Содержимое CSR файла передается продавцу сертификата, котрый на основе заключающихся в нем данных выпустит для вас коммерческий сертификат, на который браузеры не будут ругаться.
Файл ключа веб-сервера и CSR файл должны содержать валидную информацию о защищаемом сервере. Если данные в них не корректны — ругань браузера не прекратится никогда, несмотря на плаченные деньги.
Коммерческий сертификат, выданный вам по CSR запросу, будет работать в паре с созданным вами ключом веб-сервера и только с ним.
Итак перед вами задача: научиться генерировать ключи веб-сервера и выпускать самоподписанные сертификаты.
В момент, когда браузер будет выдавать единственную претензию к странице — сертификат подписан организацией, не входящей в состав доверенных на этой планете, — вы готовы к покупке коммерческого сертификата или к внедрению внутри организации/сообщества своего самоподписанного сертификата.
7. Весь секрет массового виртуального HTTPS хостинга по ссылке: wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
Просто добавьте
SSLStrictSNIVHostCheck off
в конфиг Апача и все.
$ cat /usr/local/pic-apache22/conf/extra/httpd-ssl.conf
— # — SSLv2 only
#SSLProtocol -all SSLv2
#SSLCipherSuite SSLv2: HIGH: MEDIUM: LOW: EXP
# — all SSL versions
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
# — #SSLRandomSeed startup file:/dev/random 512
#SSLRandomSeed startup builtin
SSLRandomSeed startup file:/dev/urandom 512
Listen IP:443
NameVirtualHost IP:443
AddType application/x-x509-ca-cert .crt
AddType application/x-x509-ca-cert .cer
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
#SSLSessionCache «dbm:/usr/local/pic-apache22/logs/ssl_scache»
SSLSessionCache «shmcb:/usr/local/pic-apache22/logs/ssl_scache(512000)»
SSLSessionCacheTimeout 300
SSLMutex «file:/usr/local/pic-apache22/logs/ssl_mutex»
SSLStrictSNIVHostCheck off
##
## SSL Virtual Host Context
##
#— MSIE6 берет данные сертификата ПЕРВОГО виртуального хоста! И все.
#— Все остальные виртуальные хосты он считает не доверенными.
#— Возможно, это побеждается директивой BrowserMatch, но я пока не знаю, как.
#— Возможно, это побеждается использованием mod_tls, не пробовал пока.
#— Определенно, это побеждается использованием IIS 🙂 Но утверждать не могу, не пробовал.
#— httpd.apache.org/docs/2.0/ssl/ssl_faq.html#msie
Include conf/extra/https-vhosts-mailbox.conf
Include conf/extra/https-vhosts-hotbox.conf
Include conf/extra/https-vhosts-myserver.conf
— Я не люблю «звездочек» в директивах Listen, рано или поздно ум у системы заходит за разум и Апач перестает запускаться. У меня на одном боксе полсотни Апачей на полсотне IP.
Вместо
Listen *:443
NameVirtualHost _default_:443
Я использую
Listen IP:443
NameVirtualHost IP:443
Что и вам советую.
В расширениях имен файлов сертификатов существует некоторый разнобой. Поэтому убедитесь в том, что раширение используемого вами файла сертификата опредлено в директиве Апача AddType.
Например:
AddType application/x-x509-ca-cert .crt
Иначе Апач запустится, установит HTTPS соединение, но браузер НЕ увидит данных сертификата и продолжит сообщать о не доверенном соединении.
8. Начинаем генерацию ключей и самопальных сертификатов.
Чтобы не мучать себя, просто создайте пучок однострочных скриптов для повторного последующего использования, как это сделал я.
8.1. Создаем ключ корневого хранилища, наш самый главный ключ:
— #!/bin/sh
# создаем ключ корневого хранилища
openssl genrsa -des3 -out some-domain-tld-ca.key 2048
— При генерации ключа openssl запросит у вас пароль. Запишите и спрячьте свой пароль. openssl будет запрашивать этот пароль при любой попытке использовать этот ключ.
$ chmod 400 some-domain-tld-ca.key
Для порядку.
8.2. Создаем и зашифровываем ключом корневого хранилища корневой сертификат, сертификат издателя сертификатов:
— #!/bin/sh
# создаем и зашифровываем ключом корневого хранилища корневой сертификат, сертификат издателя сертификатов
openssl req -new -x509 -days 3650
-key some-domain-tld-ca.key -out some-domain-tld-ca.crt
— openssl запросит у вас пароль, заданный вами для ключа корневого хранилища и, если вы его не забыли, создаст сертификат корневого хранилища.
На всяк случай, пока — на 10 лет. После отладки можно генерить на управляемые сроки.
$ chmod 400 some-domain-tld-ca.crt
Для облегчения ввода данных можно поправить раздел [ req_distinguished_name ] файла openssl.cnf:
[ req_distinguished_name ]
countryName = RU
countryName_default = RU
countryName_min = 2
countryName_max = 2
stateOrProvinceName = Russia
stateOrProvinceName_default = Russia
localityName = Moscow
localityName_default = Moscow
0.organizationName = Some-Domain.Tld
0.organizationName_default = Some-Domain.Tld
# we can do this but it is not needed normally 🙂
1.organizationName = Back Office
1.organizationName_default = Back Office
organizationalUnitName = Web Services
organizationalUnitName_default = Web Services
commonName = www.some-domain.tld
commonName_max = 64
emailAddress = info@some-domain.tld
emailAddress_max = 64
SET-ex3 = SET extension number 3
[ req_attributes ]
challengePassword = somepassphrase
challengePassword_min = 4
challengePassword_max = 20
unstructuredName = Some-Domain.Tld Officer
— Создайте скриптик для просмотра данных сертиф#!/bin/sh
$ cat show_x509_cert.sh
— #!/bin/sh
# просмотреть данные сертификата
openssl x509 -in $1 -text -noout | less
— $ ./show_x509_cert.sh some-domain-tld-ca.crt
В выводе обратите внимание на поле CN. Оно должно выглядеть именно так:
CN=Some-Domain.Tld/emailAddress=info@some-domain.tld
Ваш диалог с командой
$ openssl req -new -x509 -days 3650
-key some-domain-tld-ca.key -out some-domain-tld-ca.crt
должен выглядеть примерно так.
— Enter pass phrase for some-domain-tld-ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
— RU [RU]:
Russia [Russia]:
Moscow [Moscow]:
Some-Domain.Tld [Some-Domain.Tld]:
Back Office [Back Office]:
Web Services [Web Services]:
www.some-domain.tld []:Some-Domain.Tld
info@some-domain.tld []:info@some-domain.tld
— Там, где в квадратных скобках что-то есть и оно вас устраивает, просто жмите Enter.
Для того, чтобы оно вас заранее устраивало, подправьте, как описано выше, файл openssl.cnf
Значения двух последних полей впечатайте вручную и просмотрите полученный сертификат командой
$ openssl x509 -in some-domain-tld-ca.crt -text -noout | less
чтобы убедиться, что в нем все верно.
В вашем распоряжении появился корневой сертификат вашего личного корневого центра сертификации.
Его зовут: some-domain-tld-ca.crt
8.3. Создаем ключ веб-сервера, который вы намерены защитить сертификатом.
Этот ключ будет указан в качестве ключа к сертификату в conf файле Апача.
— #!/bin/sh
# создаем ключ веб-сервера
openssl genrsa -des3 -out myserver-server.key 1024
— openssl запросит пароль, которым зашифрует ключ. Запоминаем и сохраняем его в надежном месте.
8.4. Создаем запрос на подписание сертификата веб-сервера. Этот запрос на подписание будет использоваться вами и для создания самопального сертификата веб-сервера, и для покупки коммерческого сертификата у уполномоченной организации.
— #!/bin/sh
# создаем запрос на подписание сертификата, шифруя его ключом веб-сервера
openssl req -new -key myserver-server.key -out myserver-server.csr
— openssl запросит пароль, которым зашифрован ключ веб-сервера
Enter pass phrase for myserver-server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
— RU [RU]:
Russia [Russia]:
Moscow [Moscow]:
Some-Domain.Tld [Some-Domain.Tld]:
Back Office [Back Office]:
Web Services [Web Services]:
www.some-domain.tld []:myserver.some-domain.tld — это поле должно ПОЛНОСТЬЮ СОВПАДАТЬ с FQDN защищаемого веб-сервера!!!
info@some-domain.tld []:info@some-domain.tld
Please enter the following ‘extra’ attributes
to be sent with your certificate request
somepassphrase []: — здесь я ничего не воожу, просто жму Enter
Some-Domain.Tld Officer []:Some-Domain.Tld Officer
8.5. Создаем и подписываем сертификат веб-сервера, используя запрос на сертификат, корневой ключ и корневой сертификат
— #!/bin/sh
# создаем и подписываем сертификат веб-сервера, используя запрос на подписание сертификата, корневой ключ и корневой сертификат
openssl x509 -req -in myserver-server.csr
-out myserver-server.crt -sha1 -CA some-domain-tld-ca.crt
-CAkey some-domain-tld-ca.key -CAcreateserial -days 3650
— openssl запросит пароль корневого ключа
8.6. Апач будет требовать при запуске пароль к ключу веб-сервера. Если эта фича вам не нужна, сделайте страховую копию ключа веб-сервера
$ cp myserver-server.key myserver-server.key.dist
и очистите пароль ключа веб-сервера командой:
— #!/bin/sh
# очищаем пароль ключа веб-сервера для того, чтобы Апач стартовал без запроса пароля
openssl rsa -in myserver-server.key.dist -out myserver-server.key
— openssl запросит пароль ключа веб-сервера, чтобы расшифровать ключ и записать его в открытом виде.
Теперь у вас есть пара, самоподписанный сертификат и ключ к нему, которые вы можете использовать для запуска Апача c mod_ssl
myserver-server.crt
myserver-server.key
Обратите внимание на то, что валидным ключом к комерческому сертификату, который вы получите, переслав продавцу запрос на подписание сертификата myserver-server.csr, будет служить именно созданный вами ключ myserver-server.key.
Просмотрите содержимое сертификата myserver-server.crt командой:
$ openssl x509 -in myserver-server.crt -text -noout | less
Обратив внимание на правильность данных в строках «Issuer:» и «Subject:»
Выше приведено содержимое файла /usr/local/pic-apache22/conf/extra/httpd-ssl.conf
А вот содержимое файла /usr/local/pic-apache22/conf/extra/https-vhosts-myserver.conf, включенного в /usr/local/pic-apache22/conf/extra/httpd-ssl.conf директивой Include:
Файл /usr/local/pic-apache22/conf/extra/httpd-ssl.conf, в свою очередь, включен директивой Include в содержимое всем знакомого файла httpd.conf
$ cat /usr/local/pic-apache22/conf/extra/https-vhosts-myserver.conf
— <VirtualHost 195.91.136.3:443>
DocumentRoot “/dump/domain/myserver”
DirectoryIndex index.php
ServerName myserver.some-domain.tld
ServerAlias www.myserver.some-domain.tld
ServerAdmin info@some-domain.tld
ErrorLog «logs/myserver.error.log»
TransferLog «logs/myserver.access.log»
CustomLog “/usr/local/pic-apache22/logs/myserver.ssl_request.log” “%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x “%r” %b”
SSLEngine On
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4 RSA: HIGH: MEDIUM: LOW: SSLv2: EXP: eNULL
SSLCertificateFile “/usr/local/pic-apache22/conf/ssl.crt/myserver-server.crt”
SSLCertificateKeyFile “/usr/local/pic-apache22/conf/ssl.crt/myserver-server.key”
SSLCertificateChainFile “/usr/local/pic-apache22/conf/ssl.crt/some-domain-tld-ca.crt”
SSLCACertificateFile “/usr/local/pic-apache22/conf/ssl.crt/some-domain-tld-ca.crt”
#SSLCARevocationFile “/usr/local/pic-apache22/conf/ssl.crl/ca-bundle.crl”
#SSLVerifyClient require
#SSLVerifyDepth 10
# Access Control:
# With SSLRequire you can do per-directory access control based
# on arbitrary complex boolean expressions containing server
# variable checks and other lookup directives. The syntax is a
# mixture between C and Perl. See the mod_ssl documentation
# for more details.
#<Location />
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/
# and %{SSL_CLIENT_S_DN_O} eq «Snake Oil, Ltd.»
# and %{SSL_CLIENT_S_DN_OU} in {«Staff», «CA», «Dev»}
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 )
# or %{REMOTE_ADDR} =~ m/^192.76.162.[0-9] $/
#
SSLOptions FakeBasicAuth ExportCertData StrictRequire
<FilesMatch “.(cgi|shtml|phtml|php)$”>
SSLOptions StdEnvVars
<Directory “/usr/local/bla-bla/cgi-bin”>
SSLOptions StdEnvVars
BrowserMatch “.*MSIE.*” nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
— Если все «завелось» и единственной причиной, вызывающей «ругань» броузера является что-нибудь вроде:
К сертификату нет доверия, так как к сертификату его издателя нет доверия.
(Код ошибки: sec_error_untrusted_issuer)
и вы видите свой сертификат в цепочке, подтверждающей его выпуск вами же, то можно еще несколько раз до, автоматизма, перевыпустить и протестировать сертификаты и отправить CSR файл поставщику коммерческих сертификатов для приобретения сертификата нужного вам уровня доверия.
«Гугл/яндекс: купить SSL сертификат».
Все разжевал, аж самому понятно 🙂
Удачи!
Авторизация по клиентским сертификатам в apache 2.2 не работает
Сейчас давайте я расскажу, по каким причинам может не работать авторизация по клиентским сертификатам в Apache 2.2 и как это можно диагностировать.
Например, в браузере FireFox у Вас появилась следующая ошибка:
ssl_error_handshake_failure_alert
Это свидетельствует о том, что Вы не прошли авторизацию по сертификату. Изначально причин может быть много, например:
- Не установлен сертификат в браузер;
- Сертификат сгенерирован неправильно;
- Неправильно настроен Apache;
- Или, как раз на сервере используется новые протоколы безопасности, а на клиенте нет.
Поэтому, если Вы уверенны, что первые три пункта Вы все сделали правильно, то остается только один вариант, о котором мы сегодня и говорим.
Все то же самое относится и к Internet Explorer, только там будет выходить другая, более общая ошибка, типа:
«Internet Explorer не может отобразить эту веб-страницу.»
Примечание! В некоторых случаях помогает просто отключить поддержку протокола TLS 1.0 в браузере IE при условии, что все обновления ОС установлены. «Сервис -> Свойства обозревателя ->Дополнительно -> убрать галочку TLS 1.0».
Аутентификация веб сервера
Итак, нам удалось настроить и протестировать SSL/TLS, но веб-браузер не смог проверить подлинность веб-сервера. В первой статье мы использовали сертификат веб-сервера, созданного только в целях тестирования и не содержащего информацию, требуемую для настоящей аутентификации и коммерческих транзакций.
Для того чтобы браузер смог успешно аутентифицировать веб-сервер, мы должны создать нормальный соответствующий сертификат веб-сервера, который будет содержать:
- Открытый ключ веб-сервера
- Даты подлинности (начала и истечения)
- Поддерживаемые алгоритмы шифрования
- Отличительное имя (the distinguish name DN), которое должно содержать полностью определенное доменное имя веб-сервера, называемое общим именем (Common Name CN). Опционально DN может содержать и некоторые другие атрибуты, например, страну (Country C), штат (State S), Расположение (Location L), название организации (the Organization’s name O), название службы организации (the Organization Unit’s name OU), и др.
- Серийный номер сертификата
- Атрибуты X.509v3, которые будут сообщать веб-браузерам о типе и применении
- URI CRL (если есть)
- URI политики сертификата X.509v3 (если есть)
- Имя и подпись доверенного источника сертификатов (Certification Authority CA)
Стоит отметить, что атрибут общее имя (Common Name CN) должен иметь значение, равное доменному имени сервера (Fully Qualified Domain Name FQDN). Иначе браузерам не удастся определить принадлежность сертификата веб-серверу, на котором присутствует наш сертификат.
Пример сертификата веб-сервера (текстовая репродукция):
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: O=Seccure, OU=Seccure Root CA
Validity
Not Before: Nov 28 01:00:20 2004 GMT
Not After : Nov 28 01:00:20 2005 GMT
Subject: O=Seccure, OU=Seccure Labs, CN=www.seccure.lab
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:c1:19:c7:38:f4:89:91:27:a2:1b:1d:b6:8d:91:
48:63:0e:3d:0d:2e:f8:65:45:56:db:98:4d:11:21:
01:ac:81:8e:3f:64:4a:8a:3f:21:15:ca:49:6e:64:
5c:5d:a2:ab:5a:48:cb:2a:9f:0c:02:b9:ff:52:f6:
d9:39:6d:a3:4a:94:41:f9:e9:ab:f0:42:fb:68:9a:
4b:53:41:e7:4f:b0:2b:02:d7:92:a2:2b:02:a2:f9:
f1:2d:68:fa:50:01:2f:49:c1:28:2f:a8:c6:6d:6d:
ab:1d:b9:bd:c9:80:63:f1:d6:22:19:de:2d:4a:43:
50:76:79:7e:a5:5a:75:af:19
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
X509v3 Key Usage:
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication, Netscape Server Gated Crypto,
Microsoft Server Gated Crypto
Netscape Comment:
OpenSSL Certificate for SSL Web Server
Signature Algorithm: sha1WithRSAEncryption
45:30:9d:04:0e:b7:86:9e:61:a1:b0:68:2b:44:93:1c:57:2a:
99:42:bb:16:b1:ab:f5:c0:d2:33:12:c8:d3:1d:2b:bb:6b:9a:
4c:c7:53:bc:e4:88:ef:1e:c3:37:ed:53:2c:15:cf:b8:90:df:
df:4b:34:b8:db:cc:23:77:46:06:72:9d:43:60:a8:a2:ed:0a:
bb:1a:a4:e8:4e:ba:66:93:63:74:87:fd:43:48:b6:93:a2:e3:
3d:da:1b:64:46:35:88:b4:4b:22:e6:3c:84:70:5d:88:dd:64:
c2:51:c2:d6:59:80:87:bc:bd:7f:e3:c1:45:7e:c0:5f:9c:ca:
e1:a1
Примеры, представленные в последующих разделах статьи основаны на значениях, показанных в Таблице 3. Для создания соответствующих сертификатов читателю потребуется изменить эти значения на название их собственной компании или организации.
Описание атрибута | Атрибут | Пример значения |
| Код страны – Country code (two letters) | C | C = PL |
| Штат или регион – State or Province | S | S = mazowieckie |
| Расположение – Location | L | L = Warsaw |
| Название организации – Organization Name | O | O = Seccure |
| Название службы организации – Organization Unit | OU | OU = Seccure Labs |
| Общее имя – Common Name | CN | CN = www.seccure.lab |
Table 3. Примеры значений сертификата.
Изменение файла виртуального хоста apache ssl по умолчанию
Теперь изменим /etc/apache2/sites-available/sl.conf, используемый по умолчанию файл виртуального хоста Apache SSL. Если вы используете другой файл серверных блоков, используйте имя этого файла в приведенных ниже командах.
Прежде чем продолжить, создадим резервную копию первоначального файла виртуального хоста SSL:
Теперь откройте файл виртуального хоста SSL для внесения изменений:
С удалением большинства комментариев содержание файла виртуального хоста по умолчанию должно выглядеть примерно так:
/etc/apache2/sites-available/default-ssl.conf
Как установить ssl сертификат на apache? |
Чтобы установить сертификат для сайта на Apache, следуйте шагам ниже:
1. Загрузите файлы сертификата на сервер любым удобным вам способом, например, по FTP или SFTP.
2. В файле конфигурации Apache внесите изменения согласно примера ниже.
Обратите внимание: по умолчанию данный файл находится по пути: /etc/httpd/httpd.conf . В этом файле для каждого добавленного домена созданы отдельные блоки (которые могут быть внизу файла httpd.conf). Также иногда блоки указываются отдельно, например, в поддиректориях /etc/httpd/vhosts.d/ или /etc/httpd/sites/ или в файле ssl.conf. Перед изменением файла проверьте наличие этих блоков. Файл, в который собираетесь вносить изменения лучше скопировать и изменить его имя (например, на httpd.conf_old), чтобы в случае необходимости вернуться к старым настройкам.
В конфигурационный файл должны быть добавлены строки по примеру тех, которые выделены жирным:
DocumentRoot /var/www/html2
ServerName www.yourdomain.com
SSLEngine on
SSLCertificateFile /path/to/your_domain_name.crt
SSLCertificateKeyFile /path/to/your_private.key
SSLCertificateChainFile /path/to/.сa-bundle
Указывать здесь необходимо точные пути и названия файлов сертификатов в соответствии с тем, где они находятся и как называются.
SSLCertificateFile – файл основного сертификата, т.е. сертификата для вашего домена (например: your_domain_name.crt). SSLCertificateKeyFile – файл с приватным ключом – RSA. Если вы генерировали CSR-запрос в нашей панели управления SSL, то данный ключ был отправлен вам на почту (если опция отправки на почту не была отключена). Необходимо скопировать данный ключ с тегами BEGIN/ENDPRIVATE KEY, вставить в текстовый документ и сохранить с расширением .key. SSLCertificateChainFile – файл, в котором находится цепочка сертификатов – промежуточных и корневого (файл с названием: gd_bundle, ca_bundle, ca_cert и т.д.)
Обратите внимание: для случаев, если нужно, чтобы сайт открывался как с защищенным соединением, так и без него, для обоих типов соединения необходимы отдельные виртуальные хосты. Для этого скопируйте существующий незащищенный виртуальный хост и отредактируйте для защищенного SSL-сертификатом соединения.
3. Проверьте настройки Apache.
Для того чтобы заработало защищенное соединение, нужно перезагрузить веб-сервер Apache. Перезапуск не удастся, если были допущены ошибки в конфигурационном файле. Вы можете проверить работу веб-сервера командой apachectl configtest, чтобы предупредить какие-либо неполадки.
4. Перезагрузите Apache.
Настройка ssl сертификата для apache
И так, уже все есть, сертификат создан и можно приступать к настройке. Для этого, открываем виртуальный хост (если нет, можно создать новый):
Конфигурационный файл(ы) в RedHat’s можно создать:
Онлайн курс “sre практики и инструменты”
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с
онлайн-курсом “SRE практики и инструменты”
в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и Linux. Обучение длится 3 месяц, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
На курсе вы узнаете как:
- Внедрить SRE практики в своей организации
- Управлять надежностью, доступностью и эффективностью сервисов
- Управлять изменениями
- Осуществлять мониторинг
- Реагировать на инциденты и производительность
- Работать со следующим технологическим стеком: Linux, AWS, GCP, Kubernetes, Ansible, Terraform, Prometheus, Go, Python.
Проверьте себя на вступительном тесте и смотрите подробнее программу по
Парольная фраза dilemma
Перед созданием сертификатов важно понять причастность парольной фразы. Следует ли шифровать закрытый ключ или нет? Существует много мнений, но рекомендуется не защищать закрытый ключ веб-сервера с использованием парольной фразы. Это не только неудобно, но и представляет собой лишь мираж безопасности. Почему? Рассмотрим эти точки зрения:
- Необходимо будет вводить парольную фразу после каждой перезагрузки сервера, что может раздражать, если систему нужно часто перезагружать (например, при обновлении ядра, перебоях с питанием, смене конфигурации и т.п.)
- Если злоумышленнику удастся получить закрытый ключ на веб-сервере, это будет означать, что веб-сервер уже компрометирован и взломщик получит привилегии root’a. В этом случае хакер сможет узнать и парольную фразу, установив кей-логгер и перезагрузив систему, тем самым он всё равно заставит системного администратора ввести парольную фразу. Также злоумышленник может просмотреть память Apache и найти закрыйтый ключ веб-сервера, хранимого в дампе в открытом тексте. Хотя осуществить это сложно, но для тех, кто имеет опыт во взломе систем семейства Unix, большой проблемы это не вызовет (самый простой способ – использовать утилиту pcat из The Coroner’s Toolkit).
Таким образом, в шифровании закрытого ключа сервера существует только одно преимущество – парольная фраза поможет сохранить закрытый ключ от бездарных скрипт-киддисов, но не от профессионалов, способных получить root доступ к серверу.
Помогла статья? подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.
Предварительные требования
Для начала у вас должен быть пользователь без прав root с привилегиями sudo. Чтобы создать такую учетную запись пользователя, следуйте указаниям руководства «Начальная настройка сервера с Ubuntu 18.04».
Также вам потребуется установить веб-сервер Apache. Если вы хотите установить на сервере полный комплект LAMP (Linux, Apache, MySQL, PHP), следуйте указаниям обучающего модуля «Установка LAMP в Ubuntu 18.04». Если вы хотите просто установить веб-сервер Apache, пропустите шаги, относящиеся к установке PHP и MySQL.
Когда предварительные требования будут выполнены, переходите к приведенным ниже шагам.
Рекомендуемые настройки mod_ssl
В Apache 2.0.52 существует более 30 директив, используемых для настройки mod_ssl. Подробное описание их всех можно найти в Apache’s mod_ssl documentation. В этом разделе рассмотрим только рекомендуемые настройки, которые влияют на безопасность или производительность SSL/TLS соединений.
Листинг этих настроек показан в Таблице 1.
Создаем сертификат веб-сервера
Теперь мы можем создать сертификат нашего веб-сервера. Вообще, существует три типа сертификатов, которые мы можем использовать:
- Самоподписанный сертификат.
- Сертификат, подписанный доверенным CA (наиболее рекомендуемый).
- Сертификат, подписанный локальным CA.
Следующие разделы подробно описывают способы создания этих сертификатов. Конечный результат любого способа будет всего в двух файлах:
- server.key – закрытый ключ веб-сервера
- server.crt – зашифрованный PEM сертификат, содержащий открыйтый ключ сервера
Создание сниппета конфигурации apache с надежными настройками шифрования
Прежде всего, мы создадим сниппет конфигурации Apache для определения некоторых параметров SSL. При этом в Apache будет настроен надежный пакет шифров SSL и будут включены расширенные функции, которые обеспечат безопасность нашего сервера. Настраиваемые нами параметры смогут использовать любые виртуальные хосты с SSL.
Создайте новый сниппет в каталоге /etc/apache2/conf-available. Мы назовем файл ssl-params.conf, чтобы сделать его назначение очевидным:
Для безопасной настройки Apache SSL мы используем рекомендации Реми ван Эльста на сайте Cipherli.st. Этот сайт создан для предоставления удобных настроек шифрования для популярного программного обеспечения.
Рекомендованные настройки на вышеуказанном сайте обеспечивают высокий уровень безопасности. Иногда это достигается за счет совместимости клиентских систем. Если вам требуется поддержка старых версий клиентов, вы можете использовать альтернативный список, нажав на странице ссылку «Да, мне нужны настройки шифрования для устаревшего / старого программного обеспечения». Этот список можно заменить для копируемых ниже элементов.
Выбор конфигурации в основном зависит от того, какие системы вам нужно поддерживать. Оба варианта обеспечивают высокий уровень безопасности.
Для наших целей мы скопируем предоставленные настройки полностью. Мы внесем только одно небольшое изменение. Мы отключим заголовок Strict-Transport-Security (HSTS).
Предварительная загрузка HSTS повышает безопасность, но может иметь далеко идущие последствия, если ее включить случайно или неправильно. В этом обучающем модуле мы не будем включать настройки, но вы можете изменить их, если понимаете возможные последствия.
Способ 1: самоподписанный сертификат (только для тестирования)
Этот способ стоит использовать только для продолжения нашего тестирования, или для использования в малых, закрытых условиях (малые корпоративные сети). Чтобы веб-браузеры могли аутентифицировать веб-сервер, самоподписанные сертификаты должны быть инсталлированы в каждый веб-браузер. Это может быть довольно таки неудобно.
Закрытый/открытый ключ и самоподписанный РЕМ-зашифрованный сертификат создаются следующим образом:
openssl req -new -x509 -days 365 -sha1 -newkey rsa:1024 -nodes -keyout server.key -out server.crt -subj '/O=Seccure/OU=Seccure Labs/CN=www.seccure.lab'
При помощи этих команд выполняются следующие действия: создание нового (-new) сертификата (-x509), который будет действителен в течение года (-days 365) и будет подписан с использованием алгоритма SHA1 (-sha1). Закрытый ключ RSA будет иметь длину 1024 бит (-newkey rsa:1024), и не будет защищен парольной фразой (-nodes).
Сертификат и закрытый/открытый ключи будут созданы в файлах “server.crt” и “server.key” (-out server.crt -keyout server.key). Параметр “-subj” говорит о том, что название компании “Seccure” (O=Seccure), название службы “Seccure Labs”, и полностью определенное доменное имя “www.seccure.lab”.
После создания этого сертификата мы должны установить его в каждый веб-браузер, который будет являться потенциальным клиентом нашего сервера. Иначе, веб-браузеры, отправляющие запрос на соединение нашему серверу, не смогут проверить его подлинность. Для Windows среды это будет выглядеть следующим образом:
Рисунок 1. Установка самоподписанного сертификата на машину клиента.
Способ 2: сертификат, подписанный доверенным ca (рекомендуется)
Создание запроса на сертификат и подписка его доверенным CA (таким как Thawte, RSA и др.) наиболее рекомендуемое дальнейшее действие, если вы хотите открыть публичный доступ к вашему сайту из Интернет. При использовании этого метода отпадает необходимость в установке сертификатов в каждый веб-браузер, ведь большинство из них уже имеют в установке несколько сертификатов от доверенных CA.
Не забывайте, что каждый СА имеет разные ограничение на атрибут DN, поэтому читателю стоит заранее ознакомиться с ними. Рекомендуется также выбирать такие сертификаты, которые установлены в большинстве веб браузеров (Thawte, Verisign и некоторые другие). Иначе, у веб-браузера пользователя возникнут проблемы с аутентификацией веб-сервера.
Процесс получения подписанного сертификата от доверенного СА состоит из следующих шагов:
- Первым делом, следует создать пару закрытого/открытого ключа (server.key) и запрос сертификата (request.pem), как показано ниже:
openssl req -new -sha1 -newkey rsa:1024 -nodes -keyout server.key -out request.pem -subj '/O=Seccure/OU=Seccure Labs/CN=www.seccure.lab'
2. Теперь мы должны послать запрос на получение сертификата (request.pem) в СА и дождаться, пока он будет подписан и отослан обратно в виде сертификата.
3. После получения сертификата от доверенного СА мы должны удостовериться в том, что он закодирован в формате PEM, а не TXT или DER. Если же полученный сертификат не соответствует формату РЕМ, то мы должны конвертировать его, в каком бы формате он не пришел.
Самый простой способ проверить формат сертификата это просмотреть его в текстовом редакторе. В зависимости от того, как выглядит сертификат, он может быть в одном из следующих форматов (типичные расширения файлов представлены в скобках):
- PEM, Base64 кодировка формата X.509 (*.crt, *.pem, *.cer)
-----BEGIN CERTIFICATE----- MIICdzCCAeCgAwIBAgIBATANBgkqhkiG9w0BAQUFADAsMRAwDgYDVQQKEwdTZWNj dXJlMRgwFgYDVQQLEw9TZWNjdXJlIFJvb3QgQ0EwHhcNMDQxMTI4MDEwMDIwWhcN ... ou0Kuxqk6E66ZpNjdIf9Q0i2k6LjPdobZEY1iLRLIuY8hHBdiN1kwlHC1lmAh7y9 f PBRX7AX5zK4aE= -----END CERTIFICATE-----
- TXT PEM format (*.crt, *.cer, *.pem, *.txt)
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: O=Seccure, OU=Seccure Root CA
...
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:c1:19:c7:38:f4:89:91:27:a2:1b:1d:b6:8d:91:
...
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
...
-----BEGIN CERTIFICATE-----
MIICdzCCAeCgAwIBAgIBATANBgkqhkiG9w0BAQUFADAsMRAwDgYDVQQKEwdTZWNj
dXJlMRgwFgYDVQQLEw9TZWNjdXJlIFJvb3QgQ0EwHhcNMDQxMTI4MDEwMDIwWhcN
...
ou0Kuxqk6E66ZpNjdIf9Q0i2k6LjPdobZEY1iLRLIuY8hHBdiN1kwlHC1lmAh7y9
f PBRX7AX5zK4aE=
-----END CERTIFICATE-----
Команда для конвертирования формата TXT PEM в РЕМ:
openssl x509 -in signed_cert.pem -out server.crt
- DER, двоичная кодировка X.509 (*.der, *.crt, *.cer)
[Нетекстовое, двоичное представление]
Команда для преобразования формата DER в РЕМ:
openssl x509 -in signed_cert.der -inform DER -out server.crt
- Верификация и тестирование сертификата
Перед установкой сертификата мы должны проверить, действительно ли он законный и может быть использован в целях аутентификации веб-ервера:
openssl verify -CAfile /path/to/trusted_ca.crt -purpose sslserver server.crt
Кроме того, было бы неплохо убедиться в том, что наш сертификат соответствует ранее созданному закрытому ключу (результаты выполнения обеих команд должны быть одинаковыми):
openssl x509 -noout -modulus -in server.crt | openssl sha1 openssl rsa -noout -modulus -in server.key | openssl sha1
Установка mod_ssl в apache
В качестве сервера у нас выступает apache на CentOS, хотя это не принципиально, настройка на других linux дистрибутивах будет идентичной. Рабочим web сервером является apache. Использовать ssl протокол в apache мы будем с помощью мода mod_ssl. Первым делом проверим, установлен ли он:
# rpm -qa | grep mod_ssl
Если нет, то устанавливаем:
# yum -y install mod_ssl
Установка сертификата
Теперь можно продолжить установку закрытого ключа веб-сервера (server.key) и самого сертификата (server.crt) в среду Apache:
install -m 600 -o root -g sys server.key /usr/local/apache2/conf/ssl.key/ install -m 644 -o root -g sys server.crt /usr/local/apache2/conf/ssl.crt/
Шаг 2 — настройка apache для использования ssl
Мы создали файлы ключа и сертификата в каталоге /etc/ssl. Теперь нам просто нужно изменить конфигурацию Apache, чтобы воспользоваться их преимуществами.
Внесем несколько небольших изменений в нашу конфигурацию:
- Создадим сниппет конфигурации, чтобы задать надежные параметры SSL по умолчанию.
- Мы изменим входящий в комплект файл виртуального хоста SSL Apache, чтобы он указывал на сгенерированные нами сертификаты SSL.
- (Рекомендуется) Мы изменим незашифрованный файл виртуального хоста, чтобы он автоматически перенаправлял запросы на шифрованный виртуальный хост.
После завершения настройки мы получим защищенную конфигурацию SSL.
Шаг 3 — настройка брандмауэра
Если у вас включен брандмаэр ufw в соответствии с предварительными требованиями, вам может потребоваться изменить настройки для поддержки трафика SSL . К счастью, Apache регистрирует несколько профилей ufw после установки.
Мы можем просмотреть доступные профили с помощью следующей команды:
Список должен выглядеть примерно так:
Output
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Вы можете просмотреть текущие настройки с помощью следующей команды:
Шаг 4 — активация изменений в apache
Мы внесли изменения и настроили брандмауэр, и теперь можем включить в Apache модули SSL и заголовков, активировать наш виртуальный хост SSL и перезапустить Apache.
Мы можем активровать mod_ssl, модуль Apache SSL, и модуль mod_headers, необходимый для некоторых настроек нашего сниппета SSL, с помощью команды a2enmod:
Теперь мы можем активировать виртуальный хост SSL с помощью команды a2ensite:
Также нам нужно будет активировать файл ssl-params.conf для считывания заданных значений:
Мы активировали наш сайт и все необходимые модули. Теперь нам нужно проверить наши файлы на наличие ошибок в синтаксисе. Для этого можно ввести следующую команду:
Если проверка будет успешно пройдена, мы получим результат, выглядящий примерно так:
Output
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
Первая строка — это сообщение о том, что директива ServerName не задана глобально. Если вы хотите избавиться от этого сообщения, вы можете задать для ServerName доменное имя вашего сервера или IP-адрес в каталоге /etc/apache2/apache2.conf. Это необязательно, потому что данное сообщение не наносит никакого вреда.
Если в результатах есть сообщение Syntax OK, в вашей конфигурации нет синтаксических ошибок. Мы можем безопасно перезапустить Apache для внесения изменений:
Шаг 6 – переключение на постоянное перенаправление
Если перенаправление работает правильно, и вы хотите разрешить только шифрованный трафик, вам следует снова изменить файл нешифрованного виртуального хоста Apache и сделать перенаправление постоянным.
Откройте файл конфигурации серверного блока еще раз:
Найдите добавленную нами строку Redirect. Добавьте в эту строку атрибут permanent, который изменяет тип перенаправления с временного перенаправления 302 на постоянное перенаправление 301:
/etc/apache2/sites-available/000-default.conf
Заключение
Вы настроили сервер Apache для использования защищенного шифрования клиентских соединений. Это обеспечит безопасное обслуживание запросов и не даст третьим сторонам возможности считывать ваш трафик.
Заключение второй части
Во второй части мы рассказали, как настроить mod_ssl и как создать и использовать X.509v3 сертификаты веб сервера. В следующей, третьей и последней части этого цикла статей мы обсудим процесс аутентификации клиентов через сертификаты, а также часты ошибки системных администраторов и известные атаки, которые могут представлять реальную угрозу SSL-соединениям.
