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

Давайте зашифруем сертификат и NGINX - не удается найти сертификат или директиву ключа

Мой сервер работает на LEMP Stack Ubuntu 16.04 и последней версии nginx

На моем сервере уже установлен SSL-сертификат для следующих доменов и поддоменов: example.com, domain1.example.com и все работает нормально.

Чего я пытаюсь достичь

Я хочу создать новый сертификат для domain2.example.com

Для этого я попробовал эту команду:

sudo certbot --nginx -d example.com -d domain1.example.com -d domain2.example.com --expand

Сообщение об ошибке

Не удалось найти сертификат или ключевую директиву в /etc/nginx/sites-enabled/example.com для набора (['www.example.com', '* .example.com', 'example.com']). VirtualHost не был изменен.

конфигурация nginx

server {

   # SSL configuration

   listen 443 ssl http2 default_server;
   listen [::]:443 ssl http2 default_server;
   include snippets/ssl-example.com.conf;
   include snippets/ssl-params.conf;


    root /var/www/laravel/public;
    index index.php index.html index.htm;


    server_name example.com *.example.com www.example.com ;
}

Вопросы

Что я делаю не так ? Как я могу воссоздать сертификат, чтобы добавить domain2 ?

Один из лучших способов - использовать плагин webroot (описанный https://certbot.eff.org/#centosrhel7-other). Советую поступить следующим образом:

  1. Добавьте следующую директиву местоположения к хостам (блокам сервера), которые вы хотите обработать с помощью certbot, и получить для этого сертификаты:

    location /.well-known {
        root /usr/share/nginx/html;
    }
    
  2. Установить certbot

  3. Exec certbot certonly команда
  4. Следовать инструкции. Выберите способ аутентификации «webroot» (2 вариант). И когда вы запросили www-root для вашего домена, введите /usr/share/nginx/html (как в директиве location root).
  5. Когда все будет готово, сертификаты можно будет найти в /etc/letsencrypt/live/youdomain.com/fullchain.pem.
  6. Добавить в серверный блок:

    ssl on;
    ssl_certificate /etc/letsencrypt/live/youdomain.com/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/youdomain.com/privkey.pem;
    

Вот и все;) После этого можно легко продлить сертификаты запуском certbot renew команда.

Как это устроено?

Когда мы добавляем директиву местоположения, мы выбираем настраиваемую корневую папку для /.well-known расположение. Certbot создает файлы внутри .well-known каталог и внешний сервер аутентификации (ACME CA) проверяют файлы в этой папке. Если вы управляете множеством доменов или используете nginx в качестве прокси (!), Очень полезно использовать один общий корень для /.well-known местоположение, потому что в этом случае у вас может не быть корневого каталога на машине с nginx (например, у вас есть nginx, установленный на одном VPS в качестве прокси-сервера для Apache, установленного на другом VPS).

Удачи.

Для меня я вошел в /etc/nginx/sites-enabled папка и вручную удалил ошибочные файлы виртуального хоста с символьной связью, которые, как я думал, я удалил ранее. Сюрприз, они все еще были там. Так что обязательно сделай sudo rm -rf [filename] в этой папке. Затем перезапустите nginx через sudo nginx -s reload и снова запустите команду certbot, она должна быть GTG.

Вот что мне пришлось сделать.

  1. Сначала найдите существующие сертификаты, набрав certbot certificates
  2. Затем укажите сертификат, который вы хотите expand
  3. Обновите сертификат, набрав sudo certbot certonly --cert-name example.com -d example.com -d domain1.example.com -d domain2.example.com --expand.
  4. Выбрать 2: Place files in webroot directory (webroot)
  5. Введите новый webroot что было для меня /var/www/laravel