NGINX SSL Ters Proxy Yukarı Akış SSL'yi Doğrulayın
Yalnızca bir IP adresi kullanarak birden çok web sitesini barındırmak için ters proxy olarak NGINX kurulumuna sahibim. Proxy üzerinde bir Lets Encrypt sertifikam ve yukarı akış sunucusunda farklı bir Lets Encrypt sertifikam var. Temel olarak, trafiği yukarı akış sunucusuna iletmek ve yukarı akış sunucusunun geçerli bir TLS sertifikasına sahip olduğunu doğrulamak için NGINX'e ihtiyacım var. Devre dışı bırakırsam proxy_ssl_verify
işe yarayacak. https://app.local.example.com
Dahili ağıma gidersem , uygulama iyi çalışıyor.
Ağ Şeması:
https://app.example.com --> NGINX Reverse Proxy --> https://app.local.example.com (Local IP Address)
NGINX Ters Proxy Yapılandırma Dosyası:
server {
listen 80;
rewrite ^ https://$host$request_uri? permanent;
}
server {
server_name app.example.com;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/app.example.com/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/app.example.com/chain.pem;
location / {
proxy_redirect off;
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-HTTPS on;
proxy_ssl_session_reuse off;
proxy_ssl_name app.local.example.com
proxy_ssl_verify on;
proxy_ssl_verify_depth 2; # I've tried 1,2,3,4
proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
proxy_pass https://app.local.example.com
}
}
İşte aldığım hata mesajı.
[error] 1087#1087: *2 upstream SSL certificate verify error: (20:unable to get local issuer certificate) while SSL handshaking to upstream, client: [Client IP], server: app.example.com, request: "GET / HTTP/1.1", upstream: "https://192.168.1.5:443/", host: "app.local.example.com", referrer: "https://app.example.com/">
OpenSSL Sürümü: OpenSSL 1.1.1f 31 Mar 2020
nginx -v: nginx version: nginx/1.18.0 (Ubuntu)
cat / etc / issue: Ubuntu 20.04.1 LTS \n \l
Çıktı openssl s_client -connect app.local.example.com:443
CONNECTED(00000003)
depth=0 CN = app.local.example.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = app.local.example.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:CN = app.local.example.com
i:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFeDCCBGCgAwIBAgISA8NkbZ6wz2EnKcedXujKT9AmMA0GCSqGSIb3DQEBCwUA
...
-----END CERTIFICATE-----
...
SSL-Session:
Protocol : TLSv1.3
...
Verify return code: 21 (unable to verify the first certificate)
Yanıtlar
Certificate chain
0 s:CN = app.local.example.com
i:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
Sunucunuz doğru şekilde yapılandırılmamış. Yaprak sertifika (app.local.example.com) ve ara sertifika göndermek yerine yalnızca yaprak sertifikayı gönderir. Eksik ara sertifika nedeniyle, yerel güven bağlantısına giden bir güven yolu oluşturulamaz, bu da sertifika doğrulamasının "yerel yayıncı sertifikası alınamıyor " ile başarısız olduğu anlamına gelir . Tarayıcılar genellikle eksik ara sertifikayı başka bir yerden alarak bu tür sorunların üstesinden gelir, ancak diğer TLS yığınları genellikle bu tür geçici çözümler yapmaz.
Sunucuyu doğru bir şekilde yapılandırdıktan sonra, aşağıdakileri görmelisiniz openssl s_client
. Bu yapıldıktan sonra nginx de çalışmalıdır.
Certificate chain
0 s:CN = app.local.example.com
i:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
1 s:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
i:O = Digital Signature Trust Co., CN = DST Root CA X3
Değiştim ssl_certificate
değeri cert.pem
için fullchain.pem
yukarı sunucuda.
ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/app.example.com/chain.pem;
İşte kullandığım NGINX yapılandırma dosyalarına bir bağlantı