Настройка SSL сертификата для Apache
Зачем же нужен SSL сертификат?
С помощью SSL сертификата можно зашифровать вашу информацию на сайте сайта для защиты соединений. Так же, он может давать посетителям сайта информацию о идентификации на виртуального сервера.
Как и где можно получить SSL сертификат?
SSL сертификат можно купить или создать самим. Я именно буду использовать самоподписанный сертификат для своего сайта.
В своей статье «Настройка SSL сертификата для Apache», я расскажу как можно установить и настроить SSL сертификат для Apache. На готовых примерах, я покажу как это сделать. Я использую ОС: Debian 8 и CentOS 6/7.
Установка SSL сертификата для Apache
Для начала нужно установить Apache и модуль для него — mod_ssl. Если не знаете как установить apache, то можно ознакомится с материалом тут:
Установка Apache, PHP с suPHP на CentOS/RedHat/Fedora
Установка Apache mpm-itk на Unix/Linux
Установка Apache2 с PHP5 и MySQL + phpmyadmin для CentOS/RedHat/Fedora
Установка Apache,PHP 5.5.11, MariaDB 5.5.37 на CentOS 6.5
Установка Apache2 с PHP5 и MySQL + phpmyadmin для Debian/Ubuntu/Mint
Установка apache из исходников для FreeBSD (руководство по установке)
И так, apache уже установлен, но нужно еще установить и модуль для работы с SSL сертификатами.
Для CentOS/RHEL/Fedora, выполните команду:
# yum install mod_ssl
Для Debian/Ubuntu, выполните команду:
Данный модуль, уже идет с пакетом Apache, по этому, нужно его включить:
# a2enmod ssl
После включения SSL, необходимо перезапустить веб-сервер чтобы изменения вступили в силу, для этого, выполните команду:
# service apache2 restart
Создание нового каталога
Т.к в RedHat’s apache устанавливается в /etc/httpd, то для хранения сертификатов, я создам новую папку:
# mkdir /etc/httpd/ssl
Т.к в Debian’s apache устанавливается в /etc/apache2, то для хранения сертификатов, я создам новую папку:
# mkdir /etc/apache2/ssl
После чего, можно приступать к генерации сертификата.
Создание самоподписанного сертификата
Сейчас, я создам самоподписанный сертификат который будет работать 365 дней ( 1 год). Все параметры, я опишу немного ниже.
Для CentOS/Fedora/RedHat, выполните команду:
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/apache.key -out /etc/httpd/ssl/apache.crt
Для Ubuntu/Debian, выполните команду:
# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/linux-notes.key -out /etc/apache2/ssl/linux-notes.crt
Теперь, рассмотрим что же выполняют некоторые опции:
- openssl: Это утилита для создания и управления сертификатами, ключами и т.д.
- req: Это субкоманда, которая создает подпись X.509 (CSR) для управления сертификатом. X.509 является открытым ключом, с помощью которого, можно создать свой самоподписанный сертификат.
- -x509: Эта опция указывает, что мы хотим сгенерировать файл сертификата с собственной подписью вместо генерации запроса на сертификат.
- -nodes: С этой опцией я создам ключ который будет зашифрован с помощью парольной фразы. Имея защищенный паролем ключ, я должен буду вводить вводить пароль каждый раз при перезапуске службы. Я нажну «ENETR» и оставлю пустой пароль.
- -days 365: Это указывает, что сертификат будет действителен в течение одного года.
- -newkey rsa:2048: Эта опция служит для создания сертификата и нового закрытого ключа. Это необходимо, так как я не создал секретный ключ заранее. RSA: 2048 сгенерирует ключ RSA с 2048 битным шифрованием.
- -keyout: Этот параметр задаст выходной файла для файла секретного ключа, который создается.
- -out: Этот параметр задаст выходной файла для сертификата, который я генерирую.
Входе генерации сертификата, нужно ввести некоторые данные:
Country Name (2 letter code) [XX]:UA State or Province Name (full name) []:nvs Locality Name (eg, city) [Default City]:Lugansk Organization Name (eg, company) [Default Company Ltd]:linux-notes Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:linux-notes.org Email Address []:solo.metal@bigmir.net
Чтобы не вводить это, можно задать нужные параметры при вводе команды, например:
# openssl req -nodes -newkey rsa:2048 -nodes -keyout /etc/apache2/ssl/linux-notes.key -out /etc/apache2/ssl/linux-notes.crt -subj "/C=UA/ST=Lugansk/L=Lugansk/O=linux-notes Ltd./OU=IT/CN=linux-notes.org"
Настройка SSL сертификата для Apache
И так, уже все есть, сертификат создан и можно приступать к настройке. Для этого, открываем виртуальный хост (если нет, можно создать новый):
Конфигурационный файл(ы) в RedHat’s можно создать:
# vim /etc/httpd/conf.d/linux-notes.org.conf
Конфигурационный файл(ы) в Debian’s можно создать:
# vim /etc/apache2/conf.d/linux-notes.org.conf
Мой конфиг выглядит следующим образом:
<IfModule mod_ssl.c> <VirtualHost linux-notes.local:443> ServerName linux-notes.local ServerAlias www.linux-notes.local ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error-linux-notes.local.log CustomLog ${APACHE_LOG_DIR}/access-linux-notes.local.log combined SSLEngine on SSLCertificateFile /etc/ssl/apache.pem SSLCertificateKeyFile /etc/ssl/apache.crt <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
Конфиг готов и осталось совсем немногое.
Можно создать перенаправление с 80-порта на 443-й, для этого, нужно прописать перенаправление:
<VirtualHost *:80> ServerName linux-notes.org RewriteEngine On RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [redirect=301] </VirtualHost> <VirtualHost *:443> ServerName linux-notes.org DocumentRoot /var/www/linux-notes.org SSLEngine on SSLCertificateFile /etc/ssl/apache.pem SSLCertificateKeyFile /etc/ssl/apache.crt ErrorLog ${APACHE_LOG_DIR}/error-linux-notes.local.log CustomLog ${APACHE_LOG_DIR}/access-linux-notes.local.log combined </VirtualHost>
Настройка вашего брандмауэра
После всех изменений, необходимо так же, пробросить порт (443) для работы веб-сервера (apache), для этого я добавн правило в IPtables:
# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Перезапуск Apache
Перед перезапуском апача, стоит проверить правильный ли синтаксис, можно сделать это с помощью следующей команды:
# httpd -t
Это команда для RPM’s систем, для DEB’s систем найдите сами.
На Debian/Ubuntu:
Теперь, когда я настроил SSL в виртуальном хосте, необходимо включить его:
# a2ensite linux-notes.org.conf
и после этого можно перезапускать апач:
# /etc/init.d/httpd restart
На CentOS/RedHat/Fedora:
# service httpd restart
Открываем сайт, и смотрим что получилось:
https://IP_or_HOST
Вот и все, все настроено и готово к использованию. Моя тема «Настройка SSL сертификата для Apache» завершена.
Где мы получили файл apache.pem, как понял просто меняем расширение?
Да, можно с таким именем сгенерировать. Просто поменять названия.
Преймуществом самоподписанных сертификатов является их бесплатность. Сертификат, подписанных компанией-сертификатором (Certificate authority) стоит денег.