I have got a wildcard ssl certificate for *.domain.no by generating a CSR and I received a .pem file from the ssl-provider. Now I have the key files including:
server.key
certificates.pem (includes Intermediate certificate and the SSL-certificate)
I want to use this certificate on a docker-nginx that includes some subdomains, my config file looks like below:
/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 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
The https does not work and it gives the following error in the browser:
This site can’t be reached
Try:
Checking the connection
Checking the proxy and the firewall
As I've got the following error in docker-logs, I've changed Dockerfile to:
Error:
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)
Modified 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
Now it doesn't give error in the docker-logs however it still doesn't work with HTTPS. :(
I've tried to check the error.log in /var/log/nginx by connecting to the nginx-container and cat the file but there is nothing in the file.
Any help would be appreciated.
Updated:
I have modified the Nginx docker container port to 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-провайдером.
В файле отсутствовал еще один сертификат. Файл 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-----
Я думаю, что это, вероятно, работало в первый раз, но вы забыли -p 443: 443 из командной строки докера.
После того, как вы внесли изменения, вы скопировали сертификаты по неправильному пути.
Ожидается файл сертификата по адресу /etc/ssl/certificates.pem
.
и вы копируете их в: / etc / nginx / ssl
Итак, попробуйте изменить файл докера обратно на тот, который был у вас изначально, и запустить его с помощью -p 443: 443.
Другой способ запустить это используется в интерактивном режиме для тестирования.
docker run --net = host -ti yourcontainername / bin / bash
Это создаст оболочку в контейнере. Вы можете дважды проверить конфигурации, проверив пути и указав файлы конфигурации.
Затем запустить его в интерактивном режиме с помощью nginx -g "daemon off" Убедитесь, что он работает, если все в порядке, внесите необходимые изменения и снова запустите.