Mam dwa serwery, oba mają nginx. Serwer A nasłuchuje 443 i jest skonfigurowany do uwierzytelniania za pomocą certyfikatu SSL klienta.
Serwer B ma wewnętrzny proces, który musi komunikować się z serwerem A za pośrednictwem nginx.
Chciałbym skonfigurować Nginx na serwerze B, który będzie nasłuchiwał 8080 (bez szyfrowania, ponieważ jest to cała komunikacja lokalna) i proxy_pass do serwera A: 443.
Pytanie brzmi: jak wstrzyknąć certyfikat klienta? Nie znalazłem żadnej funkcji proxy_xxxx, która by to zrobiła.
Wiem, jak zrobić odpowiednik socat, ale moim wymaganiem jest użycie nginx.
nginx
proxy
ssl-certificate
Bastien974
źródło
źródło
### Section 2: Unconverted directives ###
# Flag Description
# [S] Unsupported directives.
# In conf file: dummy.conf
# Line 32: SSLProxyMachineCertificateFile /path/to/cert (mod_ssl.c)
# [S] SSLProxyMachineCertificateFile: No relevant directive in Nginx.
Odpowiedzi:
Czy wystarczy przekazać szczegóły certyfikatu klienta?
Możesz dodać
do konfiguracji, a następnie informacje o certyfikacie są dostępne dla serwera B za pośrednictwem nagłówka X-SSL-Cert.
źródło
\t
z\n
tego nagłówka.$ssl_client_cert
zmienna jest przestarzała;$ssl_client_escaped_cert
zmienny powinien być stosowany zamiast.Najwyraźniej tego właśnie szukasz: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_certificate Dostępne od wersji 1.7.8.
źródło
Wydaje się, że problem zależy w dużej mierze od wersji. W Ubuntu 14.04 LTS domyślnym nginx jest przestarzały 1.4. Najpierw musisz zainstalować wersję opartą na PPA
https://leftshift.io/upgrading-nginx-to-the-latest-version-on-ubuntu-servers
pokazuje, jak to zrobić za pomocą:
powinieneś skończyć z:
Konfiguracja z @ xatr0z odpowiedź https://serverfault.com/a/636455/162693 wskazująca na http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate nie działa:
niedziałająca propozycja
nie działa od razu z wersją 1.8.0. Prawdopodobnie jest to tylko wskazówka i nie może być używany jako plik konfiguracyjny jako taki lub zależy od innej wersji.
Testuję z serwerem zaplecza A opartym na Apache2 z włączonym SSL i samopodpisanymi certyfikatami klienta. Konfiguracje SSLOptions konfiguracji Apache są ustawione na:
Ułatwia to debugowanie sytuacji, ponieważ skrypt phpinfo () po stronie zaplecza wyświetla informacje po stronie serwera i klienta.
Aby to sprawdzić, użyłem:
https: // backend / test / phpinfo
z certyfikatem SSL zainstalowanym w przeglądarce i otrzymuję sekcje: SSL_SERVER_S_DN_CN dla certyfikatu serwera i SSL_CLIENT_S_DN_CN dla certyfikatu klienta.
Jako pierwszy start użyłem (wypełnij części w nawiasach) do skonfigurowania nginx na serwerze frontonu B:
odkomentowanie określonej części certyfikatu klienta SSL tylko po to, aby sprawdzić, czy działa samo odwrotne proxy.
Teraz http: // frontend: 8080 / test / phpinfo.php działa
SSL_SERVER_S_DN_CN dla certyfikatu serwera jest wyświetlany, a SSL_CLIENT_S_DN_CN dla certyfikatu klienta nie jest (jeszcze) wyświetlany
Teraz po odkomentowaniu:
i sprawdzanie / restartowanie
http: // frontend: 8080 / test / phpinfo.php działa i
SSL_SERVER_S_DN_CN dla certyfikatu serwera jest wyświetlana i SSL_CLIENT_S_DN_CN dla certyfikatu klienta jest wyświetlana
więc teraz mamy rzeczy działające zgodnie z wymaganiami.
Zwróć uwagę na błąd https://trac.nginx.org/nginx/ticket/872#ticket
źródło
Jest całkiem fajny artykuł na temat certyfikatów klienta nginx i SSL; używa PHP z FastCGI jako przykładem, ale myślę, że możesz dostosować to do konfiguracji odwrotnego proxy:
Źródło http://nategood.com/client-side-certificate-authentication-in-ngi
źródło
Wygląda na to, że tego modułu SEnginx szukasz: http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
źródło