Запуск Nginx не дає ssl такого файлу чи каталогу


14

Ось помилка, яку я отримую:

Перезавантаження конфігурації nginx: nginx: [emerg] SSL_CTX_use_certificate_chain_file ("/ path / to / cert.pem") не вдалося (SSL: помилка: 02001002: системна бібліотека: fopen: Немає таких файлів чи помилок каталогу: 20074002: BIO процедури: FILE_CTRL: система помилка lib: 140DC002: підпрограми SSL: SSL_CTX_use_certificate_chain_file: системна lib) nginx: файл конфігурації /etc/nginx/nginx.conf тест не вдався

Я на 100% впевнений, що файл знаходиться в цьому місці, але, здається, Nginx думає, що його там немає. Я об'єднав domain.crtі intermediate.crtвручну в тому порядку. Я цілий день чухаю голову над цим. Я сподіваюся, що хтось побачив цю помилку і має рішення. (І збоку зауважте, що це не помилка при вставці, що розташування файлу відображається лише один раз і не знову після "немає такого файлу чи каталогу").


3
path/to/cert.pemце, звичайно, не дійсне місце.
Майкл Хемптон

Ви правильно вважаєте, що це не фактичний шлях. Однак я міг легко зробити цю дійсну частину місця. Але в будь-якому випадку я не в змозі надати вам конкретні дані через компанію, для якої це робиться. Я повинен залишити ім’я користувача.
tgoza

Відповіді:


15

Ви впевнені, що користувач Nginx має доступ до каталогу?

Також перевірте дозволи на .pemфайл, якщо Nginx не може отримати доступ до нього, він може відображатися як 'no such file or directory'.

Якщо дозволи є правильними, ви можете перевірити фактичний шлях ще раз. Те, як ви це вставили (я знаю, що ви зняли реж), немає початку, /який може бути проблемою.

EDIT

Спробуйте перенести налаштування SSL у таку структуру (а також змінити nginx.confвідображення):

sudo mkdir /etc/nginx/ssl
sudo chown -R root:root /etc/nginx/ssl
sudo chmod -R 600 /etc/nginx/ssl

Nginx може не працювати з вашими, .pemоскільки дозволи занадто відкриті (потрібне джерело, щоб перевірити, чи робить це Nginx), але вищевказані налаштування повинні працювати нормально.


Я двічі перевірив шлях і він містить /на початку, тому я змінив питання, щоб це відобразити. Файл розташований у, /home/user/subdirsі всі права доступу до файлів і каталогів у ньому перебувають у власності user.www-даних (ім'я користувача.група) та набору 775. І я думаю, що nginx має доступ до всього, що належить www-data, хоча я можу помилитися.
tgoza

Завжди прості помилки, які вічно розбираються :) Рада, що ви це розробили.
Джим В.

як саме це виглядало? У мене є $root/keys/своє, так що моя лінія cert виглядає як ssl_certificate keys/cert.pem... чи повинні вони бути у веб-корінці?
яскрава зірка

Використання абсолютних шляхів зробило свою справу.
яскрава зірка

Я використовував контейнер docker-контейнер і торкався цієї проблеми щоразу, коли я відтворював контейнер. додавши chmod -R 600 /etc/nginx/sslв мою точку входу вирішити питання спасибі
Димитрій Копріва

3

Я залишу свою відповідь на свою проблему, якщо хтось натрапи на цю тему.

У мене nginx запускається всередині контейнера докера, і я маю ту саму помилку при спробі отримати доступ до файлу приватного ключа. Почесавши голову протягом декількох годин, я зрозумів, що в nginx мого докера немає тома монтажу, який містить мої дані.

Єдиний варіант додати об'єм кріплення - це видалити та знову створити контейнер з -vопцією: https://docs.docker.com/engine/tutorials/dockervolumes/

docker run -d -P --name docker-nginx -v /etc/ssl/certs:/etc/ssl/certs nginx

Іноді банальні речі важко помітити. Сподіваюся, що це допоможе.


2

Можливий сценарій:

іноді може статися так, що під час налаштування файлів SSL (приватний ключ та сертифікат) для налаштованого Virtualhost було забуто вказати абсолютний шлях, де ці файли перебувають.

Наприклад, якщо ви дотримуєтесь цього офіційного документа з Nginx: http://nginx.org/en/docs/http/configuring_https_servers.html

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     tdmssl.crt;
    ssl_certificate_key tdmssl.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

Припустимо, що ви зберігаєте файли SSL всередині " /etc/nginx/conf.d ":

root@ilg40:/etc/nginx/conf.d# pwd
/etc/nginx/conf.d
root@ilg40:/etc/nginx/conf.d# ll
total 16
drwxr-xr-x 2 root root 4096 Jan 24 17:39 ./
drwxr-xr-x 5 root root 4096 Jan 24 21:15 ../
-rw-r--r-- 1 root root 1359 Jan 24 17:39 tdmssl.crt
-rw-r--r-- 1 root root 1675 Jan 24 17:39 tdmssl.key

Що сталося?

За замовчуванням, коли не вказаний абсолютний шлях для звичайного файлу, який використовується Nginx, Nginx шукатиме файли за адресою "/ etc / nginx"

З /var/log/nginx/error.log

2017/01/24 21:05:10 [emerg] 13113#0: 
BIO_new_file("/etc/nginx/tdmssl.crt") 
failed(SSL:error:02001002:system library:fopen:
No such file or directory:fopen('/etc/nginx/tdmssl.crt','r') 
error:2006D080:BIO routines:BIO_new_file:no such file)

Що треба зробити?

Щоб визначити абсолютний шлях додаткових файлів, які використовуються у вашій конфігурації Virtualhost.

Подобається це:

root@ilg40:/etc/nginx/conf.d# cd
root@ilg40:~# cat /etc/nginx/sites-available/tdm 
server {

    listen          443 ssl;
    server_name         tjsdatamanager.redtjs.com;
    ssl_certificate     /etc/nginx/conf.d/tdmssl.crt;
    ssl_certificate_key /etc/nginx/conf.d/tdmssl.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        include proxy_params;
        proxy_pass http://unix:/etc/tdm/flask/wsgi.sock;
    }

}

-1

У мене було те саме питання. Мені довелося змінити / etc / nginx / sites-Enabled / default & default.save файли, які автоматично додали моє ім’я сайту без .com після нього під час процесу налаштування, ЯКІ ВИСТУПАЛИ В МОЇЙ ІНСТАНЦІЇ . Щоб це було коротко, ці два рядки потрібно було змінити в моєму / etc / nginx / включеному / за замовчуванням. Зверніть увагу, що цей файл відображається із значком ярлика у моїй файловій системі, але я зміг правою кнопкою миші натиснути файл та відредагувати його за допомогою параметра "Редагувати / внутрішній редактор".

HTTPS - проксі-запити на локальний Node.js ap # HTTPS - проксі-запити на локальний додаток Node.js: сервер {прослухати 443; ім'я сервера switchmagic.com;

    ssl on;
    # Use certificate and key provided by Let's Encrypt:
    ssl_certificate /etc/letsencrypt/live/switchmagic.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/switchmagic.com/privkey.pem;

Коли я переглянув файли і додав .com, який є умовою іменування, який я використовував для додавання файлу, до переключення магічних посилань у файлових каталогах, які видавали помилки, все було добре! Я знайшов багато Devs, які задають той же питання, тому я хотів кинути своє рішення там, щоб допомогти, оскільки відповіді, які я знайшов, здебільшого стосувалися дозволів root, але дозволу на root не були проблемою у моєму випадку. Скеля на Devs.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.