1. Create ssl directory
[code language=”shell”]
mkdir /etc/apache2/ssl
cd /etc/apache2/ssl
[/code]
2. Create server key, just press enter when asked for password.
[code language=”shell”]
sudo ssh-keygen -f server.key
[/code]
3. Create certificate request file. Enter info or leave blank when asked various questions.
[code language=”shell”]
sudo openssl req -new -key server.key -out request.csr
[/code]
4. Create SSL certificate file from the request file.
[code language=”shell”]
sudo openssl x509 -req -days 99999 -in request.csr -signkey server.key -out server.crt
[/code]
5. Open /etc/apache2/httpd.conf, make sure you have these 3 lines in it. If not, add them. If there is but with # sign at the beginning, remove the # sign.
[code language=”shell”]
Listen 443
LoadModule ssl_module libexec/apache2/mod_ssl.so
Include /private/etc/apache2/extra/httpd-ssl.conf
[/code]
6. Open /etc/apache2/extra/httpd-ssl.conf search for lines with SSLCertificateFile and SSLCertificateKeyFile, update them to the below
[code language=”shell”]
SSLCertificateFile «/etc/apache2/ssl/server.crt»
SSLCertificateKeyFile «/etc/apache2/ssl/server.key»
[/code]
7. Configure vhosts to enable https 443, open /etc/apache2/extra/httpd-vhosts.conf and the below to it. Replace the value for ServerName, DocumentRoot and Directory path to yours.
[code language=”shell”]
<VirtualHost 127.0.0.1:80>
ServerName test.com
DocumentRoot «/Users/shunter/Sites/test»
<Directory «/Users/shunter/Sites/test»>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost 127.0.0.1:443>
ServerName test.com
DocumentRoot «/Users/shunter/Sites/test»
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
<Directory «/Users/shunter/Sites/test»>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
[/code]
8. Edit host file for your sever name, open /etc/hosts and add this line to it
[code language=”shell”]
127.0.0.1 test.com
[/code]
9. Restart apache
[code language=”shell”]
sudo /usr/sbin/apachectl restart
[/code]
10. Assume you have a index page in /Users/shunter/Sites/test, test it by going to https://test.com
An interesting note: A file created or modified in /etc/apache2/ will reflected in /private/etc/apache2/
Search within Codexpedia
Custom Search
Search the entire web
Custom Search
Обновлено:
Опубликовано:
Используемые термины: Apache, CentOS, Ubuntu, FreeBSD.
Инструкция написана для операционных систем на базе UNIX.
Получение сертификата
Модуль Apache для работы с SSL
Настройка веб-сервера
Проверка
Редирект с http на https
Apache + NGINX
Шаг 1. Создание сертификата
Для боевого сервера, сертификат должен быть получен от доверенного центра сертификации — либо локального для компании, либо коммерческого. Или получен бесплатно от Let’s Ecnrypt.
Для тестовой среды можно сгенерировать самоподписанный сертификат. Для этого сперва переходим в рабочую папку.
а) на Red Hat / CentOS:
cd /etc/httpd
б) на Debian / Ubuntu:
cd /etc/apache2
в) во FreeBSD:
cd /usr/local/etc/apache24
Создаем папку для сертификатов и переходим в нее:
mkdir ssl ; cd ssl
И генерируем сертификат:
openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=test.dmosk.local/CN=test»
* в данном примере созданы открытый и закрытый ключи на 4 года (1461 день); значения параметра subj могут быть любыми в рамках тестирования.
Шаг 2. Установка модуля SSL для Apache
Прежде, чем устанавливать модуль, выполняем команду:
apachectl -M | grep ssl
Если видим строчку, на подобие:
ssl_module (shared)
Спускаемся к шагу 3 данной инструкции.
Иначе, устанавливаем httpd ssl_module.
а) Для CentOS:
yum install mod_ssl
б) Для Ubuntu/Debian:
a2enmod ssl
в) Для FreeBSD:
Открываем файл конфигурации apache:
ee /usr/local/etc/apache24/httpd.conf
* подразумевается, что используется apache 2.4.
Находим и снимаем комментарии со следующих строчек:
…
LoadModule ssl_module libexec/apache24/mod_ssl.so
…
Include etc/apache24/extra/httpd-ssl.conf
…
И ставим комментарии в следующих строках:
#<IfModule ssl_module>
#SSLRandomSeed startup builtin
#SSLRandomSeed connect builtin
#</IfModule>
Чтобы настройки применились, необходимо перезапустить веб-сервер одной из команд:
systemctl restart httpd
systemctl restart apache2
service apache2 restart
* первая, как правило, используется в системах на базе RPM, вторая — DEB, третья — BSD.
Шаг 3. Настройка Apache
Выходим из папки ssl:
cd ..
Открываем файл с настройкой виртуальный доменов.
Для CentOS:
vi conf.d/site.conf
* где site.conf — конфигурационный файл для конкретного сайта
Для Ubuntu/Debian:
vi sites-enabled/site
Для FreeBSD:
ee extra/httpd-vhosts.conf
В открытый файл добавляем следующее:
<VirtualHost *:443>
ServerName site.ru
DocumentRoot /var/www/apache/data
SSLEngine on
SSLCertificateFile ssl/cert.pem
SSLCertificateKeyFile ssl/cert.key
#SSLCertificateChainFile ssl/cert.ca-bundle
</VirtualHost>
* где:
- ServerName — домен сайта;
- DocumentRoot — расположение файлов сайта в системе;
- SSLCertificateFile и SSLCertificateKeyFile — пути до файлов ключей, которые были сгенерированы на шаге 1;
- SSLCertificateChainFile — при необходимости, путь до цепочки сертификатов (если используем не самоподписанный сертификат).
Проверяем корректность настроек в Apache:
apachectl configtest
Если видим:
Syntax OK
Перечитываем конфигурацию apache:
apachectl graceful
Шаг 4. Проверка работоспособности
Открываем браузер и переходим на наш сайт, добавив https://. При использовании самоподписного сертификата (как в нашем случае), обозреватель выдаст предупреждение, что передача данных не безопасна. Подтверждаем наше намерение открыть сайт. Если все работает, переходим к шагу 5.
Если сайт не заработал, пробуем найти причину по log-файлу. Как правило, он находится в каталоге /var/log/apache или /var/log/httpd.
Шаг 5. Настройка редиректа
Чтобы все запросы по http автоматически перенаправлялись на https, необходимо настроить перенаправление (redirect). Есть несколько способов это сделать.
В конфигурационном файле
Открываем файл с настройкой виртуальных доменов (как в шаге 3) и дописываем следующее:
<VirtualHost *:80>
ServerName site.ru
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
* в конкретном примере, мы перенаправили все запросы для сайта site.ru.
** обратите особое внимание, что если у Вас уже есть VirtualHost *:80 для настраиваемого сайта, необходимо его закомментировать или отредактировать.
В файле .htaccess
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Установка модуля rewrite
Чтобы перенаправление работало в Apache, необходимо установить модуль rewrite.
а) в CentOS открываем конфигурационный файл и проверяем наличие строки:
vi /etc/httpd/conf.modules.d/00-base.conf
LoadModule rewrite_module modules/mod_rewrite.so
* если ее нет, добавляем; если она закомментирована, снимаем комментарий.
systemctl restart httpd
б) в Ubuntu:
a2enmod rewrite
systemctl restart apache2
Apache + NGINX
При использовании веб-сервера на базе и Apache и NGINX, как правило, наружу смотрит последний. В таком случае, именно он будет отвечать на http-запросы, и в таком случае нужно настраивать SSL на NGINX.
Введение
Apache — кроссплатформенный HTTP-сервер, который был создан с учетом ошибок старого web-сервера NCSA HTTPd. На данный момент стабильная версия имеет номер 2.4.63. Основные достоинства Apache — кроссплатформенность и модульная система, позволяющая оптимизировать программное обеспечения для нужд конкретной разработки.
В этой статье рассмотрим установку HTTP-сервера Apache на операционную систему (ОС) Ubuntu. В рамках этой публикации используется релиз Ubuntu 20.04 server и web-сервер Apache версии 2. Система развернута в облачной платформе Selectel. Для тестового сервера используется минимальная конфигурация мощностей — 1 ядро и 1 ГБ оперативной памяти. Для запуска простого ненагруженного приложения этого достаточно.
Настроить виртуальный сервер
Откройте панель управления Selectel и перейдите в раздел Облачная платформа. Нажмите Создать сервер.
Используем минимальную конфигурацию. Не забудьте добавить SSH-ключ, для Ubuntu 24.04 это обязательный шаг.
После создания сервера в панели можно будет посмотреть его IP-адрес.
Теперь можем подключиться к нему по SSH.
Самым простым способом подключения является использование утилиты PuTTY. Эта утилита является кроссплатформенной. Скачать ее можно с официального сайта https://www.chiark.greenend.org.uk/~sgtatham/putty/.
Для подключения в поле Host Name (or IP address) вводим полученный ранее ip-адрес, остальные опции оставляем без изменений.
После нажатия кнопки Open эмулятор терминала произведет подключение к серверу. Потребуется ввести комбинацию логин/пароль. На первоначальном этапе используем логин root и пароль, полученные на этапе создания сервера.
login as: root
root@xx.xx.xx.178's password:
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-51-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
Expanded Security Maintenance for Applications is not enabled.
0 updates can be applied immediately.
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
root@kassie:~#
Установить Apache
При установке и конфигурации будет использован пользователь, отличный от root, но с правами администратора. Для большинства операций требуются привилегии суперпользователя.
Чтобы повысить привилегии обычного пользователя, используется команда sudo. Первоначально необходимо загрузить информацию об актуальных списках пакетов и зависимостях.
sudo apt update
После этой операции произведем установку пакета Apache2, он располагается в стандартном репозитории, дополнительные добавлять не нужно.
sudo apt install apache2
По окончании демон запускается автоматически, а также попадает в автозагрузку.
Настроить брандмауэр для Apache
Рекомендуем в Ubuntu использовать ufw. Uncomplicated Firewall — утилита для настройки межсетевого экрана. Если настройка происходит на виртуальном сервере, желательно проверить наличие установленной утилиты.
sudo ufw status verbose
В случае отсутствия ее в списке установленных пакетов появится ошибка:
sudo: ufw: command not found
Тогда ее необходимо установить:
sudo apt install ufw
Заново запросим ее статус:
Status: inactive
Это означает, что она деактивирована. Активируем:
sudo ufw enable
Разрешаем HTTP на сервере:
sudo ufw allow http
Очень важно в этом моменте разрешить SSH-доступ. На тестовом сервере SSH на стандартном порту 22.
sudo ufw allow 22/tcp
Обязательно перезапустить процесс:
sudo ufw reload
Проверить базовую настройку Apache
На данный момент сервер доступен из интернета по HTTP. Можно проверить это в браузере по ip-адресу в поисковой строке. Ip-адрес мы уже получили в панели управления сервером.
Появившееся приветствие означает успешную начальную настройку Apache-сервера.
Как запустить Apache и другие полезные команды
В этом разделе будут собраны базовые команды для управления Apache web-сервером. Несмотря на то, что демон запускается самостоятельно, иногда необходимо выключить его или перечитать конфигурацию.
Проверить статуса демона Apache:
sudo systemctl status apache2
В выводе будет указан текущий статус. Возможны два варианта.
Активен:
apache2.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled)
Active: active (running) since Fri 2025-01-24 10:48:52 UTC; 9min ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 1924 (apache2)
Tasks: 55 (limit: 1119)
Memory: 6.3M (peak: 6.5M)
CPU: 66ms
CGroup: /system.slice/apache2.service
├─1924 /usr/sbin/apache2 -k start
├─1927 /usr/sbin/apache2 -k start
└─1928 /usr/sbin/apache2 -k start
Неактивен:
apache2.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled)
Active: inactive (dead) since Fri 2025-01-24 10:58:38 UTC; 1s ago
Duration: 9min 45.788s
Docs: https://httpd.apache.org/docs/2.4/
Process: 3709 ExecStop=/usr/sbin/apachectl graceful-stop (code=exited, status=0/SUCCESS)
Main PID: 1924 (code=exited, status=0/SUCCESS)
CPU: 83ms
Иногда возникает ошибка.
apache2.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Fri 2025-01-24 11:01:08 UTC; 2s ago
Duration: 9min 45.788s
Docs: https://httpd.apache.org/docs/2.4/
Process: 3732 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)
CPU: 10ms
Jan 24 11:01:08 kassie systemd[1]: Starting apache2.service - The Apache HTTP Server...
Jan 24 11:01:08 kassie apachectl[3734]: AH00526: Syntax error on line 13 of /etc/apache2/sites-enabled/000-default.conf:
Jan 24 11:01:08 kassie apachectl[3734]: Invalid command 'meow', perhaps misspelled or defined by a module not included in the server configuration
Чтобы выйти в консоль из статуса, необходимо использовать клавишу q или комбинацию клавиш Ctrl+С.
Для деактивации:
sudo systemctl stop apache2
Для активации:
sudo systemctl start apache2
Перезапуск:
sudo systemctl restart apache2
При изменении конфигурации Apache возможно ее перечитать без разрыва текущей сессии с хостов:
sudo systemctl reload apache2
Чтобы деактивировать запуск web-сервера при загрузке:
sudo systemctl disable apache2
Активировать автозагрузку:
sudo systemctl enable apache2
Настроить виртуальные хосты Apache
Можно использовать веб-сервер Apache для поддержки одного web-приложения. Но достаточно часто приходится на одном сервере создавать и обслуживать несколько web-ресурсов. В Apache для этих целей используется модуль виртуальных хостов. Он позволяет развернуть несколько web-приложений на одном сервере с использованием одного ip-адреса, но разных доменных имен. Про теорию доменных имен есть хорошие статьи и книги, например, статья о DNS-сервере BIND и книга Крикета Ли, Пола Альбитц «DNS и BIND». Об управлении доменами и ресурсными записями написали в базе знаний Selectel.
Перейдем к настройке виртуального хоста.
В Ubuntu конфигурации виртуальных хостов расположены в директории /etc/apache2/sites-available. Нам необходимо получить директорию для виртуального хоста по умолчанию. Получим root-директорию из файла дефолтной конфигурации:
grep "DocumentRoot" /etc/apache2/sites-available/000-default.conf
Вывод:
DocumentRoot /var/www/html
Создадим новые необходимые директории, не меняя корневой.
sudo mkdir -p /var/www/example.com/html
В стандартном исполнении Apache ищет документ index.htm или index.html
Создадим простой html5-документ:
sudo touch /var/www/example.com/html/index.html
Добавим небольшую структуру документа, открыв его в текстовом редакторе:
sudo nano /var/www/example.com/html/index.html
Вставляем в файл.
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
<meta charset="utf-8">
</head>
<body>
<h1>Hello Selectel!</h1>
</body>
</html>
Чтобы оставить дефолтную конфигурацию виртуального хоста неизменной, копируем его в созданную ранее директорию настроек нового виртуального хоста.
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
Теперь откроем скопированный файл, рассмотрим основные директивы и внесем необходимые правки. На данном этапе нам будет интересна только строка, в которой указан путь к директории виртуального хоста. Меняем его на путь к директории, созданной специально для него. Чтобы при обращении Аpache мог перенаправить запрос именно к созданному нами виртуальному хосту.
sudo nano /etc/apache2/sites-available/example.com.conf
Файл дефолтного виртуального хоста:
<VirtualHost *:80> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf</VirtualHost>
<VirtualHost *:80> — в этой строке указываем ip-адрес сервера, а также порт, используемый для этого виртуального хоста. На данный момент мы используем HTTP и один ip-адрес. В связи с этим номер порта 80, адрес не указываем. Настройка HTTPS будет описана ниже.
ServerAdmin webmaster@localhost — строка связи с администратором, необходимо указать активный почтовый адрес отвечающего за обслуживание сервера специалиста. Опционально. Добавим адрес, по которому всегда придут на помощь support@selectel.ru.
DocumentRoot /var/www/html — root-директория или корневой каталог виртуального хоста. Обязательна к применению и настройке. В нашем случае это путь к созданной ранее директории с документом index.html. Вносим изменения:
/var/www/example.com/html
ErrorLog ${APACHE_LOG_DIR}/error.log — путь к файлу с логами сервера. Вносить какие-либо изменения нет необходимости. Здесь будут храниться ошибки запуска демона и ошибки, не относящиеся к клиентам.
CustomLog ${APACHE_LOG_DIR}/access.log combined — это директива для хранения логов клиентского доступа.
Редактирование файла на этом завершается. Это минимальная конфигурация для запуска виртуального хоста на Apache web-сервере. Изменять конфигурацию далее на данном этапе нет необходимости.
Сохраняем и выходим из редактора. Для сохранения используется комбинация Ctrl+o, для выхода Ctrl+x.
Файл с готовой конфигурацией:
<VirtualHost *:80> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com ServerAdmin support@selectel.ru DocumentRoot /var/www/example.com/html # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf</VirtualHost>
Для подключения виртуальных хостов, а также модулей в Apache HTTP-сервере используется набор команд:
a2enmod {модуль} — подключение модуля;
a2dismod {модуль} — отключение модуля;
a2ensite {конфиг виртуального хоста} — подключает виртуальный хост;
a2dissite {конфиг виртуального хоста} — отключает виртуальный хост.
Нам потребуется a2ensite для активации созданного хоста:
sudo a2ensite example.com.conf
И a2dissite для деактивации дефолтного:
sudo a2dissite 000-default.conf
После внесенных изменений требуется перечитать конфигурацию сервера:
sudo systemctl reload apache2
Теперь мы можем обратиться с созданному виртуальному хосту по доменному имени.
В этой инструкции мы не используем dns, поэтому для разрешения имени используем файл hosts.
В windows этот файл расположен здесь: C:\Windows\System32\drivers\etc\hosts.
А в linux/mac: /etc/hosts.
Добавим строчку: 94.0.0.0 example.com.
Где 94.0.0.0 — ранее полученный ip-адрес сервера, а example.com — доменное имя виртуального хоста.
Теперь перейдем в браузер и в адресной строке наберем: example.com.
Получим созданное web-приложение:
SSL для Apache
TLS (transport layer security — протокол защиты транспортного уровня) и предыдущая версия защиты SSL (secure sockets layer — слой защищенных сокетов). Это все протоколы криптографии, созданные для защиты передачи данных между узлами в информационной сети.
Оба протокола используют асимметричное шифрование для аутентификации, симметричное шифрование для конфиденциальности и коды аутентичности сообщений. Подробно останавливаться на теории сейчас нет необходимости. На первоначальном этапе достаточно быть в курсе, что эти протоколы отвечают за сохранность конфиденциальности данных в момент обмена данными между клиентом и сервером. Ключи могут быть самозаверяющими, т.е. созданными и подписанными самим web-сервером.
Такие ключи подходят для использования протокола HTTPS и шифрования данных, но не являются доверенными для сети интернет. Также сертификаты бывают выданными центрами сертификации. Они не только шифруют данные, но также web-браузер знает о таком ключе и доверяет ему по-умолчанию. В таком случае сертификаты платные, но имеется возможность использования бесплатного сервиса Let`s encrypt. С использованием сервиса можно создать и заверить ключ.
В этом случае сертификат будет действительным для сети интернет, но бесплатным. В этой инструкции будет настроено простое шифрование с использованием самозаверяющего ключа, созданного на сервере Apache.
Создать SSL-сертификат на сервере
Чтобы создать и подписать сертификат, потребуется пакет OpenSSL. Он есть в системе, не нужно устанавливать. Сейчас будет создан и подписан сертификат, а также закрытый и открытый ключи будут перемещены в необходимые директории.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/server-example.key -out /etc/ssl/certs/server-example.crt
Расшифровка опций из команды:
req -x509 — опция определения стандарта сертификата (-x509 стандарт инфраструктуры открытого ключа).
-nodes — отказаться от защиты сертификата паролем. Если убрать эту опцию, произойдет запрос пароля для ключа, который необходимо вводить при каждом запуске web-сервера (желательно использовать в продакшене).
-days 365 — срок действия сертификата. Обычно срок устанавливается более длительный, но для тестового сервера достаточно. Также необходимо учитывать, что на web-сервере время и дата должны быть верными.
-newkey rsa:2048 — опция указывает на создание нового сертификата и ключа единовременно. Часть rsa:2048 обозначает размер ключа.
-keyout /etc/ssl/private/server-sample.key — обозначает директорию, в которую необходимо поместить закрытый ключ.
-out /etc/ssl/certs/server-sample.crt- — директория местоположения сертификата.
server-sample.key и server-sample.crt — имена ключа и сертификата.
После ввода команды потребуется ответить на некоторые вопросы, разберем список директив:
Country Name (2 letter code) [AU]:RU — указываем страну.
State or Province Name (full name) [Some-State]:LIP — область.
Locality Name (eg, city) []:Lipetsk — город.
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sel — организацию.
Organizational Unit Name (eg, section) []:Sel — отдел.
Common Name (e.g. server FQDN or YOUR name) []:94.255.255.255 — вводим доменное имя или белый адрес сервера.
Email Address []: — адрес для связи с владельцем ключа. Можно оставить пустым или заполнить почту, аналогичную ServerAdmin в конфигурации веб-сервера.
После выполнения операции требуется подключение модуля SSL для Apache HTTP-сервера. Ранее были разобраны команды для этого действия. Вот так выглядит необходимая:
sudo a2enmod ssl
После включения модуля необходимо перезапустить демона Apache.
Переходим к настройке HTTPS для виртуального хоста. Вносим изменения в файл его настройки.
sudo nano /etc/apache2/sites-available/example.com.conf
Во-первых, меняем директиву <VirtualHost *:80>.
Порт изменится на 443 (порт для протокола HTTPS по умолчанию).
Добавляем директиву SSLEngine on после строки DocumentRoot для включения поддержки SSL на web-сервере.
После этого еще две строки, в которых указан путь к ключу и сертификату:
SSLCertificateFile /etc/ssl/certs/server-example.crt
SSLCertificateKeyFile /etc/ssl/private/server-example.key
Теперь файл конфигурации виртуального хоста выглядит следующим образом:
<VirtualHost *:443> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com ServerAdmin support@selectel.ru DocumentRoot /var/www/example.com/html SSLEngine on SSLCertificateFile /etc/ssl/certs/server-example.crt SSLCertificateKeyFile /etc/ssl/private/server-example.key # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf</VirtualHost>
Перед проверкой по web добавим разрешающее правило безопасности:
sudo ufw allow https
А также перечитаем конфигурацию web-сервера Apache:
sudo systemctl reload apache2
Теперь при запросе сервера по HTTPS:example.com браузер выдаст оповещение о небезопасном сертификате. Проигнорировав его, будет отображено созданное ранее web-приложение.
На этом настройка SSL закончена.
Конфигурационные файлы и директории web-сервера Apache
Приведенные файлы и директории используются для настройки Apache-сервера. В данном документе уникальных настроек не приводится. Этот раздел создан для ознакомительных целей.
/etc/apache2 — директория конфигурационных файлов Apache.
/etc/apache2/apache2.conf — основной файл конфигурации сервера. Он отвечает за множество настроек сервера. Например, включить чтение файла .htaccess необходимо именно здесь.
/etc/apache2/envvars — файл значения переменных среды для Apache.
/etc/apache2/magic — отображает инструкции для определения типа файла на сервере и клиенте.
/etc/apache2/ports.conf — настройка слушающих портов по умолчанию.
/etc/apache2/sites-available/ — директория конфигураций виртуальных хостов.
/etc/apache2/sites-enabled/ — здесь хранится информация об активных виртуальных хостах.
/etc/apache2/conf-available/ — директория настроек хостов, не относящихся к виртуальным.
/etc/apache2/conf-enabled/ — ссылки на включенные хосты, не относящиеся к виртуальным.
/etc/apache2/mods-available/ и /etc/apache2/mods-enabled/ — директории модулей. Модули, а также их настройки расположены здесь.
/var/www — директория для хранения web-приложений. Обычно виртуальные хосты тоже хранят здесь. Может быть изменена.
/var/log/apache2 — директория файлов логирования, содержит в себе два файла, ранее в этой инструкции было описано какой из них за что отвечает.
Безопасность web-сервера Apache
Сервер, который смотрит в интернет, вне зависимости от задач на него возложенных, находится в опасности. Он может быть атакован злоумышленниками с последующим вмешательством в его функциональность. Рассмотрим защиту от доступа неблагонадежных пользователей к серверу по протоколу SSH.
В Linux-системах отличным решением является утилита Fail2ban. Принцип ее работы основан на отслеживании файлов логирования доступа к серверу. По заданному количеству попыток обращений создается правило блокировки ip-адреса, с которого предположительно происходит вторжение.
Установка и настройка Fail2ban
sudo apt-get install fail2ban -y
Утилита из коробки включает защиту от перебора паролей. Но в нашем случае перед включением будут внесены несколько изменений.
/etc/fail2ban/jail.conf — отвечает за настройки безопасности конкретных сервисов.
Вносить изменения в него не рекомендуется, поэтому создадим новый файл с расширением .local. Эти файлы имеют приоритет выше, чем файл .conf для Fail2ban.
sudo nano /etc/fail2ban/jail.local
Внесем настройки для защиты SSH:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
bantime = 60
Построчно:
Директива [sshd] отвечает за защиту доступа по SSH при отказе в авторизации;
enabled = true — состояние;
port = 22 — номер порта;
filter = sshd — имя, по которому идет поиск в логах сервиса;
logpath = /var/log/auth.log — файл журнала, из которого будут взяты результаты поиска по фильтру;
maxretry = 4 — количество неудачных попыток;
bantime = 60 — время блокировки в секундах. Сейчас эта секция добавлена для тестовой инструкции, в продакшене обычно время блокировки больше.
С настройкой закончили, добавим демона fail2ban в загрузку и запустим, а потом проверим его работу.
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Как мы видим, доступ заблокирован после превышения попыток авторизации.
Через 60 секунд доступ появится.
Для того, чтобы разблокировать доступ, принудительно используется команда:
sudo fail2ban-client set sshd unbanip ip_add
ip_add — заблокированный адрес.
Установка и настройка Apache на Windows Server
Рассмотрим также установку HTTP-сервера Apache на операционную систему Windows. В примере будем использовать Microsoft® Windows Server 2019 Standard.
Подготовка системы
Предположим, что операционная система уже установлена на сервер, а также имеется общедоступный IP‑адрес.
Для работы веб-сервера Apache в системе должен быть установлен пакет Microsoft Visual C++ Redistributable, который необходим для запуска приложений, созданных в Microsoft Visual Studio. Подробная информация и ссылки для скачивания различных версий можно найти на странице Microsoft. Мы воспользуемся последним выпуском для платформы x64, ссылку на который копируем в буфер обмена.
Переходим к работе с сервером. В нашем случае он называется Wendy.
Почти вся дальнейшая работа будет выполняться в консоли панели управления. Взаимодействие с операционной системой Windows Server осуществляется через графический интерфейс. Наиболее удобный способ дистанционно работать с ОС Windows — воспользоваться одной из программ, предназначенных для обмена данными по протоколу RDP.
RDP (Remote Desktop Protocol) — это протокол удаленного доступа, разработанный Microsoft. Он позволяет подключаться к другому компьютеру через сетевое соединение, видеть его экран и взаимодействовать с ним через интерфейс программы.
В операционных системах от Microsoft уже встроена утилита «Подключение к удаленному рабочему столу». Также существуют RDP-клиенты для macOS, Linux, Android и iOS.
Использование дополнительного необязательного ПО выходит за рамки данной инструкции, поэтому мы прибегнем к минималистичному, хоть и не самому удобному способу — будем взаимодействовать с сервером через браузер. Для удобства его рабочий стол можно развернуть во весь экран.
Запускаем Internet Explorer и вставляем в адресную строку скопированную ранее ссылку на последнюю версию Visual C++ Redistributable, сохраняем пакет и запускаем установщик.
Установка Apache
На официальной странице веб‑сервера Apache сказано, что для систем Microsoft готовые сборки не поддерживаются. Однако предоставляется список доверенных сайтов, где готовую сборку можно взять. Мы воспользуемся самым первым — apachelounge.com.
Выбирая место на диске для размещения Apache, следует иметь в виду один нюанс. Пакет сконфигурирован так, что без дополнительных действий он будет работать только при установке в корневую папку директории C:\, то есть главный исполняемый файл httpd.exe оказывается в каталоге C:\Apache24\bin. В противном случае, в файле Apache24\conf\httpd.conf необходимо переопределить переменную SRVROOT: изменить значение по умолчанию «c:/Apache24» на актуальный путь файлов веб‑сервера.
Define SRVROOT "c:/Apache24"
Обратите внимание, что для обозначения пути используется слэш, а не обратный слэш!
Мы не рассматриваем в статье глубокую настройку Apache, такую как разрешение выполнять скрипты Perl и CGI. Необходимую информацию можно найти в документации.
Продолжим работу в консоли. Проверим работоспособность веб-сервера. Перейдем в каталог, где находится файлы Apache (по умолчанию, это C: \Apache24) и запустим приложение:
> cd C:\Apache24
> .\httpd.exe
Обратите внимание на точку в начале команды — она задает текущий каталог явно!
Открываем Internet Explorer и ввводим в адресную строку localhost. Должна отобразиться надпись It works.
Покинем временно консоль в панели управления и воспользуемся браузером, который используем в повседневные жизни. Введем в его адресную строку IP-адрес хоста, на котором запущен Apache. В нашем случае — это 5.159.102.111. Страница окажется недоступной — брандмауэр Windows блокирует доступ к серверу.
Настройка правил брандмауэра
Чтобы к Apache можно было достучаться из публичной сети, необходимо добавить правило для межсетевого экрана. Открываем меню Пуск и в строке поиска вводим firewall:
Переходим в раздел углубленных настроек:
Далее в разделе входящих соединений создаем правило для программы, где указываем путь к исполняемого файлу Apache — httpd.exe:
Путь к файлу программы удобнее всего задать, воспользовавшись кнопкой Browse:
На следующем шаге разрешаем соединения:
Убеждаемся, что все галочки выставлены:
Скриншот последнего шага приводить не будем — он очень прост: необходимо придумать произвольное имя для созданного правила.
Вновь покидаем панель управления и возвращаемся к обычному браузеру. Видим, что наш веб-сервер работает и доступен из интернета:
Способы запуска
Обычно сервер выполняется в системе в качестве службы. Для этого можно использовать следующие команды, открыв ту же консоль CMD или powershell:
- httpd.exe -k start — для запуска,
- httpd.exe -k stop — для остановки,
- httpd.exe -k restart — для перезапуска.
Обратите внимание, консоль должна открываться от имени администратора — в противном случае для управления процессом не хватит прав.
Заключение
На этом инструкция по настройке web-сервера Apache завершена. Подведем итог: мы настроили один из самых популярных web-серверов и доступ к нему по протоколу HTTPS , изучили возможность настройки виртуальных хостов и обезопасили сервер от злоумышленников. На данном этапе администратор может самостоятельно обслуживать и настраивать Apache web-сервер на linux.
Другие материалы по работе с Apache
The following will guide you through the process of enabling SSL on a Apache webserver
- The instructions have been verified with OSX El Capitan (10.11.2) running Apache 2.4.16
- The instructions assume you already have a basic Apache configuration enabled on OSX, if this is not the case feel free to consult Gist: “Enable Apache HTTP server (OSX)“
Apache SSL Configuration
Create a directory within /Applications/XAMPP/xamppfiles/etc/
using Terminal.app: sudo mkdir /Applications/XAMPP/xamppfiles/etc/ssl
Next, generate two host keys:
sudo openssl genrsa -out /Applications/XAMPP/xamppfiles/etc/server.key 2048
sudo openssl genrsa -out /Applications/XAMPP/xamppfiles/etc/ssl/localhost.key 2048
sudo openssl rsa -in /Applications/XAMPP/xamppfiles/etc/ssl/localhost.key -out /Applications/XAMPP/xamppfiles/etc/ssl/localhost.key.rsa
Create a configuration file using Terminal.app: sudo touch /Applications/XAMPP/xamppfiles/etc/ssl/localhost.conf
Edit the newly created configuration file and add the following:
[req]
default_bits = 1024
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = *.localhost
Generate the required Certificate Requests using Terminal.app:
sudo openssl req -new -key /Applications/XAMPP/xamppfiles/etc/server.key -subj "/C=/ST=/L=/O=/CN=/emailAddress=/" -out /Applications/XAMPP/xamppfiles/etc/server.csr
sudo openssl req -new -key /Applications/XAMPP/xamppfiles/etc/ssl/localhost.key.rsa -subj "/C=/ST=/L=/O=/CN=localhost/" -out /Applications/XAMPP/xamppfiles/etc/ssl/localhost.csr -config /Applications/XAMPP/xamppfiles/etc/ssl/localhost.conf
Note: Complete the values C= ST= L= O= CN=
to reflect your own organizational structure, where:
C=
eq. Country: The two-letter ISO abbreviation for your country.ST=
eq. State or Province: The state or province where your organization is legally located.L=
eq. City or Locality: The city where your organization is legally located.O=
eq. Organization: he exact legal name of your organization.CN=
eq. Common Name: The fully qualified domain name for your web server
Use the Certificate Requests to sign the SSL Certificates using Terminal.app:
sudo openssl x509 -req -days 365 -in /Applications/XAMPP/xamppfiles/etc/server.csr -signkey /Applications/XAMPP/xamppfiles/etc/server.key -out /Applications/XAMPP/xamppfiles/etc/server.crt
sudo openssl x509 -req -extensions v3_req -days 365 -in /Applications/XAMPP/xamppfiles/etc/ssl/localhost.csr -signkey /Applications/XAMPP/xamppfiles/etc/ssl/localhost.key.rsa -out /Applications/XAMPP/xamppfiles/etc/ssl/localhost.crt -extfile /Applications/XAMPP/xamppfiles/etc/ssl/localhost.conf
Add the SSL Certificate to Keychain Access.
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /Applications/XAMPP/xamppfiles/etc/ssl/localhost.crt
Apache Configuration
Edit the Apache main configuration file /Applications/XAMPP/xamppfiles/etc/httpd.conf
and enable the required modules to support SSL :
LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
LoadModule ssl_module libexec/apache2/mod_ssl.so
Enable Secure (SSL/TLS) connections
Include /private/Applications/XAMPP/xamppfiles/etc/extra/httpd-ssl.conf
Apache Virtual Host Configuration
Edit the Virtual Hosts file /Applications/XAMPP/xamppfiles/etc/extra/httpd-vhosts.conf
and add the SSL Directive at the end of the file:
<VirtualHost *:443>
ServerName localhost
DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs"
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /Applications/XAMPP/xamppfiles/etc/ssl/localhost.crt
SSLCertificateKeyFile /Applications/XAMPP/xamppfiles/etc/ssl/localhost.key
<Directory "/Applications/XAMPP/xamppfiles/htdocs">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
Finally restart Apache using Terminal.app : sudo apachectl restart
Open Safari and visit https://localhost to verify your configuration.
Summary
sudo openssl genrsa -out /Applications/XAMPP/xamppfiles/etc/server.key 2048 sudo openssl genrsa -out /Applications/XAMPP/xamppfiles/etc/ssl/{{replaced extension}}--localhost.key 2048 sudo openssl rsa -in /Applications/XAMPP/xamppfiles/etc/ssl/{{replaced extension}}--localhost.key -out /Applications/XAMPP/xamppfiles/etc/ssl/{{replaced extension}}--localhost.key.rsa sudo openssl req -new -key /Applications/XAMPP/xamppfiles/etc/server.key -subj "/C=CA/ST=ON/L=Toronto/O=dev/CN={{replaced DNS}}/emailAddress={{replaced email}}/" -out /Applications/XAMPP/xamppfiles/etc/server.csr sudo openssl req -new -key /Applications/XAMPP/xamppfiles/etc/ssl/{{replaced extension}}--localhost.key.rsa -subj "/C=CA/ST=ON/L=Toronto/O=dev/CN={{replaced DNS}}/" -out /Applications/XAMPP/xamppfiles/etc/ssl/{{replaced extension}}--localhost.csr -config /Applications/XAMPP/xamppfiles/etc/ssl/{{replaced extension}}-localhost.conf {{add new conf file for each domain }} sudo openssl x509 -req -days 365 -in /Applications/XAMPP/xamppfiles/etc/server.csr -signkey /Applications/XAMPP/xamppfiles/etc/server.key -out /Applications/XAMPP/xamppfiles/etc/server.crt sudo openssl x509 -req -extensions v3_req -days 365 -in /Applications/XAMPP/xamppfiles/etc/ssl/{{replaced extension}}--localhost.csr -signkey /Applications/XAMPP/xamppfiles/etc/ssl/{{replaced extension}}--localhost.key.rsa -out /Applications/XAMPP/xamppfiles/etc/ssl/{{replaced extension}}--localhost.crt -extfile /Applications/XAMPP/xamppfiles/etc/ssl/{{replaced extension}}-localhost.conf {{add new conf file for each domain }} sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /Applications/XAMPP/xamppfiles/etc/ssl/{{replaced extension}}--localhost.crt
Протокол HTTPS позволяет передавать данные между сайтом и пользователем в зашифрованном виде, то есть посторонние лица не могут увидеть содержимое передаваемых данных и изменить их.
Веб-сервер Apache поддерживает работу HTTPS. Для настройки HTTPS на Apache нужен SSL сертификат. Точнее говоря, «SSL сертификат» включает в себя приватный ключ и публичный ключ (сертификат). Также вместе с SSL ключами дополнительно могут присылаться сертификаты центра сертификации, корневой сертификат.
Сертификаты SSL
SSL сертификаты можно разделить на два вида: валидные и самоподписанные.
Сертификат SSL можно сгенерировать у себя на компьютере. Причём можно сгенерировать для любого доменного имени. Но к таким сертификатам у веб-браузеров нет доверия. Поэтому если открыть сайт, защищённый таким сертификатом, то веб-браузер напишет ошибку, что сертификат получен из ненадёжного источника и либо запретит открывать этот сайт, либо предложит перейти на сайт на ваш страх и риск. Это так называемые «самоподписанные сертификаты». Чтобы браузер не выдавал ошибку о ненадёжного сертификате, его нужно добавить в список доверенных. Такие сертификаты подойдут для тестирования веб-сервера и обучению настройки веб-сервера для работы с SSL и HTTPS. Ещё такой сертификат можно использовать на сайте, к которому имеет доступ ограниченный круг лиц (несколько человек) — например, для сайтов в локальной сети. В этом случае они все могут добавить сертификат в доверенные.
Для реального сайта такой сертификат не подойдёт.
Для рабочего окружения нужен валидный сертификат, его можно получить двумя способами:
1) получить тестовый сертификат на 3 месяца (затем его можно продлить)
2) купить сертификат — в этом случае он действует от года и более
Валидный сертификат отличается от самоподписанного тем, что сторонний сервис удостоверяет подлинность этого сертификата. Собственно, оплачивается именно эта услуга удостоверения, а не выдача сертификата.
Данная статья посвящена вопросу, как настроить Apache в Windows для работы с протоколом HTTPS, будет показано, как подключить SSL сертификаты к Apache в Windows. Поэтому для целей тестирования и обучения нам хватит самоподписанного сертификата.
Как сгенерировать SSL сертификат в Windows
У меня веб-сервер установлен в папку C:\Server\bin\Apache24, поэтому если у вас он в другой директории, то подправьте команды под свои условия.
Откройте командную строку Windows (Win+x, далее выберите «Windows PowerShell (администратор)»). В командной строке введите команды:
cmd cd C:\Server\bin\Apache24\bin\ set OPENSSL_CONF=C:\Server\bin\Apache24\conf\openssl.cnf openssl.exe genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out localhost.key openssl.exe req -new -key localhost.key -out localhost.csr
При вводе последней команды появятся запросы на английском языке. Ниже следует их перевод.
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. -----
Перевод:
Вас попросят ввести информацию, которая будет включена в запрос вашего сертификата. То, что вы будете вводить, называется Distinguished Name или DN. Там всего несколько полей, которые можно оставить пустыми. В некоторых полях будут значения по умолчанию. Если вы введёте ‘.’, то поле будет оставлено пустым.
Далее:
Country Name (2 letter code) [AU]:
Перевод:
Двухбуквенное имя страны (двухбуквенный код)
Далее:
State or Province Name (full name) [Some-State]:
Перевод:
Название штата или провинции/области (полное имя)
Далее:
Locality Name (eg, city) []:
Перевод:
Название населённого пункта (например, города)
Далее:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Перевод:
Название организации (т.е. компании).
Далее:
Organizational Unit Name (eg, section) []:
Перевод:
Подразделение организации (т.е. отдел)
Далее:
Common Name (e.g. server FQDN or YOUR name) []:
Перевод:
Общее имя (например, FQDN сервера или ВАШЕ имя). Это самая важная часть — здесь нужно ввести доменное имя. Можете ввести localhost.
Далее:
Email Address []:
Перевод:
Адрес электронной почты
Далее:
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Перевод:
Пожалуйста, введите следующие «дополнительные» атрибуты для отправки с вашим запросом сертификата Пароль запроса: Опциональное имя компании:
Теперь выполните команду:
openssl.exe x509 -req -days 365 -in localhost.csr -signkey localhost.key -out localhost.crt
В результате в каталоге C:\Server\bin\Apache24\bin\ должны появиться три новых файла:
- localhost.key
- localhost.csr
- localhost.crt
Из них нам понадобятся только два:
- localhost.key
- localhost.crt
Как в Windows для Apache подключить SSL сертификаты
При использовании сертификатов для настройки реального веб-сайта, удобнее создать виртуальный хост с примерно следующими настройками:
LoadModule ssl_module modules/mod_ssl.so Listen 443 <VirtualHost *:443> ServerName www.example.com SSLEngine on SSLCertificateFile "/путь/до/www.example.com.crt" SSLCertificateKeyFile "/путь/до/www.example.com.key" </VirtualHost>
Для настройки использования SSL на локальном веб-сервере Apache в Windows следуйте инструкции ниже (в моём случае веб-сервер установлен по этой инструкции, если у вас не так, то отредактируйте пути до файлов).
В каталоге C:\Server\ создайте новую папку certs и переместите туда файлы localhost.key и localhost.crt.
В директории C:\Server\bin\Apache24\conf\ откройте текстовым редактором файл httpd.conf. В самый низ добавьте туда строки:
LoadModule ssl_module modules/mod_ssl.so Listen 443 <VirtualHost _default_:443> DocumentRoot "c:/Server/data/htdocs/" ServerName localhost:443 ServerAdmin admin@example.com ErrorLog "${SRVROOT}/logs/error-ssl.log" TransferLog "${SRVROOT}/logs/access-ssl.log" SSLEngine on SSLCertificateFile "C:\Server\certs\localhost.crt" SSLCertificateKeyFile "C:\Server\certs\localhost.key" </VirtualHost>
Обратите внимание, что вам может понадобиться отредактировать следующие директивы
- DocumentRoot — укажите путь до сайтов на сервере
- ServerName — укажите имя вашего хоста, если это не локалхост
Обратите внимание, что мы не просто поместили эти строки в конфигурационный файл, а заключили их в контейнер VirtualHost. Дело в том, что если этого не сделать, то директива SSLEngine on включит SSL для всего веб-сервера, и даже при попытке открыть сайты на 80 порту, эти подключения будут обрабатываться как HTTPS, что вызовет ошибку «Bad Request. Your browser sent a request that this server could not understand». По этой причине эти настройки помещены в контейнер виртуального хоста. Обратите внимание, что используется ключевое слово _default_ — то есть сюда будут собираться все запросы на 443 порт если они не предназначены для другого хоста, который также настроен. То есть при желании вы можете создать больше виртуальных хостов для работы с HTTPS, при этом вместо _default_ указывайте IP хоста или символ * (звёздочка).
Связанная статья: Виртуальный хост Apache по умолчанию. _default_ и catch-all в Apache
После этого сохраните изменения, закройте файл и перезапустите веб-сервер.
c:\Server\bin\Apache24\bin\httpd.exe -k restart
Для проверки сделанных изменений, перейдите по адресу https://localhost/ (протокол HTTPS). Поскольку сертификат является самоподписанным, то появится такое сообщение:
К самоподписанным сертификатам нет доверия и эту ошибку нельзя убрать без добавления таких сертификатов в доверенные. Для перехода нажмите «Всё равно продолжить».
Как уже было сказано, валидные сертификаты нужно покупать, либо использовать тестовые. В чём подвох использования тестовых сертификатов? Формально, в какой-то момент их могут перестать выдавать, но, на самом деле, уже сейчас многие сайты годами живут с такими тестовыми сертификатами. На современных хостингах настроено автоматическое подключение и продление таких сертификатов — это просто супер удобно. Обычно на хостингах предусмотрено некоторое количество абсолютно бесплатных SSL сертификатов с автоматическим продлением, но за небольшую плату (10 рублей в месяц), можно подключить тестовые сертификаты для любого количества сайтов. Пример такого хостинга здесь.
Решение проблем
При некоторых условиях может возникнуть следующая ошибка:
Can't open C:\Program Files\Common Files\SSL/openssl.cnf for reading, No such file or directory 9112:error:02001003:system library:fopen:No such process:crypto\bio\bss_file.c:72:fopen('C:\Program Files\Common Files\SSL/openssl.cnf','r') 9112:error:2006D080:BIO routines:BIO_new_file:no such file:crypto\bio\bss_file.c:79: unable to find 'distinguished_name' in config problems making Certificate Request 9112:error:0E06D06A:configuration file routines:NCONF_get_string:no conf or environment variable:crypto\conf\conf_lib.c:270:
Главная подсказка в первой строке: Can’t open C:\Program Files\Common Files\SSL/openssl.cnf for reading, No such file or directory — она означает, что возникла ошибка чтения файла C:\Program Files\Common Files\SSL/openssl.cnf из-за того, что он отсутствует.
Файл openssl.cnf поставляется с самим веб-сервером Apache и находится в папке conf. Поэтому есть несколько вариантов, как исправить эту ошибку. Например, можно создать нужные папки и скопировать туда этот файл. Но можно пойти более простым путём — на время создания сертификатов установить переменную окружения OPENSSL_CONF указав в ней правильный путь до файла.
Также нужно переключиться из PowerShell в обычную командную строку Windows, поскольку иначе переменная окружения почему-то не устанавливается. Допустим, сервер размещён в папке C:\Server\bin\Apache24\bin\, тогда файл openssl.cnf расположен по пути C:\Server\bin\Apache24\conf\openssl.cnf, в этом случае, чтобы исправить ошибку Can’t open C:\Program Files\Common Files\SSL/openssl.cnf for reading, No such file or directory нужно выполнить:
cmd cd C:\Server\bin\Apache24\bin\ set OPENSSL_CONF=C:\Server\bin\Apache24\conf\openssl.cnf
Отредактируйте пути в этих командах в соответствии с вашей структурой папок.
Связанные статьи:
- Ошибка «You’re speaking plain HTTP to an SSL-enabled server port» (РЕШЕНО) (100%)
- Apache для Windows (51.2%)
- Как запустить Apache на Windows (51.2%)
- Документация по Apache на русском языке (51.2%)
- Как подключить PHP к Apache на Windows (51.2%)
- Как настроить PHP для работы с get_browser (browscap.ini) в Windows (RANDOM — 50%)