Включаем SSL в Apache (FreeBSD)




3505
Включаем SSL в Apache (FreeBSD)
Рейтинг 10 из 10. Голосов: 46
Ваша оценка:
Прежде всего, нам необходимо, чтобы SSL была установлена и Apache имел установленный мод SSL. Проверить - установлен ли OpenSSL можно командой:

# pkg_info | grep openssl
openssl-1.0.0_3     SSL and crypto library

Если команда вернула пустоту - идем ставить OpenSSL - без него работать не будет.


Установка OpenSSL

Переходим в /usr/ports/security/openssl и ставим.

# cd /usr/ports/security/openssl
# make config
// я здесь все оставил по-умолчанию
# make install clean


mod_ssl в Apache

Нам необходимо так-же, чтобы Apache был собран с поддержкой HTTPS/SSL. Проверяем это.

# cd /usr/local/etc/apache22
# cat httpd.conf | grep mod_ssl
LoadModule ssl_module libexec/apache22/mod_ssl.so

Если команда вернула пустоту - у нас, скорее всего, Apache собран без поддержки mod_ssl. В таком случае пересобирываем Apache с поддержкой SSL:

# cd /usr/ports/www/apache22
# make deinstall
# make config
// здесь включаем поддержку mod_ssl
# make reinstall clean


Генерация сертификатов.

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

# cd /usr/local/etc/apache22
# mkdir sslcerts
# chown www:www sslcerts
# cd sslcerts

Теперь приступим к созданию сертификатов.

# openssl genrsa -des3 -rand /dev/random -out server.key 1024

Здесь нас запросят ввести ключевую фразу, используемую в дальнейшем для авторизации ключа сервера. Внимательно вводите эту фразу - она нам понадобится во всех следующих шагах, в том числе ее нужно будет указать в конфиге Apache!

Далее.

# openssl rsa -in server.key -out server.pem
Enter pass phrase for server.key:
writing RSA key

# openssl req -new -key server.key -out mysite.csr

Здесь нас запросят ввести некоторое количество данных, помещаемых в сертификат. Вводите то, что считаете нужным, кроме строчки Common name. В этой строчке необходимо указать FQDN адрес сайта, с которого будет выдаваться сертификат (например, mysite.ru). Если это не сделать, то браузеры будут считать это ошибкой и помечать, что сертификат имеет неправильное Common name. В другой стороны - самоподписанный (как в нашем случае) сертификат они все равно не любят, т. ч. одной ошибкой больше, одной меньше - Ваше дело, особенно если Вы хотите использовать один сертификат на несколько сайтов сразу.

Вместо mysite.csr можно использовать название, похожее на название сайта - это уже файл, относящийся к сайту.

Extra-атрибуты можно не указывать совсем.

Далее.

# openssl x509 -req -days 3650 -in mysite.csr -signkey server.key -out mysite.crt

Цифра 3650 - это количество дней, которые сертификат будет действителен. Стандартное значение - 365 - нередко слишком мало из-за того, что каждый год сертификаты обновлять администраторы забывают.


Здесь следует отметить следующие моменты:

а) Файлы server.* - это файлы, на основе которых будут образованы все остальные сертификаты сайтов. Их генерировали мы один раз.

б) Для другого сайта (второго, третьего и т.д.) файлы server.key и server.pem генерировать не надо!

в) Ключ-фразу придется использовать эту же для генерации остальных сертификатов (для других сайтов).


Настройка Apache

Сертификаты у нас готовы, самое время настроить Apache для поддержки SSL/HTTPS. Для этого откройте файл /usr/local/etc/apache22/httpd.conf на редактирование.


1) Необходимо убедиться, что строчка

LoadModule ssl_module libexec/apache22/mod_ssl.so

раскоментирована.


2) Теперь найдите строчку

NameVirtualHost *:80

и добавьте такую-же строчку, только с портом 443:

NameVirtualHost *:443

Тут предполагается, конечно, что Вы используете концепцию виртуальных хостов (VirtualHost).


3) Найдите строчку:

Include etc/apache22/extra/httpd-ssl.conf

и раскоментируйте ее.


4) Сохраните файл и закройте.

Создайте новый файл /usr/local/etc/apache22/sslpwd.sh со следующим содержанием:

#!/bin/sh
/bin/echo "ваша_ключевая_фраза"

где вместо "ваша_ключевая_фраза" укажите ту фразу, которую Вы использовали при создании сертификатов, тоже в кавычках (так надежнее). И дайте права запуска этому файлу:

# cd /usr/local/etc/apache22
# chmod 755 sslpwd.sh


5) В директории /usr/local/etc/apache22/extra лежит файл httpd-ssl.conf, откройте его на редактирование.

Найдите фразу

SSLPassPhraseDialog builtin

и замените на

SSLPassPhraseDialog  |/usr/local/etc/apache22/sslpwd.sh

Этим мы добиваемся запуска SSLEngine без запроса ключ-фразы из консоли при старте Apache.


6) Найдите в этом же файле строчку "VirtualHost <_default_:443>" и закоментируйте все, включая ее, от нее и вплоть до строчки "</VirtualHost>", включая последнюю, иначе Ваши сайты <VirtualHost> работать не будут.


7) Сохраните файл и закройте.


8) Теперь нам надо настроить сам сайт, чтобы он мог работать с SSL. Для этого открываем конфиг нашего сайта (если конфиги сайтов лежат у Вас прямо в httpd.conf - то открываем его).

Для того, чтобы сайт был доступен по SSL нужно завести отдельный конфиг для 443-го порта. При этом на одинаковое имя сервера (ServerName) может быть как HTTP, так и HTTPS конфиги. Ниже приведен пример конфига сайта, который как раз может быть доступен как по HTTPS, так и по HTTP.

# HTTPS-version
<VirtualHost *:443>
        ServerName      mysite.ru
        ServerAlias     www.mysite.ru
        DocumentRoot    /www/mysite.ru
        DirectoryIndex  index.php
        SSLEngine       on
        SSLCipherSuite  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions  +StdEnvVars
        </FilesMatch>
        <Directory "/usr/local/www/apache22/cgi-bin">
            SSLOptions  +StdEnvVars
        </Directory>
        BrowserMatch ".*MSIE.*" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        SSLCertificateFile      /usr/local/etc/apache22/sslcerts/mysite.crt
        SSLCertificateKeyFile   /usr/local/etc/apache22/sslcerts/server.pem
</VirtualHost>

# And HTTP-version
<VirtualHost *:80>
        ServerName      mysite.ru
        ServerAlias     www.mysite.ru
        DocumentRoot    /www/mysite.ru
        DirectoryIndex  index.php
</VirtualHost>


9) Сохраняем и закрываем.


10) Перезапускаем Apache:

# /usr/local/etc/rc.d/apache22 restart

Все, сайт mysite.ru будет доступен как через HTTP, так и через HTTPS. Можно HTTP версию прикрыть, конечно. Для этого достаточно убрать всю секцию:
<VirtualHost *:80>
Актуально для: Apache 2.x на FreeBSD любой версии
 

Вопросы и ответы

Юра
2018-10-29 18:38:08
Ищешь что-то полезное по установке сертификатов, и на ходишь, спасибо!
Admin
2020-09-04 07:15:38
еще проще это сделать если установить Certbot для Let's Encrypt 1. sudo add-apt-repository ppa:certbot/certbot 2. sudo apt install python-certbot-apache 3. получение сертификата certbot --apache -d example.com -d www.example.com 4. тестирование автообновления certbot renew --dry-run

Оставить комментарий

ответить