#laravel #nginx #ssl #forge
#ларавель #nginx #ssl #ковать
Вопрос:
Я пытаюсь запустить Certbot на сервере Laravel Forge. Это ошибка, которую я продолжаю получать
nginx: [emerg] не удается загрузить сертификат «/etc/nginx/ssl/mydomain.ca/1263486/server.crt»: ошибка PEM_read_bio_X509_AUX() не удалась (SSL: ошибка:0909006C:процедуры PEM:get_name:нет начальной строки:Ожидание: ДОВЕРЕННЫЙ СЕРТИФИКАТ) nginx: файл конфигурации /etc/nginx/nginx.conf тест не удался
насколько я понимаю, это означает, что в первой строке написано НАЧАТЬ СЕРТИФИКАТ, а не ДОВЕРЕННЫЙ СЕРТИФИКАТ, как я могу получить доверенный сертификат? Конфигурация Nginix ниже.
# FORGE CONFIG (DO NOT REMOVE!) include forge-conf/mydomain.ca/before/*; server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name .mydomain.ca; server_tokens off; root /home/forge/mydomain.ca/; # FORGE SSL (DO NOT REMOVE!) ssl_certificate /etc/nginx/ssl/mydomain.ca/1263486/server.crt; ssl_certificate_key /etc/nginx/ssl/mydomain.ca/1263486/server.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers (MY CIPHER HERE) ssl_prefer_server_ciphers off; ssl_dhparam /etc/nginx/dhparams.pem; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.html index.htm index.php; charset utf-8; # FORGE CONFIG (DO NOT REMOVE!) include forge-conf/mydomain.ca/server/*; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; error_log /var/log/nginx/mydomain.ca-error.log error; error_page 404 /index.php; location ~ .php$ { fastcgi_split_path_info ^(. .php)(/. )$; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; include fastcgi_params; } location ~ /.(?!well-known).* { deny all; } } # FORGE CONFIG (DO NOT REMOVE!) include forge-conf/mydomain.ca/after/*;
Комментарии:
1. Как
/etc/nginx/ssl/mydomain.ca/1263486/server.crt
выглядит содержимое? Вы проверили свои журналы certbot на наличие ошибок?2. @miken32 содержимое файла: etc/letsencrypt/live/mydomain.ca/fullchain.pem
3. Так почему же ваша конфигурация Nginx ищет
/etc/nginx/ssl/mydomain.ca/1263486/server.crt
?4. Честно говоря, я не уверен, я впервые работаю с чем-то подобным. Следует ли изменить путь к этому?
Ответ №1:
Вам необходимо выполнить следующие действия:
- установите пакет certbot
- добавьте серверный блок для прослушивания порта 80
server { listen 80; server_name mydomain.ca; location ^~ /.well-known/acme-challenge { root /home/forge/certbot; default_type "text/plain"; try_files $uri =404; } }
- измените пути к сертификатам в своей конфигурации
ssl_certificate /etc/letsencrypt/live/mydomain.ca/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mydomain.ca/privkey.pem;
- получение сертификатов с помощью команды
certbot certonly --cert-name mydomain.ca -d mydomain.ca -d *.mydomain.ca --webroot --webroot-path /home/forge/certbot
- перезагрузите конфигурацию nginx командой
nginx -t amp;amp; nginx -s reload
- добавьте задачу cron для обновления сертификатов
0 0 */80 * * certbot renew
Комментарии:
1. Это похоже на очень общие инструкции. Как они будут решать конкретную проблему, с которой сталкиваются в этом вопросе?
2. Это полезная инструкция, чтобы иметь возможность получить доверенный сертификат от certbot
3. Certbot помещает сертификаты в путь /etc/letsencrypt/live/имя домена, я рекомендую изменить пути сертификатов.
4. Чтобы иметь возможность подтвердить право собственности на домен, ему необходимо прослушать порт 80. Я рекомендую добавить соответствующий блок конфигурации сервера.
5. @AlekseyVaganov Я смог воспользоваться вашим ответом и понять, что мне нужно было сделать. Самой большой проблемой, с которой я столкнулся, была проверка сертификата как надежного, все, что мне действительно нужно было сделать, это использовать путь, который вы упомянули в шаге 3.