0

I've been struggling for a few hours now and went through lots of similar questions on SE. However, I couldn't manage to fix my probelm .

To answer the obvious questions:

  • there's no firewall on my ec2 (ubuntu) instance running
  • the 443 port is open for in/outbound
  • ssl files created with sudo certbot certonly --standalone
  • non-encrypted requests work fine
  • I've setup my domain’s A-Record to point to the public DNS of my EC2 instance. There are no options for Namespace records though.
  • Yes indeed, I'm an idiot

I haven't touched the nginx.conf-file besides adding:

include /etc/nginx/sites-enabled/*;

My nginx-conf in /etc/nginx/sites-available/myapp.conf (with symbolic link in ...../sites-enabled/myapp.conf):

server {
        listen 80;
        listen 443 default ssl;   

        ssl_certificate /etc/letsencrypt/live/mydomain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mydomain/privkey.pem;

        server_name mydomain;

        location /static/ {
                autoindex on;
                alias /home/ubuntu/MYAPP/static/;
        }

        location /data/ {
                autoindex off;
                alias /home/ubuntu/MYAPP/data/;
        }

        location / {
                include proxy_params;
                proxy_pass http://unix:/home/ubuntu/MYAPP/app.sock;
        }
}

In my APPS's settings.py I've added:

ALLOWED_HOSTS = [
  'localhost',
  '127.0.0.1',
  'mywebsite.com']

For now, I've commented out the following

#SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
#SECURE_SSL_REDIRECT = True
#SESSION_COOKIE_SECURE = True
#CSRF_COOKIE_SECURE = True

Issuing nc -vz localhost 443 gives Connection to localhost 443 port [tcp/https] succeeded!

netstat -ntlp gives

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -   

However, curl -v localhost:443 results in

*   Trying 127.0.0.1:443...
* Connected to localhost (127.0.0.1) port 443 (#0)
> GET / HTTP/1.1
> Host: localhost:443
> User-Agent: curl/7.71.1
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 400 Bad Request
< Server: nginx/1.18.0 (Ubuntu)
< Date: Fri, 08 Jan 2021 15:14:04 GMT
< Content-Type: text/html
< Content-Length: 264
< Connection: close
< 
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.18.0 (Ubuntu)</center>
</body>
</html>
* Closing connection 0

And trying to access my domain via https://... results in a time-out.

EDIT: As Steffen points out, my curl command was wrong. Here's the right one

curl -v https://localhost:443

gving rise to

*   Trying 127.0.0.1:443...
* Connected to localhost (127.0.0.1) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /home/ubuntu/anaconda3/ssl/cacert.pem
  CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: CN=mydomain.com
*  start date: Jan  8 10:37:06 2021 GMT
*  expire date: Apr  8 10:37:06 2021 GMT
*  subjectAltName does not match localhost
* SSL: no alternative certificate subject name matches target host name 'localhost'
* Closing connection 0
* TLSv1.3 (OUT), TLS alert, close notify (256):
curl: (60) SSL: no alternative certificate subject name matches target host name 'localhost'
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Now, /var/log/nginx/error.log doesn't show any errors.

/var/log/nginx/access.log 

doesn't show any request when I try to open via https in my browser. With just http, the requests are logged. So its seems like the request don't even arrive at nginx, right?

I've never used nginx (or anything server/backend-related really) before and I'm absolutely clueless.

EDIT2: Do I need an elastic ip for this to work? Any suggestions?

2
  • 1
    It should be curl -v https://localhost:443 (or simply https://localhost w/o port) instead of curl -v localhost:443, i.e. use HTTPS and not HTTP. Commented Jan 8, 2021 at 15:32
  • you're using a certificate issued to domain mydomain.com, yet you're accessing it with localhost. Try curl -v --insecure https://localhost.
    – mforsetti
    Commented Jan 14, 2021 at 11:21

0

You must log in to answer this question.

Browse other questions tagged .