Настройка HTTPS в Apache

Сначала приведу пример настройка HTTPS в Apache с использованием самоподписанного ключа.

Создадим ключ и сертификат:

openssl req -new -x509 -days 365 -keyout server.key -out server.pem

На вопрос «Enter PEM pass phrase:» вводим пароль и запоминаем его. На остальные вопросы можно просто нажимать Enter соглашаясь с предложенными вариантами, только на вопрос «Common Name (e.g. server FQDN or YOUR name):» вводим имя сайта, для которого создается сертификат, например www.ixnfo.com.
После ответов на вопросы в директории появятся два файла server.pem и server.crt (ключ и сертификат).
Apache при загрузке будет спрашивать пароль от ключа ранее нами введенный, поэтому снимаем пароль с ключа:

cp server.key{,.orig}
openssl rsa -in server.key.orig -out server.key
rm server.key.orig

Скопируем файлы в директорию /etc/ssl и выставим файлу ключа права чтения только для администратора:

sudo cp server.pem /etc/ssl/certs/
sudo cp server.key /etc/ssl/private/
sudo chmod 0600 /etc/ssl/private/server.key

Активируем ssl модуль apache2:

sudo a2enmod ssl

Включаем настройки default-ssl:

sudo a2ensite default-ssl

Отредактируем файл настроек /etc/apache2/sites-enabled/default-ssl.conf:
После директивы SSLEngine on добавим строку SSLProtocol all -SSLv2 запретив использование устаревшего протокола SSLv2.
Изменим пути к фалам:

SSLCertificateFile  /etc/ssl/certs/server.pem
SSLCertificateKeyFile /etc/ssl/private/server.key

Перезапустим Apache2 чтобы изменения вступили в силу:

sudo service apache2 restart

Протокол HTTPS работает по 443 порту, если используется фаервол, то необходимо открыть этот порт.

Если нужно использовать только HTTPS и запретить HTTP, то активируем mod_rewrite:

sudo a2enmod rewrite

И отредактируем файл /etc/apache2/sites-enabled/000-default.conf:

<VirtualHost *:80>
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

Снова перезапустим Apache2 чтобы изменения вступили в силу:

sudo service apache2 restart

Теперь например при открытии адреса http://www.ixnfo.com, сервер автоматически будет переадресовывать на https://www.ixnfo.com.

Приведу еще пример файла конфигурации для сайта (на примере переадресовываются все http запросы и запросы с www поддомена на домен ixnfo.com):

<VirtualHost *:80>
  ServerAdmin test@ixnfo.com
  ServerName ixnfo.com
  ServerAlias www.ixnfo.com
  Redirect / https://ixnfo.com/
  ErrorLog /var/log/apache2/ixnfo_http_error.log
  LogLevel crit
  CustomLog /var/log/apache2/ixnfo_http_access.log combined
</VirtualHost>

<VirtualHost *:443>
  ServerAdmin test@ixnfo.com
  ServerName www.ixnfo.com
  Redirect / https://ixnfo.com/
  ErrorLog ${APACHE_LOG_DIR}/ixnfo_www_https_error.log
  CustomLog ${APACHE_LOG_DIR}/ixnfo_www_https_access.log combined
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/live/www.ixnfo.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/www.ixnfo.com/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/www.ixnfo.com/chain.pem
        </VirtualHost>

<VirtualHost *:443>
  ServerAdmin test@ixnfo.com
  ServerName ixnfo.com
  DocumentRoot /var/www/ixnfo/
  ErrorLog ${APACHE_LOG_DIR}/ixnfo_https_error.log
  CustomLog ${APACHE_LOG_DIR}/ixnfo_https_access.log combined
  SSLEngine on
  SSLProtocol -all +TLSv1.2 +TLSv1.3
  SSLCertificateFile /etc/letsencrypt/live/ixnfo.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/ixnfo.com/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/ixnfo.com/chain.pem
</VirtualHost>

Как установить подписанный сертификат смотрите в моей статье:
Установка Certbot в Ubuntu

После настройки HTTPS рекомендую, выполнить проверку в некоторых сервисах, например:
https://www.fairssl.net/en/ssltest

Смотрите также мои статьи:
IPTables правила для веб-сервера
Проблема с несколькими SSL на одном IP

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

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