Actualice a un sistema operativo compatible

Actualice a un sistema operativo compatible

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 versioninforma 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 http2devuelve 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

información relacionada