Warum lauscht Apache auf Port 443 mit http, aber nicht mit https?

Warum lauscht Apache auf Port 443 mit http, aber nicht mit https?

Ich habe einen Apache 2.4 unter Debian und habe zwei VirtualHosts konfiguriert:

  1. Die erste überwacht Port 80, um alle „unsicheren“ Anfragen an meinen sicheren VirtualHost weiterzuleiten.
  2. Der zweite ist der „sichere“ VirtualHost und lauscht auf Port 443.

Hinweis: Ich verwende in meinem Text „example.com“, habe aber eine echte Domain mit SSL :-)

Beim Testen der Verbindung https://example.comerhalte ich eine Fehlermeldung.
"Fehler:1408F10B:SSL-Routinen:ssl3_get_record:falsche Versionsnummer" auf der Clientseite mitLocke/ "ERR_SSL_PROTOCOL_ERROR" mitChrom
"AH00566: Anforderung fehlgeschlagen: fehlerhafte Anforderungszeile" auf der Apache-Serverseite

Wenn ich die Verbindung mit Port 443 teste, https://example.com:443tritt derselbe Fehler auf.

Wenn ich die Verbindung teste http://example.com:443(Protokoll http und Port 443), wird die Standardindexseite von Apache erfolgreich angezeigt. .... Dies ist allerdings nicht meine eigene index.html, wie ich eigentlich erwartet hatte. Aber das ist ein anderes Thema für später.

Da der letzte Test erfolgreich war, gehe ich davon aus, dass kein Problem mit dem SSL-Zertifikat vorliegt, oder?

Apache scheint auf beiden Ports zu lauschen:

> sudo apache2ctl -S
VirtualHost configuration:
*:80                   example.com (/etc/apache2/sites-enabled/example.com.conf:10)
*:433                  example.com (/etc/apache2/sites-enabled/example.com.conf:21)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

> netstat -tupln
(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:443             0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
udp        0      0 0.0.0.0:68              0.0.0.0:*                           -
udp6       0      0 fe80::250:56ff:fe20:546 :::*      

Meine „ports.conf“:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 0.0.0.0:80

<IfModule ssl_module>
        Listen 0.0.0.0:443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 0.0.0.0:443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Meine „example.com.conf“ in sites-enabled:

########
# main config file for my webpage
########

# NameVirtualHost is deprected
#NameVirtualHost *:443

<VirtualHost *:80>
   ServerName example.de
   # this line is masked for superuser.com due to privacy
   ServerAlias XXXXXXX.online-server.cloud www.example.com xxx.xxx.xx.xx
   Redirect permanent / https://example.com
   LogLevel debug
   CustomLog ${APACHE_LOG_DIR}/example-nossl-access.log combined
   ErrorLog ${APACHE_LOG_DIR}/example-nossl-error.log

</VirtualHost>

# Default-Host
<VirtualHost *:433>
    # admin mail given to user when any issues occur
    ServerAdmin [email protected]
    # the domain that routes to DocumentRoot
    ServerName example.com
    # alias which also routes to DocumentRoot
    # this line is masked for superuser.com due to privacy
    ServerAlias www.example.com XXXXXX.online-server.cloud xxx.xxx.xx.xx

    DocumentRoot /var/www/example-homepage
    LogLevel debug
    CustomLog ${APACHE_LOG_DIR}/example-access.log combined
    ErrorLog ${APACHE_LOG_DIR}/example-error.log
    #<IfModule mod_ssl.c>
        SSLEngine on
        SSLCertificateKeyFile /etc/apache2/ssl/_.example.com_private_key.key
        SSLCertificateFile /etc/apache2/ssl/example.com_ssl_certificate.cer
    #</IfModule>
</VirtualHost>

<Directory /var/www/example-homepage>
    # allow .htaccess files in root directory
    AllowOverride All
</Directory>

BearbeitenSSL-Protokolle:

[Fri Feb 07 07:17:37.546729 2020] [ssl:info] [pid 83145:tid 139622694843520] AH01914: Configuring server example.com:443 for SSL protocol
[Fri Feb 07 07:17:37.546735 2020] [ssl:debug] [pid 83145:tid 139622694843520] ssl_engine_init.c(1750): AH10083: Init: (example.com:443) mod_md support is unavailable.
[Fri Feb 07 07:17:37.546943 2020] [ssl:debug] [pid 83145:tid 139622694843520] ssl_engine_init.c(479): AH01893: Configuring TLS extension handling
[Fri Feb 07 07:17:37.547220 2020] [ssl:debug] [pid 83145:tid 139622694843520] ssl_util_ssl.c(476): AH02412: [example.com:443] Cert matches for name 'example.com' [subject: CN=*.example.com / issuer: CN=Encryption Everywhere DV TLS CA - G1,OU=www.digicert.com,O=DigiCert Inc,C=US / serial: 0C9227F96F2A0EFA7B7E6F7391B9EBA0 / notbefore: Dec 26 00:00:00 2019 GMT / notafter: Dec 25 12:00:00 2020 GMT]
[Fri Feb 07 07:17:37.547229 2020] [ssl:info] [pid 83145:tid 139622694843520] AH02568: Certificate and private key example.com:443:0 configured from /etc/apache2/ssl/example.com_ssl_certificate.cer and /etc/apache2/ssl/_.example.com_private_key.key

Bearbeiten 2Ausführliches Protokoll von curl:

* Expire in 0 ms for 6 (transfer 0x55ac2933ef50)
* Expire in 1 ms for 1 (transfer 0x55ac2933ef50)
...
*   Trying xxx.xxx.xx.xx...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55ac2933ef50)
* Connected to example.com (xxx.xxx.xx.xx) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* error:1408F10B:SSL routines:ssl3_get_record:wrong version number
* Closing connection 0
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number

Bitte helfen Sie mir zu verstehen, warum https nichtzugeordnetzu Port 443 und um dieses Problem zu beheben, damit ich mit auf meine Webseite zugreifen kann https://example.com.

Antwort1

Es war ein dummer Tippfehler in meinembeispiel.com.conf. Ich musste Port 4 ändern33bis 443:

...
# Default-Host
<VirtualHost *:433>
...

Zu

...
# Default-Host
<VirtualHost *:443>
...

Jetzt funktioniert es.

Antwort2

In meinem Fall stellte sich heraus, dass es sich um eine falsche Konfiguration handelte. In einer Konfigurationsdatei des virtuellen Hosts gab es beide Abschnitte

<VirtualHost *:80>
...
</VirtualHost>
<VirtualHost *:443>
...
</VirtualHost>

In einer anderen Datei hatte ich nur das <VirtualHost *:443>und diese funktionierte aufgrund der falschen Konfiguration in der anderen Datei nicht. Der Server auf Port 443 sprach überhaupt nicht TLS und antwortete korrekt auf HTTP-Anfragen.
Trotzdem lief der Server und meldete keine Fehler. Es war wirklich schwierig, die Grundursache herauszufinden.

verwandte Informationen