Попытка защитить Nginx с помощью Let's Encrypt, но не может получить доступ к файлам .pem в / etc / letsencrypt / live с помощью пользователя без полномочий root - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть приложение Flask с обратным прокси-сервером nginx. Я развернул свое приложение на капле Digital Ocean. Я создал пользователя с привилегиями root и использую этого пользователя для запуска своего приложения по HTTPS. У меня были проблемы с разрешениями для файлов .pem, расположенных по следующему пути: /etc/letsencrypt/live/my-domain-name.com. Теперь я копирую эти файлы в папку моего проекта с помощью команды sudo в терминале, а затем в файле Docker nginx я снова копирую их в / etc / nginx и указываю этот путь в файле конфигурации. Однако это не идеально, потому что я хочу, чтобы мой сертификат SSL автоматически обновлялся. Я попытался изменить права доступа моего пользователя root с помощью таких команд, как chown -R user: user / etc / letsencrypt , но ничего не получалось. Я получаю эту ошибку:

nginx: [emerg] BIO_new_file("/etc/letsencrypt/live/my-domain-name.com/fullchain.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/letsencrypt/live/my-domain-name.com/fullchain.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)

Есть идеи, как я могу решить эту проблему? Я хочу иметь доступ к файлам .pem, используя путь / live / my-domain-name, и иметь возможность обновить мой сертификат, когда он истекает, без использования пользователя root. Любая помощь будет принята с благодарностью. Спасибо.

Файл проекта conf:

server {

        listen 80;
        server_name my-domain-name.com www.my-domain-name.com;
        return 301 https://$host$request_uri;
    }



    server {
        listen       443 ssl;
        server_name  my-domain-name.com www.my-domain-name.com;
        ssl_certificate     /etc/nginx/fullchain.pem;
        ssl_certificate_key /etc/nginx/privkey.pem;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;

        location / {
            proxy_pass http://app:8000;
            proxy_ssl_server_name on;

            # Do not change this
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /static {
            rewrite ^/static(.*) /$1 break;
            root /static;
        }
    }

Nginx Dockerfile:

 FROM nginx:1.13.3

    EXPOSE 80
    EXPOSE 443

    RUN rm /etc/nginx/nginx.conf
    COPY nginx.conf /etc/nginx/

    RUN rm /etc/nginx/conf.d/default.conf
    COPY project.conf /etc/nginx/conf.d/

    COPY fullchain.pem /etc/nginx/
    COPY privkey.pem /etc/nginx/

1 Ответ

0 голосов
/ 18 сентября 2018

Я не думаю, что это лучшая практика. Вам также не следует обращаться к дроплету с пользователем root

Вы должны настроить дроплет для нового пользователя с правами sudo и полностью удалить root-доступ, как описано в этом руководстве: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04

Затем вы должны проверить дроплет и сохранить сертификаты SSL с помощью плагина certbot nginx, как описано здесь:
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04

Шаг 5 последнего руководства объясняет часть обновления сертификата.

...