Настройка SSL сертификата для Apache

Настройка 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» завершена.

3 thoughts on “Настройка SSL сертификата для Apache

  1. Преймуществом самоподписанных сертификатов является их бесплатность. Сертификат, подписанных компанией-сертификатором (Certificate authority) стоит денег.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.