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

Запрещено разрешение nginx для самоподписанных файлов сертификатов для конфигурации ssl на CentOs

Очень похоже на этот вопрос но решения там не решили мою проблему.

Я пытаюсь изменить порт прокси 8443 на порт 4000 с помощью самоподписанного сертификата. Я создал свой сертификат вот так

openssl req -newkey rsa:2048 -sha256 -nodes -keyout certificate.key -x509 -days 365 -out certificate.pem

И я добавил серверный блок в свою конфигурацию nginx:

server {
  listen 8443 ssl;
  server_name www.mydomain.io;
  ssl_certificate /home/user/certificate.pem;
  ssl_certificate_key /home/user/certificate.key;

  location / {
    proxy_pass http://localhost:4000/;
  }
}

Но теперь, когда я пытаюсь запустить nginx с systemctl start nginx Я получаю следующую ошибку:

Sep 10 06:38:52 Elixir systemd[1]: Starting The nginx HTTP and reverse proxy server...
Sep 10 06:38:52 Elixir nginx[25347]: nginx: [emerg] BIO_new_file("/home/user/certificate.pem") failed (SSL: error:0200100D:system library:fopen:Permission denied:fopen('/home/user/certificate.pem','r') error:2006D002:BIO routines:BIO_new_file:system lib)
Sep 10 06:38:52 Elixir nginx[25347]: nginx: configuration file /etc/nginx/nginx.conf test failed

Изменить: файлы имеют права доступа 777, но не принадлежат пользователю nginx.

Эта проблема, скорее всего, возникла из-за того, что selinux пометил файл как небезопасный, например unconfined_u следовательно, запрещая доступ к нему независимо от прав доступа к файлу. Ярлыки для файла можно проверить, запустив ls -Z.

Решение - изменить метку (также известную как контекст selinux) файла на то, что nginx разрешил открывать:

chcon -t httpd_config_t /path/to/file

Очень строгое соглашение для сервисов - хранить их настройки и файлы конфигурации в /etc/ а не в вашем домашнем каталоге.

Во-вторых, первое, что нужно исследовать в fopen ... permission denied ошибка типа действительно являются разрешениями файловой системы для обоих файл и полный путь к каталогу поскольку они применяются к любому пользователю, от имени которого работает nginx.

(Домашние каталоги пользователей обычно закрыты для других пользователей ...)

Использовать Namei чтобы отобразить разрешения полного пути:

namei -mov /home/user/certificate.pem

Если нормальные разрешения файловой системы верны, то исследуйте, например, средства управления доступом SELinux, как описано в вопросах и ответах, на которые вы ссылаетесь.