Сначала приведу пример настройка 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