尝试使用“让我们加密”保护Nginx,但无法使用非root用户访问/ etc / letsencrypt / live中的.pem文件

时间:2018-09-17 16:15:53

标签: docker nginx ssl-certificate dockerfile lets-encrypt

我有一个带有Nginx反向代理服务器的Flask应用程序。我已经在数字海洋小滴上部署了我的应用程序。我创建了一个具有root特权的用户,并且正在使用该用户通过HTTPS运行我的应用程序。我对以下路径中的.pem文件的权限存在疑问:/etc/letsencrypt/live/my-domain-name.com。我现在要做的是在终端中使用sudo命令将这些文件复制到我的项目文件夹中,然后在nginx Dockerfile中再次将它们复制到/ etc / nginx并在配置文件中提供此路径。但是,这并不理想,因为我希望自动更新我的SSL证书。我尝试使用 chown -R user:user / etc / letsencrypt 之类的命令更改root用户的权限,但没有任何效果。我收到此错误:

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)

您知道如何解决此问题吗?我希望能够使用/ live / my-domain-name路径访问.pem文件,并且能够在证书过期时更新证书而不使用root用户。任何帮助将不胜感激。谢谢。

项目配置文件:

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 :(得分:0)

我认为这不是最佳实践。您也不应该以root用户访问您的Droplet

您应该使用sudo授予新用户的权限,并完全删除root用户访问权限,如本指南所述: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04

然后,您应验证小滴并使用certbot nginx插件存储SSL证书,如此处所述:
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04

上一指南的第5步介绍了续订证书部分。