Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Включаем SSL в Apache (Debian или Ubuntu)

Практика



Прежде всего, нам необходимо, чтобы SSL была установлена и Apache имел установленный мод SSL. Проверить - установлен ли OpenSSL можно командой:

# dpkg --list | grep openssl
ii  openssl                             0.9.8k-7ubuntu8.5                 Secure Socket Layer (SSL) binary and related
ii  python-openssl                      0.10-1                            Python wrapper around the OpenSSL library

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


Установка OpenSSL

# aptitude update
# aptitude install openssl


mod_ssl в Apache

Нам необходимо так-же, чтобы в Apache был включен mod_ssl. Проверяем это:

# cd /etc/apache2/mods-enabled
# ls | grep ssl
ssl.conf
ssl.load

Если команда вернула пустоту - нам нужно включить этот мод. Для этого выполняем:

# ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf
# ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load

Тут предполагается, что mod_ssl установлен в Apache. Так, с сервером LAMP он идет сразу, если же Apache собирался Вами из исходников и мода ssl нет, то придется его собрать отдельно.


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

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

# cd /etc/apache2
# mkdir sslcerts
# chown www-data:www-data sslcerts
# cd sslcerts

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

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

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

Заметка. Если процесс зависает и ничего не делает - прерываем его Ctrl+C и вместо "/dev/random" используем "/dev/urandom".

Далее.

# 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.


1) Идем в /etc/apache2/mods-enabled и редактируем файл ssl.conf

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

SSLPassPhraseDialog builtin

и замените на

SSLPassPhraseDialog  |/etc/apache2/sslpwd.sh


2) Открываем на редактирование файл /etc/apache2/ports.conf

В блоке "<IfModule mod_ssl.c>" перед закрытием блока, после строчки "Listen 443" добавляем строчку "NameVirtualHost *:443":

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
    NameVirtualHost *:443
</IfModule>


3) Редактируем файл /etc/apache2/sites-available/default-ssl и меняем в нем "<VirtualHost _default_:443>" на "<VirtualHost *:443>":

<VirtualHost *:443>


4) Создаем новый файл /etc/apache2/sslpwd.sh со следующим содержанием:

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

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

# cd /etc/apache2
# chmod 755 sslpwd.sh


5) Теперь нам надо настроить сам сайт, чтобы он мог работать с SSL. Для этого открываем конфиг нашего сайта из /etc/apache2/sites-enabled/mysite.ru

Вместо mysite.ru - имя файла конфига Вашего сайта.

Для того, чтобы сайт был доступен по 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>
        BrowserMatch ".*MSIE.*" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        SSLCertificateFile      /etc/apache2/sslcerts/mysite.crt
        SSLCertificateKeyFile   /etc/apache2/sslcerts/server.pem
</VirtualHost>

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


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

# /etc/init.d/apache2 restart

Все, сайт mysite.ru будет доступен как через HTTP, так и через HTTPS. Можно HTTP версию прикрыть, конечно. Для этого достаточно убрать всю секцию:

<VirtualHost *:80>
 Актуально для: Apache 2.x и Debian Lenny/Squeeze
создано: 2017-05-09
обновлено: 2020-10-31
2003



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)