Получаем SSL сертификаты от Let’s Encrypt при помощи acme.sh.

Получаем SSL сертификаты от Let's Encrypt при помощи acme.sh. Сертификаты

Чтобы добавить новый acme-клиент или проект

Если в нашем списке вы не нашли какой-либо ACME-клиент или проект интеграции с Let’s Encrypt, пожалуйста,
создайте pull request в наш репозиторий сайта на GitHub,
в котором обновляется файл data/clients.json.

Перед отправкой pull request-а, пожалуйста, убедитесь, что:

  1. Клиент соблюдает политику Let’s Encrypt в отношении товарных знаков.
  2. Клиент работает не в браузере, и поддерживает автоматическое обновление сертификатов.
  3. В вашем коммите вы добавили информацию о новом клиенте в конец соответствующего раздела
    (не забудьте про раздел “ACME v2-совместимые клиенты”!).
  4. В вашем коммите вы обновили дату в поле 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 [айти бубен]

Получаем SSL сертификаты от Let's Encrypt при помощи acme.sh.

Домашняя страница: 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:

  1. Введите действующий адрес электронной почты, которая будет использоваться для уведомлений о продлении и безопасности: жмем Enter.

  2. Подтвердите согласие с условиями обслуживания Let’s Encrypt: ведите А.

  3. Наконец, на этом этапе вас спросят для каких доменов вы хотите получить SSL сертификат. Если хотите активировать HTTPS для всех указанных доменных имен (рекомендуется), то можно оставить командную строку пустой и нажать ENTER, чтобы продолжить. В противном случае выберите домены, для которых вы хотите активировать HTTPS, указав все подходящие номера через запятую и/или пробелы, и нажмите ENTER.

  4. Далее вам будет предложено выбрать, перенаправлять трафик 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 сертификата для ваших доменов.

Оцените статью
Мой сертификат
Добавить комментарий