HTTPS не работает на Docker-Nginx

У меня есть подстановочный ssl-сертификат для *.domain.no сгенерировав CSR, я получил файл .pem от ssl-провайдера. Теперь у меня есть ключевые файлы, в том числе:

сервер.ключ

сертификаты.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-Dockerfile:

FROM nginxVOLUME /etc/nginx/conf.dCOPY default.conf /etc/nginx/conf.d/COPY certificates.pem /etc/sslCOPY server.csr /etc/sslCOPY server.key /etc/ssl

https не работает и выдает следующую ошибку в браузере:

This site can’t be reachedTry:Checking the connectionChecking 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 nginxCOPY default.conf /etc/nginx/conf.d/#CMD ["nginx", "-g", "daemon off;"]RUN mkdir /etc/nginx/sslRUN chown -R root:root /etc/nginx/sslRUN chmod -R 600 /etc/nginx/sslCOPY certificates.pem /etc/nginx/sslCOPY server.key /etc/nginx/ssl

Теперь он не выдает ошибку в журналах docker, однако он по-прежнему не работает с HTTPS. :(

Я попытался проверить ошибку.войдите в /var/log/nginx, подключившись к nginx-контейнеру и загрузив файл, но в файле ничего нет.

Любая помощь была бы признательна.

Обновленный:

Я изменил порт контейнера Nginx docker на 443 (-p 443: 443) и изменил разрешение /etc / nginx / ssl на 644, теперь, если я открываю URL-адрес с использованием https, он выдает следующую ошибку:

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

Хотя в нем говорится, что он выдан моим ssl-провайдером.

Я думаю, что это, вероятно, работало в первый раз, но вы забыли -p 443: 443 из командной строки docker.

После внесения изменений вы скопировали сертификаты по неправильному пути.

Он ожидает файл сертификата по адресу: /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 работал нормально.

Файл certificates.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-----

@Sarah каков сейчас статус и, пожалуйста, скажите нам, на каком форуме мы будем отлаживать дальше?

@Sarah, пожалуйста, каков статус этой темы?

@Aleks У него все еще есть проблема с сертификатом.

“Все еще не работает” на самом деле не дает нам особых возможностей помочь. Проведите некоторую диагностику - можете ли вы пинговать контейнер, можете ли вы связаться с Nginx по http и т.д.

Перекрестная публикация не рекомендуется SE Дублирующий вопрос: https://stackoverflow.com/q/44358819/596285

@ Tim Он отлично работает с http, но когда я меняю конфигурацию на https, он не работает. Я могу добраться до контейнера, и конфигурационный файл и каталог сертификатов выглядят нормально.

пожалуйста, не могли бы вы вставить выходные данные curl -vk https://...... спасибо