Давайте зашифруем 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.
2 ответа
Решение, которое я нашел, состояло в том, чтобы использовать эту команду:
sudo certbot --authenticator webroot --installer nginx
По сути, это переиздание сертификата. Однако в моем случае этого было недостаточно. Проверка, выполненная для этого подхода, включает в себя следующее:
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
доступ к моему webroot, /home/deploy/frontend/build
получить сертификат и отменить настройки.
Надеюсь, это поможет.
Let's Encrypt навсегда отключил вызов TLS-SNI-01303 из-за отчета о безопасности по состоянию на 2018-01-09.
Вы можете использовать команду:
sudo certbot --authenticator standalone --installer nginx -d example.com --pre-hook “service nginx stop” --post-hook “service nginx start”