Estoy intentando configurar el soporte HTTP/2 pero algo va mal
Mi servidor es una máquina virtual con motor informático de Google que ejecuta la versión del servidor Debian 9.13 (stretch) Apache/2.4.25 con certificados SSL configurados mediante OpenSSL. Cuando lo ejecuto, openssl version
informa la versión 1.1.1g. Al ejecutarlo phpinfo();
informa OpenSSL/1.0.2u
. PHP versión 7.4.11 y phpinfo();
también informa...
SSL_VERSION_INTERFACE -> mod_ssl/2.4.25
SSL_VERSION_LIBRARY -> OpenSSL/1.0.2u
SSL_PROTOCOL -> TLSv1.2
seguí las instruccionesaquípara "Habilitar el módulo HTTP/2 en Apache" y "Habilitar HTTP/2 en su host virtual Apache" y tambiénaquí. Después de hacerlo, cuando ejecuto el comando, apache2ctl -M | grep http2
devuelve http2_module (shared)
qué señales de que la compatibilidad con HTTP/2 está habilitada. Pero no está en producción.
Aquí está la línea utilizada en mi archivo de configuración de hosts virtuales apache2/etc/apache2/sites-available/default-ssl.conf
<VirtualHost _default_:443>
Protocols h2 h2c http/1.1
...
Aquí está la información de conexión detallada cuando se utiliza curl -vso http2_debug.log --http2 https://pharealty.com/
el comando que descarga correctamente la página.
* 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
Parece que funciona perfectamente al principio y luego vuelve a HTTP/1.1.
Por lo que puedo decir, tengo una versión bastante nueva de OpenSSL. Y aunqueesta pagina que mencione anteriormenteRecomiendo encarecidamente una versión de Apache superior a 2.4.25. No he podido actualizar Apache a otra versión que no sea 2.4.25.
¿Necesito configurar un nuevo certificado SSL después de realizar el cambio? ¿Es la versión de Apache la que está causando los problemas?
Probé el sitio en varios sitios web de prueba http/2 y falla siempre.
Respuesta1
Actualice a un sistema operativo compatible
Usaste Debian Stretch, cuyo soporte principal en mi humilde opinión ya es EOL. (Fin de vida útil)
Los parches de seguridad permanecen disponibles hasta2022-06-30.
Cambiar el módulo de manejo de Apache
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
Habilitar módulo SSL y http2
sudo a2enmod ssl
sudo a2enmod http2
Habilite el soporte http2 global o vía vhost
Agregar a Apache2.conf:
Protocols h2 http/1.1
O edite el vhost y agregue Protocolos 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>
Recuerde recargar el servidor Apache.
sudo systemctl restart apache2
Para obtener todas las versiones de PHP, puedes echar un vistazo a mi script bash.
https://raw.githubusercontent.com/djdomi/php-install/master/run.sh
Referencia
Acerca deesta guía