AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 854101
Accepted
Matrix
Matrix
Asked: 2017-06-06 12:56:51 +0800 CST2017-06-06 12:56:51 +0800 CST 2017-06-06 12:56:51 +0800 CST

HTTPS 在 Docker-Nginx 上不起作用

  • 772

我通过生成 CSR 获得了 *.domain.no 的通配符 ssl 证书,并且我从 ssl-provider 收到了一个 .pem 文件。现在我有关键文件,包括:

服务器密钥

certificate.pem(包括中间证书和 SSL 证书)

我想在包含一些子域的 docker-nginx 上使用此证书,我的配置文件如下所示:

/etc/nginx/conf.d/default.conf

server 
{
   listen      443 ssl;
   server_name     test.domain.no;
   access_log  /var/log/nginx/nginx.access.log;
   error_log   /var/log/nginx/nginx.error.log;
   ssl    on;
   ssl_certificate    /etc/ssl/certificates.pem;
   ssl_certificate_key    /etc/ssl/server.key;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   location /
   {
      proxy_pass         {dockerEndpoint};
      proxy_redirect     off;

    ##proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

      client_max_body_size       10m;
      client_body_buffer_size    128k;

      proxy_connect_timeout      90;
      proxy_send_timeout         90;
      proxy_read_timeout         90;

      proxy_buffer_size          4k;
      proxy_buffers              4 32k;
      proxy_busy_buffers_size    64k;
      proxy_temp_file_write_size 64k;

     }
}

Nginx-Docker 文件:

FROM nginx
VOLUME /etc/nginx/conf.d
COPY default.conf /etc/nginx/conf.d/
COPY certificates.pem /etc/ssl
COPY server.csr /etc/ssl
COPY server.key /etc/ssl

https 不起作用,它在浏览器中给出以下错误:

This site can’t be reached
Try:
Checking the connection
Checking the proxy and the firewall

由于我在 docker-logs 中出现以下错误,我已将 Dockerfile 更改为:

错误:

BIO_new_file("/etc/ssl/certificates.pem") failed (SSL: error:02001014:system library:fopen:Not a   directory:fopen('/etc/ssl/certificates.pem','r') error:2006D002:BIO   routines:BIO_new_file:system lib)
nginx: [emerg] BIO_new_file("/etc/ssl/certificates.pem") failed (SSL:  error:02001014:system library:fopen:Not a   directory:fopen('/etc/ssl/certificates.pem','r') error:2006D002:BIO   routines:BIO_new_file:system lib)

修改后的 Dockerfile:

FROM nginx

COPY default.conf /etc/nginx/conf.d/
#CMD ["nginx", "-g", "daemon off;"]
RUN mkdir /etc/nginx/ssl
RUN chown -R root:root /etc/nginx/ssl
RUN chmod -R 600 /etc/nginx/ssl
COPY certificates.pem /etc/nginx/ssl
COPY server.key /etc/nginx/ssl

现在它不会在 docker-logs 中给出错误,但它仍然不适用于 HTTPS。:(

我试图通过连接到 nginx-container 并 cat 文件来检查 /var/log/nginx 中的 error.log,但文件中没有任何内容。

任何帮助,将不胜感激。

更新:

我已将 Nginx docker 容器端口修改为 443 (-p 443:443) 并将 /etc/nginx/ssl 的权限更改为 644,现在如果我使用 https 打开 url,则会出现以下错误:

There are issues with the site's certificate chain (net::ERR CERT COMMON_NAME_INVALID)

虽然它说它是由我的 ssl-provider 发布的。

nginx
  • 2 2 个回答
  • 16662 Views

2 个回答

  • Voted
  1. hookenz
    2017-06-06T17:06:45+08:002017-06-06T17:06:45+08:00

    我认为它可能是第一次工作,但您从 docker 命令行忘记了 -p 443:443 。

    进行更改后,您将证书复制到了错误的路径。

    它需要一个证书文件: /etc/ssl/certificates.pem 并且您将它们复制到:/etc/nginx/ssl

    因此,尝试将 docker 文件更改回最初的文件,并使用 -p 443:443 运行它。

    运行它的另一种方法是交互式地进行测试。

    docker run --net=host -ti yourcontainername /bin/bash

    这将在容器中创建一个外壳。您可以通过检查路径和配置文件来仔细检查配置。

    然后使用 nginx -g "daemon off" 以交互方式运行它检查它是否正常工作,如果一切正常,则进行必要的更改并再次运行。

    • 4
  2. Best Answer
    Matrix
    2017-06-16T03:58:38+08:002017-06-16T03:58:38+08:00

    它在文件中缺少另一个证书。ssl_certificate 文件 (certificates.pem) 应包含三个证书:

    “中间证书”、“初级证书”和“根证书”。

    因此,我已要求 SSL 提供商向我发送根证书,并将该证书添加到 .pem 文件中,HTTPS 工作正常。

    certificate.pem 文件如下所示:

    -----BEGIN CERTIFICATE----- 
    (Your Primary SSL certificate: your_domain_name.crt) 
    -----END CERTIFICATE----- 
    -----BEGIN CERTIFICATE----- 
    (Your Intermediate certificate: DigiCertCA.crt) 
    -----END CERTIFICATE----- 
    -----BEGIN CERTIFICATE----- 
    (Your Root certificate: TrustedRoot.crt) 
    -----END CERTIFICATE-----
    
    • 2

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve