Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NginX 502 Bad Gateway #1

Closed
hilbix opened this issue Sep 20, 2019 · 2 comments
Closed

NginX 502 Bad Gateway #1

hilbix opened this issue Sep 20, 2019 · 2 comments

Comments

@hilbix
Copy link
Owner

hilbix commented Sep 20, 2019

Momentan verstehe ich nicht, wie man über das von der Hetzner-Cloud-API gelieferte Websocket-URL auf die NoVNC-Verbindung kommen soll:

  • Leider habe ich kein Beispiel dafür gefunden. (Evtl. kann aus dem hier ja eines entstehen?)
  • Ich erhalte immer 502 Bad Gateway von NginX gemeldet, irgendein Detail fehlt das ich bisher nicht finden konnte
  • Evtl. gehe ich die Sache auch komplett falsch an?!?

Hinweise:

  • NoVNC kann derzeit keine WSS-URLs direkt verwenden. WTF? Man muss das in den Host, Port und Pfad splitten. Doof. Sollte aber gehen, aber momentan ist da noch 502 Bad Gateway im Weg

  • Ruft man das URL mit falschen Credentials auf, dann kommt ein 401 Unauthorized.

  • Ruft man das URL mit unbekannter Server-ID auf, dann kommt ein 422, das entspricht Unprocessable Entity.

    • An Hetzner: Das würde ich ändern, so kann man Server-IDs proben, also 401 rausgeben wie bei falschen Credentials
  • Ruft man es mit korrektem von der API gelieferten URL auf, kommt hingegen 502. Sprich, es ist ein deutlicher Unterschied zum Fehlerfall zu sehen.

Testscript

url="https://${1#*wss://}"
url="${url%%#*}"

echo "URL: $url"
curl --http1.1 -s -v -N -D- -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Origin: https://www.example.org" "$url" 2>&1

Der Fehler

Kine Ahnung was mir das "Expire in X ms for Y" da sagen will, aber ich habe es mal dringelassen:

URL: https://web-console.hetzner.cloud/?server_id=HIERSTEHTNEZAHL&token=HIERSTEHTEINTOKEN
[..]
*   Trying 213.239.246.1...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x5572a098b280)
* Connected to web-console.hetzner.cloud (213.239.246.1) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [112 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [2644 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [300 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [37 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: CN=*.hetzner.cloud
*  start date: Jul 26 00:00:00 2018 GMT
*  expire date: Oct 25 12:00:00 2019 GMT
*  subjectAltName: host "web-console.hetzner.cloud" matched cert's "*.hetzner.cloud"
*  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=Thawte TLS RSA CA G1
*  SSL certificate verify ok.
} [5 bytes data]
> GET /?server_id=HIERSTEHTNEZAHL&token=HIERSTEHTEINTOKEN HTTP/1.1
> Host: web-console.hetzner.cloud
> User-Agent: curl/7.64.0
> Accept: */*
> Connection: Upgrade
> Upgrade: websocket
> Origin: https://www.example.org
> 
{ [5 bytes data]
< HTTP/1.1 502 Bad Gateway
HTTP/1.1 502 Bad Gateway
< Server: nginx
Server: nginx
< Date: Fri, 20 Sep 2019 08:22:11 GMT
Date: Fri, 20 Sep 2019 08:22:11 GMT
< Content-Type: text/html
Content-Type: text/html
< Content-Length: 0
Content-Length: 0
< Connection: keep-alive
Connection: keep-alive
< ETag: "5d666872-0"
ETag: "5d666872-0"
< Strict-Transport-Security: max-age=3600; preload
Strict-Transport-Security: max-age=3600; preload

< 
* Connection #0 to host web-console.hetzner.cloud left intact
@hilbix
Copy link
Owner Author

hilbix commented Sep 22, 2019

Der 502 geht vorbei, wenn man folgenden Header einfügt:

Sec-WebSocket-Protocol: binary

Zwar habe ich bisher kein Programm gefunden, das das Protokoll auf der Clientseite spricht, aber irgendwo gibt es Google-Hits im Dunstkreis von "Websocksify". Es besteht also Hoffnung.

@hilbix
Copy link
Owner Author

hilbix commented Sep 22, 2019

Die neueste Version von noVNC spricht direkt wss-URLs. Hurrah.

Aber sie spricht nicht Sec-WebSocket-Protocol: binary ;(

hilbix added a commit that referenced this issue Sep 22, 2019
This uses the newest version of noVNC such,
that it works with a reasonable CSP.

The problem is, that I get 502 from Hetzner,
due to a missing header "Sec-WebSocket-Protocol: binary"

Currently I have no idea, how to support this header properly.

See #1
hilbix added a commit that referenced this issue Sep 22, 2019
This uses the newest version of noVNC such,
that it works with a reasonable CSP.

The problem is, that I get 502 from Hetzner,
due to a missing header "Sec-WebSocket-Protocol: binary"

Currently I have no idea, how to support this header properly.

See #1
@hilbix hilbix closed this as completed in cd792ea Sep 22, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant