X

https на локальном компьютере

При разработке 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 версию сайта.

Т.к. это самоподписанный сертификат, то мы получим предупреждение от браузера типа такого:

Сообщение "HTTPS: Your connection is not secure"

Нажимаем кнопку [Advanced] и в открывшейся панельке [Add Exception..]

Панель "Advanced panel"

В появившемся окне, нажимаем [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

Категории: Apache Сервера

Комментарии (5)

  • Два часа уже ищу информация в сети на эту тему и в итоге либо специалисты пишут для специалистов, что просто смертный хрен поймёт, либо вообще пишут настолько непонятно, как на отебись.

  • "Прежде всего, создаем папку для сертификатов и переходим в неё" - где создаём?
    "Теперь генерируем сертификат для localhost:" - как это вообще и чем можно сделать?

    • Там же прям команды написаны вместе с путем, и для создания папки и для генерации сертификата. Если они у тебя вызывают недопонимание, то стоит потратить 30 минут на какой-нибудь базовый курс в ютубе по консольным командам линукс, станет понятнее что тут написано.

  • SSLEngine on
    SSLCertificateFile /etc/ssl/apache/localhost.crt
    SSLCertificateKeyFile /etc/ssl/apache/localhost.key

    Ошибка в путях: папку вы назвали apache2