- Чтобы добавить новый acme-клиент или проект
- Получаем Cloudflare API токен
- Инсталлируем acme.sh клиент
- Выпускаем Let’s Encrypt wildcard сертификат
- Конфигурируем веб-сервер Ngnix
- Инсталлируем Let’s Encrypt wildcard сертификат
- Автоматическое продление Let’s Encrypt wildcard сертификата
- Acmev1 и acmev2
- Bash
- C
- C
- Clojure
- D
- Domino
- Docker
- Go
- Haproxy
- Java
- Kubernetes
- Lua
- Microsoft azure
- Nginx
- Node.js
- Openshift
- Perl
- Php
- Python
- Ruby
- Rust
- Windows / iis
- Server
- Библиотеки
- 4d
- C
- D
- Delphi
- Go
- Java
- .net
- Node.js
- Perl
- Php
- Python
- Ruby
- Rust
- Проекты интеграции с let’s encrypt
- Импорт существующих данных
- Как это работает
- Какие ещё плюшки есть у скрипта?
- Команды acme.sh для обновления сертификатов let’s encrypt
- Минусы
- Подготовительные работы по установке и конфигурированию веб-сервера nginx
- Получаем ssl сертификаты от let’s encrypt при помощи acme.sh.
- Принудительное обновление сертификата let’s encrypt
- Центр сертификации let’s encrypt [айти бубен]
- Заключение
- Рекомендуемые статьи по теме:
Чтобы добавить новый acme-клиент или проект
Если в нашем списке вы не нашли какой-либо ACME-клиент или проект интеграции с Let’s Encrypt, пожалуйста,
создайте pull request в наш репозиторий сайта на GitHub,
в котором обновляется файл data/clients.json.
Перед отправкой pull request-а, пожалуйста, убедитесь, что:
- Клиент соблюдает политику Let’s Encrypt в отношении товарных знаков.
- Клиент работает не в браузере, и поддерживает автоматическое обновление сертификатов.
- В вашем коммите вы добавили информацию о новом клиенте в конец соответствующего раздела
(не забудьте про раздел “ACME v2-совместимые клиенты”!). - В вашем коммите вы обновили дату в поле
lastmod, в начале файлаdata/clients.json.
Получаем Cloudflare API токен
Для начала, нам необходимо зарегистрироваться в Cloudflare и получить там API токен. Эти действия нам необходимы для свидетельства нашего права на владение доменом (для Let’s Encrypt). После регистрации в сервисе, заходим в панель управления Cloudflare и получим API токен, выполнив следующие действия (см. скриншоты ниже):
"Create Token” > “Edit zone DNS” > Use template:
Убедитесь, что вы настроили DNS разрешения для редактирования и включили зону для своего доменного имени, (например, для letsencrypt.co.ua), см. скриншот:
После этого, нажмите “Continue to summary”, чтобы увидеть “Edit zone DNS API token summary”.
В конце, скопируйте токен, который вы увидите на экране, для получения доступа к Cloudflare API. Держите этот токен в секрете.
Проверяем правильную работу токена командой:
Инсталлируем acme.sh клиент
На следующем этапе, необходимо установить клиент acme.sh, для этого выполним следующие команды (клонируем репозиторий acme.sh с помощью команды git):
Выпускаем Let’s Encrypt wildcard сертификат
После установки и конфигурации веб-сервера Nginx, получения Cloudflare API токена и инсталляции acme.sh, самое время приступить к выпуску wildcard сертификата для домена letsencrypt.co.ua.
Перейдем в каталог cd /root/.acme.sh для дальнейших действий.
Сначала настроим CF_Token с помощью команды экспорта следующим образом:
# Export single variable for the CloudFlare DNS challenge to work # export CF_Token="Your_Cloudflare_DNS_API_Key_Goes_here"
Определять переменные оболочки CF_Account_ID и CF_Zone_ID нам не нужно, так как они будут автоматически извлечены файлом acme.sh. Затем запросим сертификат для домена:
./acme.sh --issue --dns dns_cf --ocsp-must-staple --keylength 4096 -d letsencrypt.co.ua -d '*.letsencrypt.co.ua'
Если вы работаете с криптографией на основе эллиптических кривых (ECC/ECDSA) вместо RSA, то синтаксис команды будет следующим:
./acme.sh --issue --dns dns_cf --ocsp-must-staple --keylength ec-384 -d letsencrypt.co.ua -d '*.letsencrypt.co.ua'
Наш ключ Cloudflare DNS API находится в файле /root/.acme.sh/account.conf, проверить его возможно с помощью команды cat или grep:
cat /root/.acme.sh/account.conf grep '_CF_' /root/.acme.sh/account.conf
Конфигурируем веб-сервер Ngnix
На этом этапе нам необходимо убедиться в том, что файл обмена ключами Диффи-Хеллмана уже создан:
mkdir -pv /etc/nginx/ssl/letsencrypt.co.ua/ openssl dhparam -out /etc/nginx/ssl/dhparams.pem 4096 acme.sh --issue --nginx --ocsp-must-staple --keylength 4096 -d letsencrypt.co.ua
Затем создадим и отредактируем файл конфигурации для нашего домена letsencrypt.co.ua:
nano /etc/nginx/conf.d/letsencrypt.co.ua.conf
Занесем туда следующие строки:
Инсталлируем Let’s Encrypt wildcard сертификат
Сейчас необходимо приступить к установке сертификата (при необходимости, замените команду systemctl reload nginx, в соответствии с инструкцией к вашему дистрибутиву Linux):
DOMAIN="letsencrypt.co.ua"
CONFIG_ROOT="/etc/nginx/ssl/${DOMAIN}"
acme.sh -d "$DOMAIN"
--install-cert
--reloadcmd "systemctl reload nginx"
--fullchain-file "${CONFIG_ROOT}/$DOMAIN.fullchain.cer"
--key-file "${CONFIG_ROOT}/$DOMAIN.key"
--cert-file "${CONFIG_ROOT}/$DOMAIN.cer"
Если вы используете ECC/ECDSA, то синтаксис команды будет выглядеть следующим образом:
DOMAIN="letsencrypt.co.ua"
CONFIG_ROOT="/etc/nginx/ssl/${DOMAIN}"
acme.sh -d "$DOMAIN"
--ecc
--install-cert
--reloadcmd "systemctl reload nginx"
--fullchain-file "${CONFIG_ROOT}/$DOMAIN.fullchain.cer.ecc"
--key-file "${CONFIG_ROOT}/$DOMAIN.key.ecc"
--cert-file "${CONFIG_ROOT}/$DOMAIN.cer.ecc"
Автоматическое продление Let’s Encrypt wildcard сертификата
Обновление будет происходить автоматически через cronjob, чтобы просмотреть все задания в cron, введите команду:
crontab -l
Отобразится примерно следующая информация (см. скриншот ниже):
8 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
Если возникнет необходимость, мы можем произвести обновление вручную:
./acme.sh --renew --force --dns dns_cf --ocsp-must-staple --keylength 4096 -d letsencrypt.co.ua -d '*. letsencrypt.co.ua'
В следующем разделе мы опишем подробнее как продлить ssl сертификат.
Acmev1 и acmev2
Let’s Encrypt поддерживает ACMEv2 API, совместимый с финальной версией стандарта ACME.
Мы планируем постепенно отказываться от устаревшего ACMEv1 API
в 2020-2021 г. Все реализации ACME-клиента в данном списке поддерживают ACMEv2.
Bash
C
C
Clojure
D
Domino
Docker
Go
Haproxy
Java
Kubernetes
Lua
Microsoft azure
Nginx
Node.js
Openshift
Perl
Php
Python
Ruby
Rust
Windows / iis
Server
Библиотеки
4d
C
D
Delphi
Go
Java
.net
Node.js
Perl
Php
Python
Ruby
Rust
Проекты интеграции с let’s encrypt
Импорт существующих данных
Такой возможности нет. Как пишет сам автор — «нафига это нужно — просто сгенерируйте новый сертификат и всё, а старый выбросьте». И в сущности он прав — этот тот случай когда нет смысл городить что-то там где оно не нужно.
Как это работает
Сразу оговорюсь — я пользуюсь этим скриптом через докер контейнер — хотя при запуске отличия минимальны. Второй момент — я использую DNS от Яндекса. Соответственно примеры будут именно в этом контексте.
Какие ещё плюшки есть у скрипта?
Оно умеет добавлять себя в cron для автоматического обновления сертификатов по таймеру.
Так-же скрипт может выполнить заданную команду после обновления сертификатов — очевидным применением является отправка команды веб-серверу на перезагрузку ключей. Есть ещё хуки для выполнения до и после запуска скрипта.
Так-же есть функции для автоматической загрузки ключей в различные хостинговые панели (типа cpanel), но я таким не пользуюсь и как оно работает не скажу, но сам факт наличия такой возможности безусловный плюс.
Команды acme.sh для обновления сертификатов let’s encrypt
Общий синтаксис:
acme.sh -f -r -d {your-domain-here}
acme.sh --force --renew --domain {your-domain-name-here}
Пример использования команды для нашего домена:
acme.sh -f -r -d letsencrypt.co.ua
Где:
--renew ИЛИ -r: продлить сертификат; --domain ИЛИ -d: указывает домен; --force ИЛИ -f: используется для принудительного выпуска или немедленного обновления сертификата.
После проведения работ по выпуску или принудительному продлению сертификата необходимо перезапустить веб-сервер (Nginx или Apache) с помощью следующих команд (в соответствии с инструкцией к вашему дистрибутиву Линукс).
Для Nginx:
sudo service nginx reload
Для Apache:
Минусы
Каких-то критичных минусов пока не обнаружил. Если уж совсем докапываться, то это огромное количество ключей командной строки, что лично я не люблю. Ну и автор скрипта азиат и как следствие очень много ссылок в вики иероглифами. Но не смотря на это английская документация и вики присутствуют и вполне себе полезны.
Подготовительные работы по установке и конфигурированию веб-сервера nginx
Все действия будем проводить с тестовым доменом letsencrypt.co.ua. Перед тем, как начать процесс установки, необходимо выполнить обновления на серверной ОС Ubuntu:
apt update && apt full-upgrade –y
Затем установим веб-сервер Nginx:
1) Команда для OC Ubuntu:
sudo apt install nginx
2) Команда для OC CentOS:
sudo yum install nginx
Затем наш домен нужно добавить в качестве виртуального хоста на веб-сервер Nginx, для этого проделаем следующие действия:
1) Создаем каталог для нового сайта, вместо letsencrypt.co.ua подставьте имя своего домена (параметр -p необходим для автоматической генерации каталогов):
mkdir -p /var/www/letsencrypt.co.ua/public_html
2) Выставим права на папку, чтобы у нас была возможность чтения файлов в ней:
chmod 755 /var/www
3) В редакторе nano создаем новый файл index.html в уже созданном нами каталоге:
nano /var/www/letsencrypt.co.ua/public_html/index.html
4) Помещаем в файл следующий исходный код:
5) Сейчас отредактируем файл с настройками ngnix:
nano /etc/nginx/conf.d/virtual.conf
Необходимо вписать следующие строки в файл (указать имя домена, корневую папку и т.д.):
#
# A virtual host using mix of IP-, name-, and port-based configuration
#
server {
listen 80;
# listen *:80;
server_name letsencrypt.co.ua;
location / {
root /var/www/letsencrypt.co.ua/public_html/;
index index.html index.htm;
}
}
6) Теперь отредактируем файл nano /etc/hosts (пропишем соответствие нашего домена IP-адресу VPS):
#Virtual Hosts 178.20.153.253 letsencrypt.co.ua
7) Для того, чтобы все наши настройки вступили в силу, выполним рестарт Nginx командой:
/etc/init.d/nginx restart
8) Чтобы проверить, работает ли наш сайт и привязан ли он к IP, откроем браузер и наберем:
letsencrypt.co.ua
Как мы видим на скриншоте ниже, наша тестовая страница отображается, значит все настроено правильно.
Получаем ssl сертификаты от let’s encrypt при помощи acme.sh.
Let’s Encrypt – центр сертификации от некоммерческой организации ISRG, существующий при поддержке EFF и многих компаний, взявшей на себя миссию дать людям бесплатные SSL/TLS сертификаты для сайтов и серверов. Хотя сам LE в качестве клиента рекомендует использовать certbot, могут возникнуть сложные случаи, где certbot, увы, бесполезен. В этом случае нам поможет acme.sh.
- Исходные данные
$ uname -sr FreeBSD 11.2-RELEASE-p5 $ pkg info | grep acme.sh acme.sh-2.7.9_1 ACME protocol client written in shell
Тип получаемого сертификата: wildcard. Это означает, что проверка владения доменом определяется только через DNS;
DNS-сервера: размещены у регистратора r01.ru. Изменения зон на DNS-серверах этого регистратора производятся в течение 40 минут. - acme.sh – установка
# cd /usr/ports/security/acme.sh # make install clean
Настройки в процессе установки:
[ ] BINDTOOLS Depend on bind-tools for nsupdate [x] DOCS Build and/or install documentation [ ] STANDALONE Standalone mode requires SOCAT ─────────────────────────────────── HTTP ───────────────────────────────── (*) CURL Depend on cURL for HTTP(S) queries ( ) WGET Depend on Wget for HTTP(S) queries
- Выпуск сертификата вручную
Для тех, кто забыл, напоминаю: зона расположена у регистратора r01.ru, у которого данные на dns серверах обновляются в течение 40 минут.# acme.sh --issue -d mysite.com -d *.mysite.com --dns dns_show --dnssleep 2500 --force
–dnssleep 2500 – задержка в ~41 минуту
–force – добавлять, если выполняете строку из-под root или при помощи sudo
В процессе нас попросят добавить в зону mysite.com две текстовые записи _acme-challenge. Добавляем, как и просят, ДВЕ записи, с разным содержимым.
Ждем 41 минуту.
Затем:# acme.sh --renew -d mysite.com -d *.mysite.com
Мы делали операции от root, поэтому сертификаты ищем в /root/.acme.sh
- DNS API hook для r01.ru
У меня все же дошли руки написать hook для автоматического добавления записей на dns сервера регистратора r01.ru через их SOAP API. acme.sh предполагает использование интерпретатора sh, я с SOAP умею работать только через perl, поэтому получилось то, что получилось. Я знаю, что нет предела совершенству, в том числе и в вылизывании кода, но мой вполне себе работает (а больше от него ничего не надо).
Итак.Файл /root/.acme.sh/dns_r01.sh:
#!/usr/bin/env sh ######################################################################## # r01.ru API hook script for acme.sh # # Author: Skull # Site: http://www.site-motor.ru/ #-- dns_r01_add() - Add TXT record -------------------------------------- # Usage: dns_r01_add _acme-challenge.subdomain.domain.com "XyZ123..." dns_r01_add() { _full_domain=$1 _txt_value=$2 _info "Using r01.ru DNS API hook" /root/.acme.sh/dnsapi/r01-add.pl $1 $2 } #-- dns_r01_rm() - Remove TXT record ------------------------------------ # Usage: dns_r01_rm _acme-challenge.subdomain.domain.com "XyZ123..." dns_r01_rm() { _full_domain=$1 _txt_value=$2 _info "Cleaning up after use r01.ru DNS API hook" /root/.acme.sh/dnsapi/r01-rm.pl $1 }Как видите, я из sh-скрипта тупо передаю все в perl-скрипт.
Файл /root/.acme.sh/dnsapi/r01-add.pl:
#!/usr/bin/env perl use strict; use warnings; use SOAP::Lite; use HTTP::Cookies; $|=1; my $user = ''; my $pass = ''; my $domain = $ARGV[0]; $domain =~ s/^_acme-challenge.//; my $record = $ARGV[1]; print "DOMAIN:t$domainn"; print "DNS:t_acme-challenge=$recordn"; my $soap = SOAP::Lite->new( user_agent => 'RegbaseSoapInterfaceClient', default_ns => 'urn:RegbaseSoapInterface' ); $soap->proxy( 'https://partner.r01.ru:1443/partner_api.khtml', cookie_jar => ( HTTP::Cookies->new( autosave => 1, ignore_discard => 1 )) ); # логин my $login = $soap->logIn($user,$pass); die 'logIn() ERROR ==> '.$login->faultstring if ($login->fault); print 'logIn() ',$login->result->{status}{code},': ',$login->result->{status}{name},"n"; $soap->set_cookie('SOAPClient',$login->result->{status}{message}); # добавляем запись _acme-challenge my $params = SOAP::Data->value( SOAP::Data->name('domain' => uc($domain)), SOAP::Data->name('type_record' => 'TXT'), SOAP::Data->name('params' => SOAP::Data->value( SOAP::Data->name('owner' => '_acme-challenge'), SOAP::Data->name('data' => $record), )) ); my $ret = $soap->addNewRrRecord($params); die 'addNewRrRecord() ERROR ==> '.$ret->faultstring if ($ret->fault); print 'addNewRrRecord() ',$ret->result->{status}{code},': ',$ret->result->{status}{name},"n"; exit;$user, $pass – здесь надо задать логин и пароль для API r01.ru
Файл /root/.acme.sh/dnsapi/r01-rm.pl:
#!/usr/bin/env perl use strict; use warnings; use SOAP::Lite; use HTTP::Cookies; $|=1; my $user = ''; my $pass = ''; my $domain = $ARGV[0]; $domain =~ s/^_acme-challenge.//; print "DOMAIN:t$domainn"; my $soap = SOAP::Lite->new( user_agent => 'RegbaseSoapInterfaceClient', default_ns => 'urn:RegbaseSoapInterface' ); $soap->proxy( 'https://partner.r01.ru:1443/partner_api.khtml', cookie_jar => ( HTTP::Cookies->new( autosave => 1, ignore_discard => 1 )) ); # логин в систему my $login = $soap->logIn($user,$pass); die 'logIn() ERROR ==> '.$login->faultstring if ($login->fault); print 'logIn() ',$login->result->{status}{code},': ',$login->result->{status}{name},"n"; $soap->set_cookie('SOAPClient',$login->result->{status}{message}); # читаем записи домена my $records = $soap->getRrRecords(uc($domain)); die 'getRrRecords() ERROR ==> '.$records->faultstring if ($records->fault); print 'getRrRecords() ',$records->result->{status}{code},': ',$records->result->{status}{name},"n"; for my $el (@{$records->result->{data}}){ if($el->{owner} eq '_acme-challenge'){ # удаляем запись my $ret = $soap->deleteRrRecord($el->{id}); die 'deleteRrRecord() '.$el->{id}.' ERROR ==> '.$ret->faultstring if ($ret->fault); print 'deleteRrRecord() ',$ret->result->{status}{code},': ',$ret->result->{status}{name},"n"; } } # выход из системы my $logout = $soap->call('logOut'); exit;$user, $pass – здесь надо задать логин и пароль для API r01.ru
Не забываем все файлы сделать исполняемыми (chmod x)
- Выпуск сертификата в автоматическом режиме
# acme.sh --issue -d mysite.com -d *.mysite.com --dns dns_r01 --dnssleep 2500
В результате записи _acme-challenge будут автоматически добавлены в dns, но в процессе придется сидеть и ждать 2500 секунд. После чего записи в dns также автоматически будут удалены и вы станете счастливым обладателем wildcard-сертификата.
- Автоматический перевыпуск сертификатов
Для перезапуска после обновления, например, nginx, необходимо сделать следующее:
– открываем файл /root/.acme.sh/mysite.com/mysite.com.conf;
– ищем там строчку Le_RenewHook=” и меняем её (или добавляем новую):Le_RenewHook='/usr/local/etc/rc.d/nginx restart'
Для root в cron добавляем:
34 1 * * * /usr/local/sbin/acme.sh --cron > /dev/null
34 – минута запуска, поменяйте на другое число от 0 до 59
1 – час запуска, поменяйте на другое число от 0 до 23 - nginx – пути к сертификатам для добавления в блок server
ssl_certificate /root/.acme.sh/mysite.com/fullchain.cer; ssl_certificate_key /root/.acme.sh/mysite.com/mysite.com.key;
- Посмотреть данные сертификата
# openssl x509 -in cert.pem -noout -text
Принудительное обновление сертификата let’s encrypt
Для ОС Линукс существуют несколько способов выпуска и обновления сертификата Let’s Encrypt, ниже рассмотрим наиболее популярные способы продления сертификата ssl.
Центр сертификации let’s encrypt [айти бубен]

Домашняя страница: Let’s Encrypt is a free, automated, and open Certificate Authority
Чтобы получить сертификат для вашего домена, вам необходимо запустить клиентскую часть на вашем сервере.
Ограничения. Стоит отметить, что Let’s Encrypt выдает лишь DV-сертификаты, и если вам необходим другой тип сертификата (EV или OV), то следует обращаться к более традиционным провайдерам. DV сертификаты от Let’s Encrypt выдаются на конкретный список доменов и поддоменов (SAN/UCC), т.е. вы не можете получить wildcard-сертификат. Также следует упомянуть, что на данный момент вы можете производить всего до 10 регистраций с одного IP адреса каждые 3 часа, и до 5 сертификатов для одного домена (включая любые поддомены) каждые 7 дней. В будущем эти ограничения могут измениться.
Certbot – это ACME (Automated Certificate Management Environment) – клиент для автоматического создания и установки сертификатов, без остановки web- сервера. Существуют множество других клиентов, кроме certbot , которые поддерживает ACMEv2, например acme.sh.
Настроим поддержку SSL в Apache с настройками HTTPS по умолчанию, для этого нужно включить модуль ssl:
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo systemctl restart apache2Проверить текущие настройки виртуальных хостов командой apachectl с ключом S. Вы должны увидеть как минимум 2 виртуальных хоста по умолчанию.
# apachectl -SСтавим пакеты Certbot с поддержкой Apache
sudo apt install certbot python3-certbot-apache
Теперь Certbot установлен на сервере.
Чтобы автоматически получить и настроить SSL для вашего веб-сервера, Certbot должен найти корректный виртуальный хост в ваших файлах конфигурации Apache. Имена доменов ваших серверов будут получены из директив ServerName и ServerAlias, определенных в блоке конфигурации VirtualHost.
Чтобы автоматически получить и настроить SSL для вашего веб-сервера, Certbot должен найти корректный виртуальный хост в ваших файлах конфигурации Apache. Имена доменов ваших серверов будут получены из директив ServerName и ServerAlias, определенных в блоке конфигурации VirtualHost.
Как не странно процедура создания виртуального домена веб сервера Apache всегда вызывает вопросы. Но с другой стороны эта тривиальная задача в интернете описана с гигантским количество ошибок.
Ниже я описываю, как создать виртуальный домен Apache с поддержкой HTTP и HTTPS и установить права на директории.
sudo mkdir/var/www/your_domain sudo chown-R $USER:$USER/var/www/your_domain
Надеюсь вы не трогали значение umask, тогда выполните команду
sudo chmod-R 755/var/www/your_domain
Создайте пустой index.html любым известным вам способом, например используя Горячие клавиши текстового редактора Nano.
sudo nano /var/www/your_domain/index.html
Теперь необходимо создать конфигурационный файл виртуального хоста с правильными директивами, не надо менять файл /etc/apache2/sites-available/000-default.conf, нужно создать новый. В в одном и том же файле описываем виртуальных хост для HTTP (порт 80) и HTTPS (порт 443), пути к SSL сертификатам копируем из файла default-ssl.conf. SSL сертификаты нужно указать, в дальнейшем они будут автоматически заменены программой certbot.
sudo nano /etc/apache2/sites-available/your_domain.conf
с таким содержимым
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName your_domain ServerAlias www.your_domain DocumentRoot /var/www/your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost><VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key ServerAdmin webmaster@localhost DocumentRoot /var/www/your_domain ServerName your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Включим созданные виртуальный хост
sudo a2ensite
В выводе это команды вы увидите список всех ваших виртуальных хостов, выделите нужный мышкой и через пробел введите все нужные или сразу укажите нужный хост, набрав команду
sudo a2ensite your_domain.confЕсли нужно, можно отключить хост по умолчанию, но я так не делаю. Для отключения введите команду:
sudo a2dissite 000-default.conf
Обязательно перегружаем Apache, чтобы он подхватил наши изменения
sudo systemctl reload apache2
Введите следующую команду:
sudo certbot --apacheСкрипт certbot предложит вам ответить на ряд вопросов, чтобы настроить сертификат SSL:
Введите действующий адрес электронной почты, которая будет использоваться для уведомлений о продлении и безопасности: жмем Enter.
Подтвердите согласие с условиями обслуживания Let’s Encrypt: ведите А.
Наконец, на этом этапе вас спросят для каких доменов вы хотите получить SSL сертификат. Если хотите активировать HTTPS для всех указанных доменных имен (рекомендуется), то можно оставить командную строку пустой и нажать ENTER, чтобы продолжить. В противном случае выберите домены, для которых вы хотите активировать HTTPS, указав все подходящие номера через запятую и/или пробелы, и нажмите ENTER.
Далее вам будет предложено выбрать, перенаправлять трафик HTTP на HTTPS или нет. На практике это означает, что те, кто посещает ваш веб-сайт через незашифрованные каналы (HTTP), будут автоматически перенаправляться на адрес HTTPS вашего веб-сайта. Выберите 2, чтобы активировать перенаправление, или 1, если хотите сохранить и HTTP, и HTTPS в качестве отдельных методов доступа к вашему веб-сайту.
Поздравляю ваш сайт защищен!
Ниже приведены правила для 301 редиректа, которые автоматически генерирует утилита letsencrypt (certbot) после своего запуска. Этот код можно применять и без certbot, в данном примере нужно заменить сайт my-sertif.ru на ваш.
Также добавлен строка отменяющая 301 редирект файла robots.txt. В этой конфигурации файл robots.txt доступен как по протоколу HTTPS так и по протоколу HTTP.
RewriteEngine on RewriteCond %{REQUEST_URI}!^/robots.txt$ RewriteCond %{SERVER_NAME} =wiki.dieg.info RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}[END,QSA,R=permanent]
В интернете много примеров как исключить robots.txt, но большинство из них НЕ работает. Одна из причин, потому что не приводится полный конфигурационный файл. Ниже полный листинг правильного файл перенаправляющего запросы с HTTP на HTTPS и важно! файл .htaccess НЕ используется.
Файл /etc/apache2/sites-enabled/wiki.dieg80.conf
- wiki.dieg80.conf
<VirtualHost _default_:80> ServerName wiki.dieg.info ServerAdmin webmaster@dieg.info DocumentRoot /var/www/wiki.dieg/wikionline <Directory /var/www/wiki.dieg/wikionline/> Options FollowSymLinks MultiViews -Indexes AllowOverride All Order deny,allow allow from all </Directory> RewriteEngine on RewriteCond %{REQUEST_URI}!^/robots.txt$ RewriteCond %{SERVER_NAME} =wiki.dieg.info RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}[END,QSA,R=permanent] </VirtualHost>
Заключение
В этой статье мы рассказали, как получить и продлить ssl сертификат совершенно бесплатно с помощью сервиса Let’s Encrypt для основного домена и его всех поддоменов. Также подробно описан процесс конфигурирования веб-сервера Nginx, использования сервиса Cloudflare и утилиты ACME.sh для выпуска wildcard Let’s Encrypt сертификата.
Данный материал будет полезен системным администраторам и веб-мастерам корпоративных сайтов. Специалисты компании FREEhost.UA всегда проконсультируют вас по вопросам выпуска и обновления ssl сертификата для ваших доменов.
