Let’s Encrypt – это некоммерческая организация, которая предоставляет бесплатный, полностью автоматизированный и открытый CA (certificate authority – центр сертификации) сертификат.
Имея такой бесплатный SSL/TLS сертификат вы сможете легко настроить шифрованный HTTPS протокол на своем сайте, тем самым защитит передачу данных между клиентом и сервером, а также повысить ранжирование в поисковых системах (google) и многое другое. Не говоря о красивом зеленом замке в начале вашего любимого домена.
Пошаговая инструкция по созданию бесплатного сертификата для HTTPS протокола от Let’s Encrypt
Устанавливаем клиент Let’s Encrypt на сервер
Подключаемся к серверу по SSH. И переходим, например, в домашнюю директорию:
1 |
cd /home/ |
В нее мы установим клиент Let’s Encrypt. Для этого нам понадобится git, если у вас на сервере уже установлен git, то просто выполните следующие команды:
1 2 |
git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt |
Если у вас не установлен git, то либо установите его следующей командой:
1 |
apt-get install git |
Либо просто распакуйте zip архив из репозитория GitHub:
1 2 3 4 |
wget https://github.com/letsencrypt/letsencrypt/archive/master.zip unzip master.zip mv letsencrypt-master letsencrypt cd letsencrypt |
Проверяем:
1 |
./letsencrypt-auto --help |
В ответ вы увидите следующие:
Все, клиент Let’s Encrypt установлен.
Создаем SSL сертификат для HTTPS протокола на сайт
Перейдем к созданию сертификата Let’s Encrypt. Для этого сначала необходимо остановить nginx:
1 |
service nginx stop |
и запустить команду создания SSL сертификата:
1 |
./letsencrypt-auto certonly --standalone -d devreadwrite.com -d www.devreadwrite.com |
В случае успешного создания сертификата для HTTPS протокола вы увидите примерно следующие
Не забудте поменять доменое имя devreadwrite.com на свое.
В процессе создания сертификата, вам предложат ввести e-mail, для важных сообщений и для восстановления ключа при необходимости. Далее нужно будет согласиться с лицензионным соглашением. Созданный SSL сертификат сертификат и вся цепочка сохранится по следующему пути:
/etc/letsencrypt/live/devreadwrite.com/
Файлы SSL сертификата
В /etc/letsencrypt/live/devreadwrite.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.
Вот мы и получили сертификат. Не забудьте запустить Nginx:
1 |
service nginx start |
Теперь мы можем подключить протокол HTTPS к сайту.
Настройка HTTPS (SSL/TLS) в Nginx
Откройте файл конфигурации Nginx для сайта (обычно это: /etc/nginx/vhosts/userName/) и добавьте следующие строки:
1 2 3 4 5 6 7 8 9 10 11 12 |
server { #... ssl on; ssl_certificate /etc/letsencrypt/live/devreadwrite.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/devreadwrite.com/privkey.pem; ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; ssl_prefer_server_ciphers on; listen server_ip:443 ssl; listen server_ip:80; } |
Далее необходимо перезапустить Nginx:
1 |
nginx service reload |
или
1 |
nginx service restart |
Nginx, 301 редирект с протокола http на https
1 2 3 4 5 6 7 8 9 |
server { #... # force https-redirects if ($scheme = http) { return 301 https://$server_name$request_uri; } } |
Настройка HTTPS (SSL/TLS) в Apache
Откройте файл конфигурации Apache для сайта (обычно это: /etc/apache2/vhosts/userName/) и добавьте следующие строки:
1 2 3 |
SSLEngine on SSLCertificateFile /etc/letsencrypt/live/devreadwrite.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/devreadwrite.com/privkey.pem |
В итоге получится что-то вроде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<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:
1 |
service apache2 restart |
301 редирект с протокола http на https в Apache
Добавьте следующий код в файл .htaccess вашего сайта:
1 2 |
RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] |
Еще ридиректы в Apache: 301 редирект на все случаи жизни с помощью .htaccess.
Дополнительно
Для того чтобы получить зеленый замочек в адресной строке, который будет указывать пользователю что сайт правильно работает по протоколу HTTPS, необходимо все пути к подключаемым файлам (картинкам, css, js, …) поменять с http на https. Так же можно вместо http или https поставить два слеша (//). Например:
1 |
<link rel="stylesheet" type="text/css" href="http://devreadwrite.com/style.css" /> |
заменить на:
1 |
<link rel="stylesheet" type="text/css" href="//devreadwrite.com/style.css" /> |
В таком случае файл будет получен по тому же протаколу в каком был запрошен сайт, в нашем случае https. Или же указать протокол явно.
1 |
<link rel="stylesheet" type="text/css" href="https://devreadwrite.com/style.css" /> |
По такому же принципу можно делать и ссылке на сайте.
Как продлить сертификат
Сертификат выдается на 3 месяца, поэтому за несколько дней до окончания его необходимо продлить.
Для продления сертификата необходимо выполнить команду:
1 |
./letsencrypt-auto renew |
Эту команду вы можете добавить в крон таб, для автоматического продления SSL сертификата.
Плюсы и минусы данного способа создания сертификата
Один и самый большой плюс данного способа – это создание сертификата без танцев с бубном. Существует множество других способов, но этот единственный, который заработал сразу.
Минус данного способа создания SSL сертификата заключается в том, что для создания сертификата необходимо остановит Nginx, следовательно сайты на Nginx во время создания сертификата не будут работать, это примерно 5-10 секунд (по крайней мере на моем сервере).
Результат
В результате мы получаем рабочий SSL сертификат и протокол HTTPS на сайте.
Leave a Reply