Установка SSL-сертификата Let's Encript для кириллического домена на Apache

Материал из ТХАБ.РФ
Перейти к: навигация, поиск

Процесс установки описан здесь Установка SSL Lets Encript из командной строки на Nginx

Замечания[править]

  • на 25.03.2017 Let's Encript поддерживает кириллические домены
  • название домена надо вводить Пуникодом
  • почту админа (требуется в процессе регистрации) надо указывать на латинском домене например admsite@yandex.ru, почта вида admin@ИмяДомена.рф пока не принимается.
  • имя сайта пуникодом необходимо будет добавить
  • Добавлять в SSLсертификат домен www.ИмяДомена.рф не стоит, имеет смысл сделать перенаправление на ИмяДомена.рф

Установка[править]

Устанавливаем клиент Let’s Encrypt на сервер

Подключаемся к серверу по SSH. И переходим, например, в домашнюю директорию:

cd /home/

В нее мы установим клиент Let’s Encrypt. Для этого нам понадобится git, если у вас на сервере уже установлен git, то просто выполните следующие команды:

sudo git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

Если у вас не установлен git, то либо установите его следующей командой:

sudo apt-get install git

Либо просто распакуйте zip архив из репозитория GitHub:

wget https://github.com/letsencrypt/letsencrypt/archive/master.zip
unzip master.zip
mv letsencrypt-master letsencrypt
cd letsencrypt

Устанавливаем скачанный клиент letsencrypt, для чего запускаем установочный скрипт:

./letsencrypt-auto --help

После установки клиента letsencrypt, и сопутствующего ПО, в конце появится страница с описанием справки по клиенту letsencrypt.

Все, клиент Let’s Encrypt установлен.

Создаем SSL сертификат для HTTPS протокола на сайт[править]

Перейдем к созданию сертификата Let’s Encrypt. Для этого сначала необходимо остановить веб-сервер Apache:

sudo service apache2 stop

и запустить команду создания SSL сертификата, не забудьте поменять доменное имя site.com на свое.

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

./letsencrypt-auto certonly --standalone -d site.com -d www.site.com

Для кириллического домена его имя необходимо указать в пуникоде, например так (для сайт.рф -> xn--80aswg.xn--p1ai ):

./letsencrypt-auto certonly --standalone -d xn--80aswg.xn--p1ai -d www.xn--80aswg.xn--p1ai

или если без под домена www:

./letsencrypt-auto certonly --standalone -d xn--80aswg.xn--p1ai

В случае успешного создания сертификата для HTTPS протокола вы соответствующее сообщение.

Созданный SSL сертификат и вся цепочка сохранится по следующему пути:

/etc/letsencrypt/live/site.com/

или для кириллического домена :

/etc/letsencrypt/live/xn--80aswg.xn--p1ai/

Файлы SSL сертификата[править]

В /etc/letsencrypt/live/site.com/ будут следующие файлы:

  • privkey.pem - приватный ключ для сертификата. В Apache он используется в директиве SSLCertificateKeyFile. В Nginx используется в директиве ssl_certificate_key.
  • cert.pem - сертификат сервера. Его требует директива Apache SSLCertificateFile.
  • chain.pem - связка всех сертификатов, которые обслуживаются браузером, за исключением cert.pem. 'Используется [[Apache[[ SSLCertificateChainFile.
  • fullchain.pem - вся связка сертификатов (объединение chain.pem и cert.pem). Используется в Nginx для ssl_certificate.

Вот мы и получили сертификат. Не забудьте запустить Apache:

sudo service apache2 start

Настройка HTTPS (SSL/TLS) в Apache[править]

Откройте файл конфигурации Apache для сайта (обычно это: /etc/apache2/sites-available/ИмяCайта-ssl.conf или /etc/apache2/vhosts/userName/ ) и добавьте следующие строки: , если его нет скопируйте из /etc/apache2/sites-available/ИмяCайта.conf

Добавте в него строки:

SSLEngine on # Включаем SSL
SSLCertificateFile /etc/letsencrypt/live/devreadwrite.com/cert.pem # Путь к файлу сертификата сервера
SSLCertificateKeyFile /etc/letsencrypt/live/devreadwrite.com/privkey.pem # Путь к файлу приватного ключа

Менять расположение файлов не рекомендуется т.к. через 3 месяца их придётся обновлять скриптом,

В итоге получится что-то вроде:

<IfModule mod_ssl.c>
   <VirtualHost _default_:443>
       ServerAdmin #... webmaster@localhost
       DocumentRoot #... /var/www/html
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined

       SSLEngine on
       SSLCertificateFile /etc/letsencrypt/live/devreadwrite.com/cert.pem
       SSLCertificateKeyFile /etc/letsencrypt/live/devreadwrite.com/privkey.pem

       #...
   </VirtualHost>
</IfModule>

Перезапускаем Apache:

service apache2 restart

Перенаправление всех запросов с HTTP на HTTPS[править]

Стандартными средствами Apache 2.4[править]

В файл

/etc/apache2/sites-available/ИмяCайта.conf

Если вы хотите запретить использование HTTP, то самым разумным будет перенаправлять все HTTP запросы к страницам на их HTTPS адрес. Сделаем это с помощью mod_alias. Если он не включён — включаем:

sudo a2enmod alias
sudo service apache2 restart

Затем изменяем файл /etc/apache2/sites-enabled/000-default.conf, отвечающий за виртуальный хост по умолчанию для HTTP запросов. В этот файл добавляем директиву

Redirect / https://example.com/

или для кириллических сайтов

Redirect / https://ИмяСайта-в-Пуникод/

для исключения двойного перенаправления желательно сделать ссылку на начальный файл, например

Redirect / https://ИмяСайта-в-Пуникод/index.html


  • в папке etc/apache2/sites-avaible/имя-сайта.conf - в котором сделано перенаправление (редирект) указать https://тхаб.рф/wiki/ЗаглавнаяСтраница, а не просто https://тхаб.рф/ - это позволит избежать двойного перенаправления проверить можно на сайтах которые измеряют скорость сайта.

При этом все настройки директорий можно удалить, поскольку по HTTP на ваши сайты всё равно будет не попасть.

Всё, теперь ещё раз перезапустите Apache и убедитесь, что при заходе по HTTP вы автоматически перенаправляетесь на HTTPS страницу.

sudo service apache2 restart
  • в файле robot.txt - исправить http на https

Если Вы используете .htaccess[править]

Использовать файл - .htaccess не рекомендуется на  больших сайтах т.к. он замедляет доступ к сайту из за того что каждый раз ищет в папке файл .htaccess. Но для сайтов с небольшой посещаемостью и вннутри корпоративных сайтов это не критично.
301 редирект с протокола http на https в Apache

Добавьте следующий код в файл .htaccess вашего сайта:

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Внесите исправление в файл robors.txt (если Вы его используете)[править]

Директива Host должна содержать:

  • Указание на протокол HTTPS, если зеркало доступно только по защищенному каналу (Host: https://myhost.ru).
  • если сайт зарегистрирован в {{яндекс вебмастер]] то необходимо добавить ещё такой же сайт но с указанием протокола https? например к сайту http://сайт.рф добавить https://сайт.рф .

Проверка настройки https[править]

Настройка автоматического обновления SSL-сертификатов с помощью планировщика cron[править]

Как продлить сертификат? Сертификат выдается на 3 месяца, поэтому за несколько дней до окончания его необходимо продлить.

Для продления сертификата необходимо выполнить команду:

./letsencrypt-auto renew

Эту команду вы можете добавить в крон таб, для автоматического продления SSL сертификата.

Обновление SSL-сертификата в ручную[править]

Сначала обновите всё ПО и получите последнюю версию letsencritp

sudo apt-get update
sudo apt-get upgrade

Из папки куда был установлен letsencript (обычно папка Home/ИмяПользователя/letsencript ) необходимо выполнит скрипт

./letsencrypt-auto --renew-by-default

При обновлении сертификатов спросит:

  • о количестве доменов, (если 1 домен то необходимо нажать enter)
  • о необходимости
    • 1. использовать для сайта возможность доступа по http и https
    • 2. использовать для сайта только https и перенаправлять http на https необходимо выбрать вариант 1 или 2

Проверьте доступность сайта и срок действия нового сертификата.

Дополнительно[править]

Для того чтобы получить зеленый замочек в адресной строке, который будет указывать пользователю что сайт правильно работает по протоколу HTTPS, необходимо все пути к подключаемым файлам (картинкам, css, js, ...) поменять с http на https. Так же можно вместо http или https поставить два слеша (//). Например:

<link rel="stylesheet" type="text/css" href="http://devreadwrite.com/style.css" />

заменить на:

<link rel="stylesheet" type="text/css" href="//devreadwrite.com/style.css" />

В таком случае файл будет получен по тому же протаколу в каком был запрошен сайт, в нашем случае https. Или же указать протокол явно.

<link rel="stylesheet" type="text/css" href="https://devreadwrite.com/style.css" />

По такому же принципу можно делать и ссылке на сайте.

Плюсы и минусы данного способа создания сертификата[править]

Один и самый большой плюс данного способа - это создание сертификата без танцев с бубном. Существует множество других способов, но этот единственный, который заработал сразу.

Минус данного способа создания SSL сертификата заключается в том, что для создания сертификата необходимо остановит Nginx, следовательно сайты на Nginx во время создания сертификата не будут работать, это примерно 5-10 секунд (по крайней мере на моем сервере).

См. также[править]

Ссылки[править]


Яндекс | Картинки | Видео | Карты | Карты ОСМ | Спутник | Гугл | Вольфрам-Альфа | РуВики | EnWiki