Устанавливаем клиент Let’s Encrypt на сервер
Подключаемся к серверу по SSH. И переходим, например, в домашнюю директорию:
cd /home/
В нее мы установим клиент Let’s Encrypt. Для этого нам понадобится git, если у вас на сервере уже установлен git, то просто выполните следующие команды:
git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt
Если у вас не установлен git, то либо установите его следующей командой:
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-auto --help
В ответ вы увидите следующие:
Все, клиент Let’s Encrypt установлен.
Создаем SSL сертификат для HTTPS протокола на сайт
Перейдем к созданию сертификата Let’s Encrypt. Для этого сначала необходимо остановить nginx:
service nginx stop
и запустить команду создания SSL сертификата:
./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:
service nginx start
Теперь мы можем подключить протокол HTTPS к сайту.
Настройка HTTPS (SSL/TLS) в Nginx
Откройте файл конфигурации Nginx для сайта (обычно это: /etc/nginx/vhosts/userName/) и добавьте следующие строки:
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:
nginx service reload
или
nginx service restart
Nginx, 301 редирект с протокола http на https
server { #... # force https-redirects if ($scheme = http) { return 301 https://$server_name$request_uri; } }
Настройка HTTPS (SSL/TLS) в Apache
Откройте файл конфигурации Apache для сайта (обычно это: /etc/apache2/vhosts/userName/) и добавьте следующие строки:
SSLEngine on SSLCertificateFile /etc/letsencrypt/live/devreadwrite.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/devreadwrite.com/privkey.pem
В итоге получится что-то вроде:
<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
301 редирект с протокола http на https в Apache
Добавьте следующий код в файл .htaccess вашего сайта:
RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Еще ридиректы в Apache: 301 редирект на все случаи жизни с помощью .htaccess.
Дополнительно
Для того чтобы получить зеленый замочек в адресной строке, который будет указывать пользователю что сайт правильно работает по протоколу 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" />
По такому же принципу можно делать и ссылке на сайте.
Как продлить сертификат
Сертификат выдается на 3 месяца, поэтому за несколько дней до окончания его необходимо продлить.
Для продления сертификата необходимо выполнить команду:
./letsencrypt-auto renew
Эту команду вы можете добавить в крон таб, для автоматического продления SSL сертификата.
Плюсы и минусы данного способа создания сертификата
Один и самый большой плюс данного способа - это создание сертификата без танцев с бубном. Существует множество других способов, но этот единственный, который заработал сразу.
Минус данного способа создания SSL сертификата заключается в том, что для создания сертификата необходимо остановит Nginx, следовательно сайты на Nginx во время создания сертификата не будут работать, это примерно 5-10 секунд (по крайней мере на моем сервере).
Результат
В результате мы получаем рабочий SSL сертификат и протокол HTTPS на сайте.
Комментарии
А почему сертификат выдается только на 3 месяца?
ОтветитьПолитика Let’s Encrypt такова, что все должно быть автомитизировано. Т.е. все действия по продлению SSL сертификата должны быть настроены один раз и в дальнейшем продление SSL сертификата должны выполнятся автоматически, без вмешательства администратора. Поэтому только 3 месяца.
ОтветитьЕще пару вопросов. Не могу найти на инструкцию по продлению сертификата, где она?
ОтветитьВы уже использовали такой сертификат?
Статьи по продлению SSL сертификата еще нет. Т.к. проверить работоспосбность ее я не могу (Let’s Encrypt не дает продлевать SSL каждый день). Как только я буду убежден что она (инструкция) работает, то выложу ее.
ОтветитьДа использовал. Сейчас даже сами хостеры заказывают сертификаты для всех доменов. Если вы пользуетесь услугами стороннего хостера, то можете подключить SSL сертификат без проблем, за вас все сделает хостер, если уже не сделал. Ну кроме 301-го редиректа на HTTPS конечно.
Ясно, буду пробовать, спасибо
ОтветитьУ меня желтый замок, а не зеленый, что я делаю не так?
ОтветитьПохоже, что не все скрипты или картинки подключаются по HTTPS протоколу, проверьте
ОтветитьОтличная статья, пошел устанавливать сертификат \ (•◡•) /
ОтветитьПри выполнении команды:
Ответитьmv letsencrypt-master letsencrypt
Ошибка:
mv: cannot stat 'letsencrypt-master': No such file or directory
Архив распокован в директорию certbot-master. Выполнил команду:
Ответитьmv certbot-master letsencrypt
И все заработало
А как насчет кириллических доменов? Пишет, что не поддерживает:
ОтветитьPunycode domains are not presently supported: my.cyrillic.domain.name
Пока еще нет. Согласно будущим улучшениям https://letsencrypt.org/upcoming-features/ (поддержка IDN) планируется реализовать (добавить) до конца августа 2016 года.
ОтветитьТак что надо еще немного подождать ◉_◉
А еще есть варианты бесплатного сертификата для https протокола?
ОтветитьЕсть, сегодня постараюсь описать
ОтветитьОк, мне не к спеху подожду)
ОтветитьВот: https://кодер.укр/записи/wosing-бесплатный-ssl-сертификат-и-https-протокол-для-сайт-на-3-года-пошаговая-инструкция
ОтветитьБудет работать для кириллических доменов
Ага, спс
ОтветитьМинус wosing он не работает на мобилках, то есть они сразу отсеиваются :(
ОтветитьРаботает. Нужно правильно настроить апач
ОтветитьSSLCertificateFile "/var/www/httpd-cert/userName/site.com.crt"
SSLCertificateKeyFile "/var/www/httpd-cert/userName/site.com.key"
SSLCACertificateFile "/var/www/httpd-cert/userName/site.com.crt"
Вот и все)
Ответить-----------------------------------------
Хорошая статья, спасибо автору!
ОтветитьКто нибудь подскажет как настроить в связке apache24 + nginx frontend (freebsd 10)
ОтветитьВсе сделал по инструкции, apache и nginx стартовали без ошибок но сайт по https не доступен.
Разобрался! Это моя невнимательность, неправильно прописал прокси. :-)
ОтветитьА у Вас, между прочим, с сертификатом на этом сайте проблемки: "информация о подлинности сертификата отсутствует".
ОтветитьНа сайте все нормально, подтверждение есть. Просто на текущей странице используются картинки с http протокола, вот и все. А так все нормально
ОтветитьЕсли на сайте будут ссылки на http:// то будет желтый значок. Это например счетчик или реклама.
ОтветитьОтличная статья
ОтветитьДобрый день!
ОтветитьПодскажите пожалуйста, где находится Сертификат домена и Промежуточный сертификат?
С уважением, Руслан
Здравствуйте, все должно быть здесь: /etc/letsencrypt/
ОтветитьЗдравствуйте!
При команде
сервис виснет.
Пробовал :
Результат один
Посмотрел логи:
Ответить
Возможно ошибаюсь, но зоны разные .com и .net
ОтветитьА есть способ получить сертификат под винду, если доступа к файлам извне нет?
Ответитьc 2014 года локальные сертификаты не выдают и на ip сертификаты не выдают
Ответитьесли вы на локале хотите попробовать https то по любому мануалу сгенерите через openssl ключи под локальный домен и включите ssl на сервере и все
Это если я вас правильно понял.
Может кому-то пригодится HTTPS для локального хоста
ОтветитьСпасибо за инструкцию, все установилось и работает.
ОтветитьИз под терминала автопродление работает, но с автопродлением по крону есть проблемы, похоже команду ./letsencrypt-auto renew нужно писать в кроне как-то по другому:
Cron Daemon выдает ошибку: su: must be run from a terminal, и в логах пишет, что нельзя применять sudo.
Есть идеи, как сделать правильно?
в кроне нужно писать полный путь до скрипта
Ответитьи крон должен быть из под пользователя root
Ответитьв кроне не пишется sudo
У меня написан полный путь до скрипта:
Ответить30 2 * * 1 /home/letsencrypt/letsencrypt-auto renew >> /var/log/letsencrypt-renew.logЧто нужно изменить?
crontab из под какого пользователя?
Ответитьесли я не ошибаюсь, у letsencrypt есть ограничение по частоте запросов, то есть не чаще месяца или двух можно запрашивать сертификат, как тотак
crottab из под root
ОтветитьЗапрашивать сертификат можно хоть каждую минуту - но в ответ будет отказ в продлении. Из под терминала запрос уходит без проблем.
Есть подозрение, что что-то не так с кроном.
ОтветитьЧто пишет в таком случае?
Крон работает - на нем еще есть пяток задач, с ними нет проблем.
30 2 * * 1 /home/letsencrypt/letsencrypt-auto renew пишет:В случае
"sudo" is not available, will use "su" for installation steps...
Bootstrapping dependencies for Debian-based OSes...
su: must be run from a terminal
apt-get update hit problems but continuing anyway...
su: must be run from a terminalОтветить
Решено.
ОтветитьНужно было дописать автора запроса - "root", вот так:
А для сайта на wordpress эта инструкция тоже подойдет?
ОтветитьСертификат нужно ставить когда уже сайт залит на хостинг или можно когда есть домен, но сайт еще на локальном сервере?
Сертификат подкреплен к домену и от движка не зависит, так что, да на wordpress подойдет и можно подключать на пустой домен.
ОтветитьРебята, хелп
ОтветитьПри выполнении команды
./letsencrypt-auto certonly --standalone -d domain.com -d www.domain.com
появляется следующее:
could not bind TCP port 443 because it is already in use by another process on this system (such as a web server). please stop the program in questions and then try again
Скажите, как решить эту проблему?
Кто-то использует порт 443. Может nginx?
ОтветитьНайдите процесс который использует этот порт и остановите его на время выполнения команды
ОтветитьНа время продления сертификата нужно останавливать nginx, в ручную из-под консоли так:
Ответитьservice nginx stop
...
service nginx start
Как это сделать в кроне для автоматического обновления?
Попробуйте так
или так
Ответить
Инструкция начинается со слов: "Подключаемся к серверу по SSH". А если SSH нет, возможно ли получить сертификат без этого?
ОтветитьЕсли нет SSH, то добавить не получится.
ОтветитьЕсли нет SSH, то у вас наверное простой хостинг от провайдера. Сейчас у всех хостинг провайдеров есть возможность добавлять сертификаты Let’s Encrypt из их панели управления, если у вас такой возможности нет, можете обратиться в тех. поддержку или сменить хостинг ;)
Спасибо, годная статья!
Ответить+ к карме
После добавления SSL сертификата для домена, его можно проверить здесь: https://www.ssllabs.com/ssltest/index.html или https://www.ssllabs.com/ssltest/analyze.html?d=domain.name
Если вы все сделали по инструкции и получили общую оценку (класс) "B":
То для того что бы получить общую оценку (класс) "A", нужно в файл конфигурации Apache для сайта (обычно это: /etc/apache2/vhosts/userName/siteName) добавить еще одну строку:
Общий блок настроек будет SSL будет приммерно таким:
Перезапускаем apache
И проверяем SSL сертификат тут https://www.ssllabs.com/ssltest/analyze.html?d=domain.name (незабудте сбросить кеш (ссылка "Clear cache")). И получаем общую оценку (класс) "A":
Наслаждаемся)Ответить
Сертификат здесь создается в формате pem, а для сервера нужен в формате crt (X.509).
ОтветитьЧто мешает cоздать самоподписаный сертификата с помощью следующей команды:
Если privateKey.key и certificate.crt нет, то сгенерировать корневой и промежуточный сертификаты можно по этой инструкции: Генерация CSR (первая часть статьи: WoSing. Бесплатный SSL сертификат и HTTPS протокол для сайт на 3 года, пошаговая инструкция)
Хотя у меня вроде и так все хорошо работает.Ответить
Отличная статья, все получилось, теперь я с зеленым https, спасибо автору
Ответить- уберите это из статьи.
http://nginx.org/en/docs/http/converting_rewrite_rules.html
- официальная документация к nginx. Найдите в нем текст "This is a wrong" ...лучше прочтите полностью. Если не понятно - посмотрите на youtube видео от создателья nginx Игоря Сысоева.
Успехов! Спасибо за Ваш труд! Учите правильному!Ответить
Спасибо, обязательно исправлю
ОтветитьА не подскажете как одновременно установить сертификат для англ и кириллического домена? Например для example.com и пример.рф У меня не получается с помощью Let's Encrypt поставить на оба сразу. Работает только один. Второй при этом ругается на то, что имя домена не совпадает с именем домена указанным в сертификате.
ОтветитьПродление сертификата для сервера на Apache2:
Может кому-то пригодитьсяОтветить
Доброго времени суток!
Подскажите, что я делаю не так? после того как ввожу,./letsencrypt-auto --help. требует пароль, уже все перепробывала и пароль от аккаунта и т.д.
Прошу помощи :) Подскажите...Ответить
попробуйте так: sudo ./letsencrypt-auto
Ответитьзапросит пароль, введите пароль от пользователя root
или просто войдите в систему как root
Спасибо за быстрый ответ:) Но в данной системе я не очень сильна.... пользуюсь программой Putty, добавляю номер ссервера, логин и пароль, я так уже понимаю, что я действия ввожу по правам root или нет? Может этот вопрос покажеться глупым, но настройкой ssl занимаюсь впервые и Ваша иструкция очень расширенная и понятная от других.
Ответитьсвязалась с хостингом, они мне дали отворот:) Говорят права root только у них, на данный хостинг вы не сможете установить бесплатных ssl, пользуйтесь нашим за денежку.
ОтветитьКак данное дело обойти?
попробуйте так: sudo ./letsencrypt-auto - пробывала отказ.
Может кто-то сможет установить на данный хостинг? за денежку?
Если ваш логин: "root" то да. Если в качестве логина что то другое то это не рут
ОтветитьПро Apache какие-то глупости написаны. Статья только выиграет, если автор разберется в том, как устанавливать SSL-сертификаты.
Ответить