我通过生成 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 发布的。
我认为它可能是第一次工作,但您从 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" 以交互方式运行它检查它是否正常工作,如果一切正常,则进行必要的更改并再次运行。
它在文件中缺少另一个证书。ssl_certificate 文件 (certificates.pem) 应包含三个证书:
“中间证书”、“初级证书”和“根证书”。
因此,我已要求 SSL 提供商向我发送根证书,并将该证书添加到 .pem 文件中,HTTPS 工作正常。
certificate.pem 文件如下所示: