Назад | Перейти на главную страницу

Зашифруем сервер nginx tls-sni-01 задача

У меня есть домен, скажем так domain.com

Этот домен был зарегистрирован в Go Daddy, и с помощью панели управления Go Daddy я указываю домен на определенный IP-адрес, скажем, 1.2.3.4

Этот IP, 1.2.3.4, принадлежит экземпляру AWS EC2.

Машина работает Ubuntu и обслуживаю контент, который я хочу использовать nginx.

lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.2 LTS
Release:    16.04
Codename:   xenial

nginx -v

nginx version: nginx/1.10.3 (Ubuntu)

Я установил свои сертификаты SSL с помощью Let's Encrypt с помощью certbot. Я сделал это, введя команду sudo certbot --nginx

Сертификат был создан, и в течение трех месяцев все шло отлично. Мой сайт был правильно обслужен https, с действующим сертификатом.

Срок действия моего сертификата недавно истек, поэтому я попытался продлить его. Я первым дал эту команду.

sudo certbot renew

Ошибка была примерно такой:

Detail: Incorrect validation certificate for tls-sni-01 challenge. Requested 243e624c366db6a6f6aca6ac57f6f3cc.16fe65202571c102848dfa2b97afa875.acme.invalid from 1.2.3.4:443. Received 2 certificate(s), first certificate had names "domain.com"

WARNING:certbot.renewal:Attempting to renew cert (domain.com) from /etc/letsencrypt/renewal/domain.com.conf produced an unexpected error: Failed authorization procedure. domain.com (tls-sni-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Incorrect validation certificate for tls-sni-01 challenge. Requested 243e624c366db6a6f6aca6ac57f6f3cc.16fe65202571c102848dfa2b97afa875.acme.invalid from 1.2.3.4:443. Received 2 certificate(s), first certificate had names "domain.com". Skipping.

Когда я дал эту команду, nginx сервер все еще работал. Я остановил сервер и попробовал еще раз, а также попробовал другие варианты команды. Я пробовал бежать sudo certbot renew очередной раз, sudo certbot --nginx снова я попробовал sudo certbot renew --agree-tos и другие.

Я не знал об ограничении скорости Let's Encrypt накладывает. В последний раз я получил ошибку:

Attempting to renew cert (domain.com) from /etc/letsencrypt/renewal/domain.com.conf produced an unexpected error: urn:acme:error:rateLimited :: There were too many requests of a given type :: Error creating new authz :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/. Skipping.

После того, как я снова получу доступ к Let's Encrypt, как мне решить эту проблему?


Как мне продлить Let's Encrypt сертификат на nginx сервер работает на Ubuntu машина?

Почему я получаю Incorrect validation certificate for tls-sni-01 challenge?

Я должен удалить certbot а все сертификаты целиком и переустановить?

Какие подходы вы предлагаете для решения этой проблемы?

Спасибо!


Изменить 2: Конфигурация сервера

server {
    listen 80;
    server_name domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name domain.com;

    location / {
        root /home/deploy/frontend/build;
        try_files $uri /index.html;
    }

ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # managed by Certbot
}

Изменить 3:

Это полная ошибка для certbot --nginx

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: domain.com
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for domain.com
Waiting for verification...
Cleaning up challenges
Failed authorization procedure. domain.com (tls-sni-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Incorrect validation certificate for tls-sni-01 challenge. Requested 8e2860a15c352af70bba07e265c4e05d.01f665a017c20bd5d2c25f1ec2110b6b.acme.invalid from 1.2.3.4:443. Received 2 certificate(s), first certificate had names "domain.com"

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: domain.com
   Type:   unauthorized
   Detail: Incorrect validation certificate for tls-sni-01 challenge.
   Requested
   8e2860a15c352af70bba07e265c4e05d.01f665a017c20bd5d2c25f1ec2110b6b.acme.invalid
   from 1.2.3.4:443. Received 2 certificate(s), first certificate
   had names "domain.com"

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.

Let's Encrypt навсегда отключил вызов TLS-SNI-01303 из-за отчета о безопасности от 9 января 2018 года.

вы можете использовать команду:

sudo certbot --authenticator standalone --installer nginx -d example.com --pre-hook “service nginx stop” --post-hook “service nginx start”

https://community.letsencrypt.org/t/solution-client-with-the-currently-selected-authenticator-does-not-support-any-combination-of-challenges-that-will-satisfy-the-ca/ 49983

Решение, которое я нашел, заключалось в использовании этой команды:

sudo certbot --authenticator webroot --installer nginx

По сути, это означает перевыпуск сертификата. Однако в моем случае этого оказалось недостаточно. Проверка, выполненная для этого подхода, включает попадание по этому URL:

Failed authorization procedure. example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://example.com/.well-known/acme-challenge/6OmVoBFxfKtjdAO1bgM9ylZw0d7U7MVC8KqyS6A2LfU: "<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shr"

Примечание: я использовал domain.com в качестве примера в моем вопросе, но в ответе я вынужден использовать example.com

Как мой nginx настроен сервер, http://example.com/ был недоступен, потому что у меня return 301 https://$server_name$request_uri;

Что мне нужно было сделать, так это разрешить http доступ к моему веб-корню, /home/deploy/frontend/build получите сертификат и верните настройки.

Надеюсь, это поможет.