Yukarı SSL ile ters proxy olarak nginx


20

İstemcilerin kendinden imzalı sertifikaları yüklemek zorunda kalmadan bağlanabilmeleri için dahili bir API için bir proxy oluşturuyorum.

XSendfile kullandığım istemciler (yerleşik, sahip olunan ve yalnızca dahili olarak kullanılan) SSL üzerinden nginx kutusuna bağlanacak uygulama düzeyinde kimlik bilgilerini doğrulamak (raylar uygulaması). Kimlik bilgileri geçerliyse, bağlantı nginx'e geri aktarılır ve burada bağlantıyı yukarı akış sunucusuna göndermek için proxy_pass kullanır.

Şimdi bu standart http bağlantıları için harika çalışıyor, ancak sertifikalarımızı karışıma nasıl ekleyeceğimizi anlamaya çalışıyorum.

Bu soru hemen hemen aynı olan bu bir , ama garip sertifika şartlarına.

Nginx ile bu mümkün mü? Daha iyi bir çözüm var mı?

Ayrıca istemci -> nginx http ve nginx API için kendinden imzalı sertifika razı olur.

Yanıtlar:


19

Nginx kullanmak isteyen bu soruya rastlayan herkes için bunu herhangi bir normal proxy gibi ayarlayabilir ve arka uçtan kendinden imzalı bir sertifikayı kabul etmek için dışa aktarılan pem sertifikasını (ve belki de bir anahtarı) sağlamanız ve SSL doğrulamasını ayarlamanız gerekir. kapatır. Örneğin:

...

server {
    listen       10.1.2.3:80;
    server_name  10.1.2.3 myproxy.mycompany.com;

    location / {
         proxy_pass                    https://backend.server.ip/;
         proxy_ssl_trusted_certificate /etc/nginx/sslcerts/backend.server.pem;
         proxy_ssl_verify              off;

         ... other proxy settings
    }

Güvenli arka ucunuz, IP / Bağlantı Noktası çifti başına birden çok ana makinenin sunulduğu Sunucu Adı Tanımlama SNI'sını kullanıyorsa proxy_ssl_server_name on;, yapılandırmaya dahil etmeniz de gerekebilir . Bu, nginx 1.7.0 ve sonrasında çalışır.


1
proxy_ssl_server_name on;yerleşik Google tarafından yönetilen SSL'sini kullanarak Google App Engine'deki bir ana bilgisayara trafik proxy yaparken bu çalışmayı sağlamak için ihtiyacım olan tek şey buydu! (Bu kendinden imzalı bir sertifika veya başka bir şey değildir, bu yüzden sadece bir satıra ihtiyacı vardı). Büyük ipucu için teşekkürler.
XP84

Eğer ssl_certificate kullanmıyorsam "no" ssl_certificate "," listen ... ssl "yönergesi için tanımlanır. Akış yukarı sertifikası sağlamadan SSL'yi proxy yapmak mümkün müdür?
Damien

Bu konu http yukarı akış yukarı https bağlanmak proxy hakkında olduğu gibi konu dışı. Https'yi proxy yapmak istiyorsanız, muhtemelen ayrı bir soru olarak ele alınır. Hızlı ve kısa yanıt Hayır Nginx bir sertifika ve özel anahtar olmadan bir https bağlantı noktasını "dinleyemez".
shonky linux user

5

Muhtemelen böyle bir şey istediğinizi düşünüyorum (bu örnek için açıkça basitleştirilmiş):

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    upstream backend {
        server mybackendserver:443;
    }

    server {
        server_name localhost;
        listen 443 ssl;
        ssl_certificate /etc/nginx/server.crt;
        ssl_certificate_key /etc/nginx/server.key;
        ssl_verify_client off;
        location / {
            proxy_pass  https://backend;
            proxy_set_header Host $http_host;
            proxy_set_header X_FORWARDED_PROTO https;
        }
    }
}

Değiştirmeniz gerekebilecek tek şey "Ana Bilgisayar" ı açık yapmak olacaktır - örneğin, proxy ana bilgisayar adınız nginx proxy sunucusunda kullanılan ana bilgisayar adıyla aynı değilse.


Anladığım kadarıyla, ssl_certificate ve ssl_certificate_key parametreleri , yukarı akış bağlantısına değil istemci bağlantısına başvurur . Durum bu mu?
simonmaddox

1
Anladığım kadarıyla, evet. Bu örnekte, istemcinin gördüğü sertifika nginx tarafından sağlanan sertifikadır. nginx sunucu tarafından sağlananı görür (ve doğru mu? Emin değilim ...), ancak istemciye iletmez.
Reçel

3

Gelecekte bununla karşılaşan herkes için, bunun için nginx kullanmadım.

Bunun yerine, "istemci modunda" stunnel kullanarak sona erdi. Kurulumu çok kolay ve tam olarak ihtiyacım olanı yapıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.