Nginx, проксирующий http к https с клиентским сертификатом

У нас есть приложение, которое не является знающим клиентским сертификатом и должно использовать аутентифицируемый веб-сервис клиентского сертификата. Для фиксации этого мы пытаемся использовать Nginx для инвертирования прокси локальный (http) URL, который наше приложение поразит к удаленному HTTPS, и клиентский сертификат аутентифицировал сервис. Конфигурация ниже:

location /secure/api/ {
    proxy_pass https://secure.webservice.com/secure/api/;
    proxy_ssl_certificate     /etc/ssl/api-client.crt;
    proxy_ssl_certificate_key /etc/ssl/api-client.crt.key;
    proxy_ssl_verify off;
}

При попытке соединиться с URL обратным прокси (http://our.proxy.com/secure/api/) это просто находится там и вращения. Если мы тестируем соединение от прокси с wget или openssl, мы можем соединиться успешно.

Вот отрывок из nginx/error.log:

2015/08/25 15:33:56 [info] 29810#0: *57 client closed connection while waiting for request, client: x.x.x.x, server: 0.0.0.0:80
2015/08/25 15:34:05 [info] 29810#0: *53 epoll_wait() reported that client prematurely closed connection, so upstream connection is closed too while reading response header from upstream, client: x.x.x.x, server: our.proxy.com, request: "GET /secure/api/ HTTP/1.1", upstream: "https://y.y.y.y:443/secure/api/", host: "our.proxy.com"

'Клиент закрылся, соединение' строки касаются, и я не уверен, какая сторона соединения закрывает соединение; клиент-> прокси или прокси-> в восходящем направлении.

Кроме того, стоит отметить, что tcpdump действительно показывает, что nginx является инициированием соединение с secure.webservice.com более чем 443.

Я чувствую себя подобно первому шагу в понимании, что это дешифрует, какая сторона соединения закрывается и почему... мысли?

Заранее спасибо.

Примечание: x.x.x.x является локальным (частным) IP, y.y.y.y является Интернетом (общедоступный) IP.

1
задан 25 August 2015 в 18:50
1 ответ

Есть несколько статей, касающихся этой конфигурации здесь и здесь . Мы также используем клиентские SSL-сертификаты с Nginx и имеем следующую рабочую конфигурацию с перенаправлением http / https:

#config for upstream app servers (not aware of SSL)
upstream appcluster {
    server X.X.X.1:8000;
    server X.X.X.2:8000;
}
# http-to-https redirect 
server {
       listen         80;
       server_name    localhost;
       return         301 https://$server_name$request_uri;
}
# resolves SSL & client SSL here
server {
    listen      443;
    server_name localhost;
    ssl on;
    ssl_certificate    <path to cert.pem>;
    ssl_certificate_key <path to cert.key>;
    ssl_client_certificate <path to CA authority to resolve client ssl - this is ca.crt>;
    ssl_verify_client on;
    ...
    # after ssl resolution forward to upstream cluster
    location /restService {
        ... 
        proxy_pass http://appcluster/restService;
    }
}
1
ответ дан 4 December 2019 в 00:01

Теги

Похожие вопросы