Letsencrypt auf einem nicht standardmäßigen Port?

Letsencrypt auf einem nicht standardmäßigen Port?

Ich habe ein seltsames Phänomen, das ich nicht erklären kann. Ich betreibe ein nginx mit letsencrypt und einem Java-Anwendungsserver. Das nginx lauscht auf 443 und der Anwendungsserver auf 8008. Beide verwenden SSL und dasselbe Zertifikat. Nginx funktioniert einwandfrei, aber der Anwendungsserver ist seltsam:

Versuchen Sie diese URL

  • Postman wird ohne Fehler geladen
  • CURL wird ohne Fehler geladen
  • Safari unter macOS wird ohne Fehler geladen
  • Chrome unter macOS lädt die Seite, aber der JavaScript-Abruf schlägt /openapi.jsonfehl - auchder direkte Download
  • Firefox auf macOS schlägt fehl (kann keine sichere Verbindung herstellen)
  • Safari unter iOS schlägt fehl

Verwendung curl -v --http1.1 https://frascati.projectkeep.io:8008/openapi/von Shows:

curl -v --http1.1 https://frascati.projectkeep.io:8008/openapi/
*   Trying 18.218.218.93...
* TCP_NODELAY set
* Connected to frascati.projectkeep.io (18.218.218.93) port 8008 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: CN=frascati.projectkeep.io
*  start date: Jan 27 13:46:16 2020 GMT
*  expire date: Apr 26 13:46:16 2020 GMT
*  subjectAltName: host "frascati.projectkeep.io" matched cert's "frascati.projectkeep.io"
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
*  SSL certificate verify ok.
> GET /openapi/ HTTP/1.1
> Host: frascati.projectkeep.io:8008
> User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
> Accept: */*
> Referer: 
> 
< HTTP/1.1 200 OK
< accept-ranges: bytes
< content-length: 1394
< cache-control: public, max-age=86400
< last-modified: Mon, 27 Jan 2020 16:05:19 GMT
< date: Mon, 27 Jan 2020 18:11:52 GMT
< content-type: text/html;charset=UTF-8
< 
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>

Aktualisieren

Zum Vergleich hier die nginx Ausgabe für diegleicher Inhalt:

 curl -v https://frascati.projectkeep.io/openapi/
*   Trying 18.218.218.93...
* TCP_NODELAY set
* Connected to frascati.projectkeep.io (18.218.218.93) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: CN=frascati.projectkeep.io
*  start date: Jan 27 13:46:16 2020 GMT
*  expire date: Apr 26 13:46:16 2020 GMT
*  subjectAltName: host "frascati.projectkeep.io" matched cert's "frascati.projectkeep.io"
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
*  SSL certificate verify ok.
> GET /openapi/ HTTP/1.1
> Host: frascati.projectkeep.io
> User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
> Accept: */*
> Referer: 
> 
< HTTP/1.1 200 OK
< Server: nginx/1.16.1
< Date: Mon, 27 Jan 2020 18:07:02 GMT
< Content-Type: text/html;charset=UTF-8
< Content-Length: 1394
< Connection: keep-alive
< accept-ranges: bytes
< cache-control: public, max-age=86400
< last-modified: Mon, 27 Jan 2020 16:05:19 GMT
< 
<!-- HTML for static distribution bundle build -->

Was vermisse ich?

Antwort1

In den Kommentaren zur Frage hieß es:

  1. Ihr Anwendungsserver verwendet Java 8 mit JSSE,

  2. Es ist TLSv1.3unter den möglichen TLS-Protokollen konfiguriert.

Das beschriebene Problem wird verursacht durchfehlende Unterstützung für TLSv1.3in Javas Standard-SSLContext-Implementierung. Also:

  • curlschlägt TLSbis Version 1.3 vor
  • der Server akzeptiert es und verschluckt sich dann daran

Anmerkung: Wenn Sie Tomcat verwenden, wird dies von der zugrunde liegenden nativen Bibliothek OpenSSLImplementationunterstützt .TLSv1.3

verwandte Informationen