Ich versuche, die HTTP/2-Unterstützung zu konfigurieren, aber etwas läuft schief
Mein Server ist eine Google Compute Engine-VM, auf der Debian 9.13 (Stretch) Serverversion Apache/2.4.25 mit SSL-Zertifikaten läuft, die mit OpenSSL konfiguriert sind. Wenn ich openssl version
es ausführe, meldet es Version 1.1.1g. Wenn ich phpinfo();
es ausführe OpenSSL/1.0.2u
, meldet es PHP-Version 7.4.11 und phpinfo();
meldet auch...
SSL_VERSION_INTERFACE -> mod_ssl/2.4.25
SSL_VERSION_LIBRARY -> OpenSSL/1.0.2u
SSL_PROTOCOL -> TLSv1.2
Ich habe die Anweisungen befolgtHierzu "HTTP/2-Modul in Apache aktivieren" und "HTTP/2 in Ihrem virtuellen Apache-Host aktivieren" und auchHier. Wenn ich das mache, wird beim Ausführen des Befehls ein Signal apache2ctl -M | grep http2
zurückgegeben http2_module (shared)
, dass die HTTP/2-Unterstützung aktiviert ist. Aber es ist nicht in der Produktion.
Hier ist die Zeile, die in meiner Konfigurationsdatei für virtuelle Hosts von Apache2 verwendet wird/etc/apache2/sites-available/default-ssl.conf
<VirtualHost _default_:443>
Protocols h2 h2c http/1.1
...
Hier sind die ausführlichen Verbindungsinformationen bei Verwendung curl -vso http2_debug.log --http2 https://pharealty.com/
eines Befehls, mit dem die Seite erfolgreich heruntergeladen wird.
* Trying 35.236.101.224...
* TCP_NODELAY set
* Connected to pharealty.com (35.236.101.224) 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/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [109 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [4036 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 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=pharealty.com
* start date: Jul 10 01:53:04 2021 GMT
* expire date: Oct 8 01:53:03 2021 GMT
* subjectAltName: host "pharealty.com" matched cert's "pharealty.com"
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify ok.
} [5 bytes data]
> GET / HTTP/1.1
> Host: pharealty.com
> User-Agent: curl/7.52.1
> Accept: */*
>
{ [5 bytes data]
< HTTP/1.1 200 OK
< Date: Wed, 08 Sep 2021 17:20:21 GMT
< Server: Apache
< Upgrade: h2,h2c
< Connection: Upgrade
< Set-Cookie: PHPSESSID=1mv9jqka4n7c7fb6qmtavfsgue; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate
< Pragma: no-cache
< X-Pingback: https://pharealty.com/xmlrpc.php
< Link: <https://pharealty.com/wp-json/>; rel="https://api.w.org/"
< Link: <https://pharealty.com/wp-json/wp/v2/pages/48>; rel="alternate"; type="application/json"
< Link: <https://pharealty.com/>; rel=shortlink
< Set-Cookie: phaLandingPage=%2F; expires=Tue, 08-Mar-2022 17:20:21 GMT; Max-Age=15638400; path=/
< Vary: Accept-Encoding
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
<
{ [7 bytes data]
* Curl_http_done: called premature == 0
* Connection #0 to host pharealty.com left intact
Es sieht so aus, als ob es zunächst perfekt funktioniert und später auf HTTP/1.1 zurückgesetzt wird.
Soweit ich weiß, habe ich eine ausreichend neue Version von OpenSSL. Und obwohldiese Seite, die ich zuvor erwähnt habeempfiehlt dringend eine höhere Apache-Version als 2.4.25. Ich konnte Apache nicht auf eine andere Version als 2.4.25 aktualisieren.
Muss ich nach der Umstellung ein neues SSL-Zertifikat einrichten? Sind die Probleme auf die Apache-Version zurückzuführen?
Ich habe die Site auf mehreren http/2-Testwebsites getestet und sie schlägt jedes Mal fehl.
Antwort1
Upgrade auf ein unterstütztes Betriebssystem
Du hast Debian Stretch verwendet, dessen Hauptsupport meiner Meinung nach bereits EOL (End of Life) ist.
Die Sicherheitspatches bleiben verfügbar bis30.06.2022.
Ändern des Apache-Handling-Moduls
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
SSL- und HTTP2-Modul aktivieren
sudo a2enmod ssl
sudo a2enmod http2
Aktivieren Sie die HTTP2-Unterstützung global oder über den virtuellen Host.
Zu Apache2.conf hinzufügen:
Protocols h2 http/1.1
Oder bearbeiten Sie den vhost und fügen Sie hinzu Protokolle h2 http/1.1
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/public_html/example.com
SSLEngine on
SSLCertificateKeyFile /path/to/private.pem
SSLCertificateFile /path/to/cert.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
Protocols h2 http/1.1 #add this here
</VirtualHost>
Denken Sie daran, den Apache-Server neu zu laden.
sudo systemctl restart apache2
um alle PHP-Versionen abzurufen, können Sie einen Blick in mein Bash-Skript werfen
https://raw.githubusercontent.com/djdomi/php-install/master/run.sh
Referenz
Hinsichtlichdieser Leitfaden