Сертификаты не работают в официальном образе Docker Nginx - PullRequest
0 голосов
/ 24 августа 2018

У меня есть официальный образ Nginx, в который я добавил сертификаты и файл .conf, чтобы он слушал через порты 443 и 80. Я только что добавил в официальный dockerfile Nginx:

   ADD gp-search2.conf /etc/nginx/conf.d/
   ADD STAR.GREY.COM.crt /etc/ssl/certs/
   ADD wildcard_grey.com.key /etc/ssl/certs/

Я используюКонтейнер Azure устанавливает, и я успешно создаю контейнер с этой командой

az container create --resource-group RG --name nginx --image xxxxx.azurecr.io/api-s:nginx4 --cpu 1 --memory 1.5 --registry-username xxxxxx --registry-password xxxxxxxxxx --ip-address public --ports 443 --dns-name-label prod3

. После этого я успешно создаю контейнер на Azure с открытым IP-адресом и полным доменным именем, которое я предоставил prod3eastus.azurecontainer.io.Также я создаю в Dynect.net новый узел для имеющегося у нас домена: newcontainer.example.com и добавляю туда общедоступный IP-адрес нового контейнера, чтобы действительные сертификаты, имеющиеся у меня в контейнере, соответствовали домену.

Если я получаю доступ к контейнеру с общедоступным полным доменным именем или IP-адресом, который предоставляет Azure, я могу получить доступ нормально, но если я пытаюсь получить доступ по HTTPS, я получаю:

Эта страница не 't работает Если проблема не устранена, обратитесь к владельцу сайта.ОШИБКА HTTP 400

и

* ПРЕДУПРЕЖДЕНИЕ: невозможно проверить newcontainer.example.com сертификат, выданный 'CN =Network Solutions OV Server CA 2, O = Network Solutions LLC, L = Херндон, ST = VA, C = US ': невозможно локально проверить полномочия эмитента. *

Даже если это:

  • сертификаты действительны
  • сертификаты находятся на том же пути, который я указал на file.conf в контейнере Nginx (если не контейнер не будет запущен).

Это файл .conf, который у меня есть:

upstream searchapl {


server 40.x.x.x:8080 fail_timeout=0;
}
server {
    listen       80;
    server_name  _;
    return 301 https://$host$request_uri;   



    }
server {
  listen 443 ssl;
  server_name _;
  #status_zone go-backend-servers;
  ssl_certificate /etc/ssl/certs/STAR.client.COM.pem;
  ssl_certificate_key /etc/ssl/certs/STAR.client.COM.key;
  ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://searchapl;
    proxy_redirect http:// https://;
    # Socket.IO Support
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    # time out settings
    proxy_connect_timeout 159s;
    proxy_send_timeout   600;
    proxy_read_timeout   600;
    proxy_buffer_size    64k;
    proxy_buffers     16 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
    proxy_pass_header Set-Cookie;
}

}

Этот Nginx используется в качестве обратного прокси-сервера, который перенаправляет на работающий контейнер TomcatХорошо.Перенаправление работает успешно, если я ввожу контейнер IP.Это берет меня к Tomcat.Но за 443 года я получаю сертификаты.Что еще я могу проверить?Сертификат и ключ имеют доступ для чтения.


ОК. Теперь я продвигаюсь на шаг вперед, но все еще получаю ошибку.Я создал файл .pem вместо .crt с всей цепочкой первичных сертификатов и промежуточного + root.

Больше не возникает ошибка при невозможности проверить центр сертификации, но теперь я получаю:

***--2018-08-24 21:05:05--  https://xxxxxxxxxxxx.com/
Resolving xxxxxxxxxxxx.com (gp_searchv2.grey.com)... 23.x.x.x
Connecting to xxxxxxxxx.com (xxxxxxxxxx.com)|23.x.x.x|:443... connected.
HTTP request sent, awaiting response... 400
2018-08-24 21:05:05 ERROR 400: (no description).***
...