При разработке AMP версии (см https://www.ampproject.org) одного проекта, столкнулся с тем, что формы требуют наличие https для домена. Разработку веду на локальном веб-сервере, поэтому https-а там не было. В этой статье расскажу как настроить..
В этот раз я использовал локальный веб-сервер "Apache 2", поэтому далее речь пойдет именно про его настройку.
Прежде всего, создаем папку для сертификатов и переходим в неё:
sudo mkdir -p /etc/ssl/apache2 cd /etc/ssl/apache2
Теперь генерируем сертификат для localhost:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout localhost.key \ -out localhost.crt
Отвечаем на простые вопросы, вводимая информация особо не важна, т.е. можно ввести что угодно
Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York Organization Name (eg, company) [Internet Widgits Pty Ltd]:Home Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:localhost Email Address []:no-reply@localhost
На выходе, получаем два файлика: localhost.key и localhost.crt
Теперь, добавляем модуль mod_ssl в апач:
sudo a2enmod ssl
Далее открываем файл конфигурации виртуального хоста и добавляем инструкции по подключению SSL.
Например, если для обычного http у вас была вот такая запись конфигурации
<VirtualHost *:80> ServerName mysite.loc ServerAlias www.mysite.loc ServerAdmin webmaster@mysite.loc DocumentRoot /work/progr/webamp/sites/mysite.loc/public_html/web <Directory "/work/progr/webamp/sites/mysite.loc/public_html/web"> AllowOverride All Options FollowSymLinks Require all granted RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php DirectoryIndex index.php index.html </Directory> <IfModule mpm_itk_module> AssignUserId vitto vitto </IfModule> php_admin_value open_basedir "/work/progr/webamp/sites/mysite.loc/public_html:/work/progr/webamp/sites/mysite.loc/tmp:/tmp" php_value upload_tmp_dir "/work/progr/webamp/sites/mysite.loc/tmp" php_value session.save_path "/work/progr/webamp/sites/mysite.loc/tmp" php_flag display_startup_errors on php_flag display_errors on php_flag html_errors on php_flag log_errors off php_value error_reporting -1 ErrorLog /work/progr/webamp/sites/mysite.loc/logs/error.log CustomLog /work/progr/webamp/sites/mysite.loc/logs/access.log combined </VirtualHost>
то добавляем еще одну конфигурацию, вот такую
<VirtualHost *:443> ServerName mysite.loc ServerAlias www.mysite.loc ServerAdmin webmaster@mysite.loc DocumentRoot /work/progr/webamp/sites/mysite.loc/public_html/web SSLEngine on SSLCertificateFile /etc/ssl/apache2/localhost.crt SSLCertificateKeyFile /etc/ssl/apache2/localhost.key <Directory "/work/progr/webamp/sites/mysite.loc/public_html/web"> AllowOverride All Options FollowSymLinks Require all granted RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php DirectoryIndex index.php index.html </Directory> <IfModule mpm_itk_module> AssignUserId vitto vitto </IfModule> php_admin_value open_basedir "/work/progr/webamp/sites/mysite.loc/public_html:/work/progr/webamp/sites/mysite.loc/tmp:/tmp" php_value upload_tmp_dir "/work/progr/webamp/sites/mysite.loc/tmp" php_value session.save_path "/work/progr/webamp/sites/mysite.loc/tmp" php_flag display_startup_errors on php_flag display_errors on php_flag html_errors on php_flag log_errors off php_value error_reporting -1 ErrorLog /work/progr/webamp/sites/mysite.loc/logs/error.log CustomLog /work/progr/webamp/sites/mysite.loc/logs/access.log combined </VirtualHost>
В ней мы поменяли порт с 80 на 443 в теге VirtualHost и добавили подключение SSL сертификатов, вот этими командами:
... SSLEngine on SSLCertificateFile /etc/ssl/apache2/localhost.crt SSLCertificateKeyFile /etc/ssl/apache2/localhost.key ...
Теперь перезапускаем apache:
sudo systemctl restart apache2
И можно переходить на https версию сайта.
Т.к. это самоподписанный сертификат, то мы получим предупреждение от браузера типа такого:
Нажимаем кнопку [Advanced] и в открывшейся панельке [Add Exception..]
В появившемся окне, нажимаем [Get certificate] и затем [Confirm Security Exception]
После этих манипуляций, сайт заработает через https протокол.
--[добавлено 30.08.2018]--
Так же можно добавить автоматический редирект всех запросов с http на https. Для этого в файл .htaccess в корне сайта, добавляем (желательно сразу после RewriteEngine on)
RewriteEngine on ... # Если не https, редиректим на https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] ...
Теперь если зайти по адресу http://domain.tld/param, вас автоматически перенаправит на https://domain.tld/param
Комментарии (5)
Два часа уже ищу информация в сети на эту тему и в итоге либо специалисты пишут для специалистов, что просто смертный хрен поймёт, либо вообще пишут настолько непонятно, как на отебись.
"Прежде всего, создаем папку для сертификатов и переходим в неё" - где создаём?
"Теперь генерируем сертификат для localhost:" - как это вообще и чем можно сделать?
Там же прям команды написаны вместе с путем, и для создания папки и для генерации сертификата. Если они у тебя вызывают недопонимание, то стоит потратить 30 минут на какой-нибудь базовый курс в ютубе по консольным командам линукс, станет понятнее что тут написано.
SSLEngine on
SSLCertificateFile /etc/ssl/apache/localhost.crt
SSLCertificateKeyFile /etc/ssl/apache/localhost.key
Ошибка в путях: папку вы назвали apache2
Спасибо, исправил!