Проверка подлинности сертификата клиента Nginx SSL Pass Through - PullRequest
0 голосов
/ 10 февраля 2019

Я настроил NGINX в качестве прокси перед реестром докера.Реестр использует tls для аутентификации пользователей (и настроен правильно; я могу получить изображения внутри кластера с помощью сертификата).Nginx настроен так:

 server {
      listen 443;
      server_name default_server;

      #charset koi8-r;
      #access_log  /var/log/nginx/host.access.log  main;

      location / {
        if ($remote_addr != xxx) {
          return 403;
          break;
        }
        proxy_set_header Host $host; 
        proxy_pass https://xxx:xxx;
        break;
      }

      error_page  404              /404.html;  
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
        root   /usr/share/nginx/html;
      }
    }

Теперь, когда я пытаюсь свернуться с действительным сертификатом, подобным этому:

curl -v --key client.key --cert client.cert  xxx:xxx/v2/_catalog

Я получаю ошибку http: TLS handshake error from xxx:xxx: tls: client didn't provide a certificate в журналах реестра докера,Правильно ли настроен nginx или его нет?Любые идеи о том, как отладить это дальше?

Состояние журналов NGINX:

[error] 8#8: *65 SSL_do_handshake() failed (SSL: error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:SSL alert number 42) while SSL handshaking to upstream,

1 Ответ

0 голосов
/ 11 февраля 2019

Наконец-то нашел решение.Функция прохода работает только в директиве stream (которая должна быть включена вне директивы http).В итоге все довольно просто и чисто:

stream {
  server {
    listen 443;
    allow <IP_TO_BE_ALLOWED>;
    deny all;
    proxy_pass xxx:xxx;
  }
}
...