Unable to proxy pass to https backend on nginx

Francis Daly francis at daoine.org
Mon Sep 7 11:10:24 UTC 2020


On Sun, Sep 06, 2020 at 10:15:28AM -0400, ravansh wrote:

Hi there,

> I am unable to reverse proxy to my https backend. what am i doing wrong? I
> am using the same set of cert for the backend and frontend as I am running
> them both on the same machine. I got my certificates from zerossl. Here is
> the error I get :
> 
> curl --cacert /etc/ssl/certs/ca_bundle.crt https://www.ravi.guru

That response says that curl-client does accept the ssl-negotiation
with your port-443 nginx server when it knows to trust the ca_bundle.crt
contents.

> 2020/09/06 01:50:53 [error] 2603#0: *4 upstream SSL certificate verify
> error: (2:unable to get > issuer certificate) while SSL handshaking to
> upstream, client: 192.168.103.15, server: www.ravi.guru, request: "GET /
> HTTP/1.1", upstream: "https://192.168.103.15:8080/", host: "www.ravi.guru"

That log says that nginx-client does not accept the ssl-negotiation with
your port-8080 nginx server.

> When I connect to backend directly, all goes well:
> 
> curl --cacert /etc/ssl/certs/ca_bundle.crt https://www.ravi.guru:8080

And that response says that curl-client does accept the ssl-negotiation
with your port-8080 nginx server when it knows to trust the ca_bundle.crt
contents.

> ===============
> Here is my config file
> ===============

As an aside: a lot of these directives are only needed if you are using
client certificates; you don't appear to be, so you can possibly remove
some of these directives for person-clarity.

>   server {
>     listen 443 http2  ssl;
>     server_name www.ravi.guru;

>     location / {
>         proxy_pass                    https://www.ravi.guru:8080;

>         proxy_ssl_trusted_certificate /etc/ssl/certs/ca_bundle.crt;
>         proxy_ssl_verify        on;
>         proxy_ssl_verify_depth  2;

I guess that one possibility is that the "certificate chain" to be
verified is longer than 2; after you've confirmed that the certificate
file (below) is correct, it might be worth increasing that depth to
whatever your system uses.

>     }
> }
> server {
> listen 8080 http2 ssl;
> #listen [::]:443 http2 ssl;
> 
> server_name www.ravi.guru;
> 
> ssl_certificate /etc/ssl/certs/certificate.crt;

Does "grep CERT /etc/ssl/certs/certificate.crt" show one BEGIN/END pair,
or more than one?

As in -- does that file hold just the this-server certificate, or does
it also hold the full chain back to the root?

(If it does not hold the full chain, I guess it is possible that
curl-client and nginx-client can have different behaviours.)

Good luck with it,

	f
-- 
Francis Daly        francis at daoine.org


More information about the nginx mailing list