Установка SSL-сертификата Let's Encript для кириллического домена на Apache
Процесс установки описан здесь Установка SSL Lets Encript из командной строки на Nginx
Содержание
- 1 Замечания
- 2 Установка
- 2.1 Создаем SSL сертификат для HTTPS протокола на сайт
- 2.2 Файлы SSL сертификата
- 2.3 Настройка HTTPS (SSL/TLS) в Apache
- 2.4 Перенаправление всех запросов с HTTP на HTTPS
- 2.5 Проверка настройки https
- 2.6 Настройка автоматического обновления SSL-сертификатов с помощью планировщика cron
- 2.7 Дополнительно
- 2.8 Плюсы и минусы данного способа создания сертификата
- 3 Ссылки
Замечания
- на 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/
При этом все настройки директорий можно удалить, поскольку по HTTP на ваши сайты всё равно будет не попасть.
Всё, теперь ещё раз перезапустите Apache и убедитесь, что при заходе по HTTP вы автоматически перенаправляетесь на HTTPS страницу.
sudo service apache2 restart
Если Вы используете .htaccess
Использовать файл - .htaccess не рекомендуется на больших сайтах т.к. он замедляет доступ к сайту
301 редирект с протокола http на https в Apache
Добавьте следующий код в файл .htaccess вашего сайта:
RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Проверка настройки https
- проверьте доступность вашего сайта по https
- проверьте перенаправление на https://сайт.рф при попытке набрать http://сайт.рф
- проверьте ваш сайт на проверка SSL сертификатов домена, поддерживает кириллические домены
- проверьте ваш сайт на проверка SSL сертификатов домена, кириллические домены д.б. в пуникоде
Настройка автоматического обновления SSL-сертификатов с помощью планировщика cron
Как продлить сертификат? Сертификат выдается на 3 месяца, поэтому за несколько дней до окончания его необходимо продлить.
Для продления сертификата необходимо выполнить команду:
./letsencrypt-auto renew
Эту команду вы можете добавить в крон таб, для автоматического продления SSL сертификата.
Дополнительно
Для того чтобы получить зеленый замочек в адресной строке, который будет указывать пользователю что сайт правильно работает по протоколу 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 секунд (по крайней мере на моем сервере).
Ссылки
- проверка SSL сертификатов домена, поддерживает кириллические домены
- проверка SSL сертификатов домена, кириллические домены д.б. в пуникоде
Яндекс | Картинки | Видео | Карты | Карты ОСМ | Спутник | Гугл | Вольфрам-Альфа | РуВики | EnWiki