Actualización de seguridad: Publicados los paquetes RPM y DEB de openssl 4.0.2

openssl 4.0.2 ha sido añadido al repositorio de CodeIT. Los paquetes se han compilado para RHEL, CentOS, AlmaLinux, Rocky Linux y Oracle Linux 7, 8, 9 y 10, y para Ubuntu 22.04 y 24.04.

Esta actualización corrige vulnerabilidades de seguridad. Se recomienda actualizar.

Cambios principales:

  • OpenSSL 4.0.2 es un lanzamiento de corrección de seguridad. La CVE más grave corregida en este lanzamiento es Moderate.
  • Este lanzamiento incorpora las siguientes correcciones de errores y mitigaciones:
  • Se corrigió la comprobación de las etiquetas de autenticación para cifrados vacíos en cifradores AEAD en modo CCM.

Vulnerabilidades corregidas:

  • Se corrigió que el servidor QUIC pudiera provocar una doble liberación al procesar el paquete `INITIAL`. (CVE-2026-18798)
  • Se corrigió un desbordamiento de búfer en el montón al desenrollar claves en CMS. (CVE-2026-63072)
  • Se corrigió una desreferencia de puntero no válida en el servidor CMP mediante un `protectionAlg` manipulado. (CVE-2026-63076)
  • Se corrigió el crecimiento de memoria sin límite en la cola de canales entrantes del servidor QUIC. (CVE-2026-14456)
  • Se corrigió que el servidor RPK pudiera, al seleccionar el algoritmo de firma, desreferenciar un certificado que no existe. (CVE-2026-14457)
  • Se corrigió el uso excesivo de memoria al almacenar en búfer registros DTLS para una época futura. (CVE-2026-54874)
  • Se corrigió una fuga de memoria del lado del cliente al comprobar respuestas de OCSP. (CVE-2026-54876)
  • Se corrigió que un Sender DN no fiable se usara como cadena de formato en la validación de la respuesta CMP. (CVE-2026-63073)
  • Se corrigió el crecimiento indefinido de la caché en CMP de `extraCerts`. (CVE-2026-63074)
  • Se corrigió que la retención de paquetes que solo contienen ACK en QUIC pudiera causar agotamiento de memoria. (CVE-2026-63075)
  • Se corrigió la posibilidad de falsificaciones AEAD con texto cifrado vacío al usar `EVP_Cipher()`. (CVE-2026-75803)

Las bibliotecas con soporte para QUIC siguen distribuyéndose como un paquete separado, no conflictivo, openssl-quic-libs, con su propio sufijo .so.81.4, para evitar conflictos con el .so.X oficial.

Publicados los paquetes RPM y DEB de NGINX 1.31.4 Mainline con HTTP/3, Brotli, TLS 1.3 y OpenSSL 4.0.1 para EL7/EL8/EL9/EL10, Ubuntu 22.04/24.04

nginx 1.31.4 Mainline con soporte para HTTP/3 ha sido añadido al repositorio de CodeIT. http2 y ngx_cache_purge están integrados, y OpenSSL está enlazado dinámicamente con el OpenSSL oficial 4.0.1 con soporte para QUIC. El módulo de compresión Brotli de Google y ngx_http_geoip2 se distribuyen como módulos dinámicos, en nginx-module-brotli y nginx-module-geoip2, que el paquete rpm de nginx instala automáticamente (la dependencia se mantiene para que las instalaciones existentes se actualicen sin perder esas directivas; se eliminará en unos meses y ambos módulos pasarán a ser realmente opcionales). Los paquetes se han compilado para RHEL, CentOS, AlmaLinux, Rocky Linux y Oracle Linux 7, 8, 9 y 10, y para Ubuntu 22.04 y 24.04.

Los demás módulos dinámicos se empaquetan por separado y son opcionales: nginx-module-lua con lua-resty-core y lua-resty-lrucache, nginx-module-acme para certificados ACMEv2 automáticos, nginx-module-njs, nginx-module-perl, nginx-module-xslt y nginx-module-image-filter. Cada uno incluye su propia línea load_module en /etc/nginx/modules-enabled, así que funciona en cuanto se instala y no hay que editar nginx.conf a mano. Lua y ACME se compilan para EL9, EL10 y Ubuntu; EL7 dispone de nginx-module-geoip en su lugar, y njs, Perl, XSLT e image-filter solo están disponibles en rpm.

La misma versión está en Docker Hub como codeitus/nginx: la imagen se construye sobre AlmaLinux 9 a partir de estos mismos paquetes y se publica para amd64 y arm64:

  • la imagen más reciente, del pool que se haya publicado último: docker pull codeitus/nginx
  • la imagen Mainline más reciente: docker pull codeitus/nginx:mainline
  • esta versión exacta: docker pull codeitus/nginx:1.31.4

Para HTTP/3 hay que publicar también el puerto UDP, no solo los TCP: docker run -d -p 80:80 -p 443:443 -p 443:443/udp codeitus/nginx

Cambios principales:

  • Feature: la directiva “proxy_protocol” en los módulos stream y mail ahora admite la versión 2 del protocolo PROXY.
  • Change: ahora las solicitudes HTTP/2 y gRPC a los backends siempre se envían con el pseudocabecero “:authority” y las solicitudes HTTP/1.1, con la cabecera “Host”.
  • Bugfix: podría producirse un fallo de segmentación en un proceso trabajador si se usaba el método “select”.
  • Bugfix: ahora las respuestas incompletas de gRPC con una línea de cabecera “Content-Length” distinto de cero se tratan como malformadas.
  • Bugfix: corrección en compatibilidad binaria con módulos de terceros que usan códigos de scripts; el fallo apareció en la versión 1.31.3.
  • Bugfix: en el módulo ngx_http_perl_module.
  • Bugfixes en HTTP/2, HTTP/3, ngx_http_image_filter_module y ngx_http_grpc_module.

Actualización de seguridad: Publicados los paquetes RPM y DEB de apr-util 1.6.5

apr-util 1.6.5 ha sido añadido al repositorio de CodeIT. Los paquetes se han compilado para RHEL, CentOS, AlmaLinux, Rocky Linux y Oracle Linux 7, 8, 9 y 10, y para Ubuntu 22.04 y 24.04.

Esta actualización corrige vulnerabilidades de seguridad. Se recomienda actualizar.

Cambios principales:

  • Se corrigieron errores de compilación de oracle DBD introducidos en 1.6.4. PR 70170.
  • apr_brigade: no se divide la última LF en apr_brigade_split_line para evitar generar un bucket vacío. PR 64273
  • apr_brigade: los buckets de metadatos ahora se ignoran en apr_brigade_split_line, apr_brigade_flatten y apr_brigade_to_iovec, corrigiendo un comportamiento indefinido posible. PR 68278
  • apr_crypto_openssl: compatibilidad con OpenSSL 3.
  • apr_crypto_openssl: se usa OPENSSL_init_crypto() para inicializar OpenSSL en versiones 1.1+.
  • apr_memcache: se corrigió la búsqueda del nombre para permitir tanto IPv6 como IPv4.
  • configure: se corrigió la detección de Berkeley DB con compiladores que imponen el cumplimiento estricto de C99. PR 66396.

Vulnerabilidades corregidas:

  • SECURITY: CVE-2026-34502: desbordamiento de búfer en el montón en el cliente memcached de APR: vulnerabilidad de desbordamiento de búfer basada en el montón en el cliente memcached de Apache Portable Runtime Utility. Este problema afecta a Apache Portable Runtime Utility: de 1.3.0 a 1.6.3.
  • SECURITY: CVE-2026-34501: Apache Portable Runtime Utility: desbordamiento de búfer en el montón en el cliente redis de APR: vulnerabilidad de desbordamiento de búfer basada en el montón en el cliente redis de Apache Portable Runtime Utility. Este problema afecta a Apache Portable Runtime Utility: de 1.6.0 a 1.6.3. Se recomienda a los usuarios actualizar a la versión 1.6.4, que corrige el problema.
  • SECURITY: CVE-2026-34191: Apache Portable Runtime Utility: SQL Injection en apr_dbd_oracle: neutralización inadecuada de elementos especiales utilizados en un comando SQL (“SQL Injection”) en una vulnerabilidad de Apache Portable Runtime Utility a través del proveedor apr_dbd_oracle. Este problema afecta a Apache Portable Runtime Utility: de 1.6.0 a 1.6.3. Se recomienda a los usuarios actualizar a la versión 1.6.4, que corrige el problema.
  • SECURITY: CVE-2026-32327: Apache Portable Runtime Utility: bloqueo por recursión en la pila XML de apr-util: un error en la versión 1.6.3 de APR-util (y anteriores) permite un ataque de recursión en la pila contra cualquier consumidor de bibliotecas que analiza XML de fuentes no confiables y que usa la función apr_xml_quote_elem(). Se recomienda a los usuarios actualizar a la versión 1.6.4, que corrige el problema.
  • SECURITY: CVE-2025-49506: apr_password_validate() es vulnerable a ataques de temporización APR-util versiones 1.6.3 (y anteriores) la función apr_password_validate() no era de tiempo constante en cuanto a las comparaciones de hashes o contraseñas, lo que potencialmente podía filtrar su contenido mediante un canal lateral de temporización de ataques, especialmente en plataformas sin crypt() como Windows, BeOS, NetWare o Android. Se recomienda a los usuarios actualizar a la versión 1.6.4, que corrige el problema.

Publicados los paquetes RPM y DEB de sshoq 0.5.0

sshoq 0.5.0 ha sido añadido al repositorio de CodeIT. Los paquetes se han compilado para RHEL, CentOS, AlmaLinux, Rocky Linux y Oracle Linux 8, 9 y 10, y para Ubuntu 22.04 y 24.04.

Cambios principales:

  • Citas y escape de rutas con estilo OpenSSH en el cliente SFTP
  • feat: muestra el progreso de la transferencia (porcentaje y velocidad) para las operaciones de sftp/scp
  • feat: se ha añadido la posibilidad de cancelar transferencias de sftp/scp con Ctrl+C
  • feat: añadidos los accesos directos cd con estilo OpenSSH en el cliente SFTP
  • feat: añadida la compatibilidad con comodines para los archivos de origen de put/get en el cliente SFTP
  • perf: canalización de transferencias SFTP para eliminar el cuello de botella de ida y vuelta por bloque
  • fix: se incluye la ruta del archivo en todos los mensajes de error del cliente/servidor de sftp
  • sftp: por defecto se siguen los enlaces simbólicos en el cliente, se agrega la opción -no-follow-symlinks
  • perf: se sustituye el protocolo JSON de SFTP por un formato binario compacto
  • Aumenta la ventana de transferencia
  • sftp: continúo get -r después de archivos con error permission-denied

sshoq 0.4.0 rpms released

sshoq 0.4.0 rpms released and added to all supported platforms.

Major changes since 0.3.0:

– fix(auth): return error on key load failure instead of panicking on nil key – fix: print error to stderr when sshoq-server fails to start – Feature/default ssh keys from dot ssh – wildcard for get -r – SFTP client: Add readline-style arrow keys support – feat: add -scp mode for non-interactive file transfer – feat: support multiple simultaneous local and remote port forwardings – fix: correct the port forwarding syntax error message – feat: add tab completion for file paths in the SFTP client – sftp client: add wildcard/glob support to ls – sftp client: add wildcard/glob support to get – fix: reassemble chunked SFTP messages across channel data messages – fix: linux-arm64 release build and drop windows client-only pipeline

sshoq 0.3.0 rpms released

sshoq 0.3.0 rpms released and added to all supported platforms.

Major changes:

– SFTP is enabled on the server by default, but can be disabled with `sshoq-server -disable-sftp` On the client, do `sshoq -sftp user@host` to enter sftp shell. Normal commands like `ls`, `cd`, `put`, `get` etc. are supported including recursive mode (e.g. `get -r path`). Tab completion and wildcards are not implemented yet for SFTP so exact paths must be used. – fix: two small problem by @nameearly – Add sftp support by @h4sh5 – Harden SFTP server with user-scoped permission checks and fd-relative no-follow filesystem ops by @h4sh5 with @Copilot – Reject disabled SFTP channels with SSH channel-open failure by @h4sh5 with @Copilot – Add recursive directory transfers to SFTP mode by @h4sh5 with @Copilot – Harden SFTP stat: enforce ancestor-execute permissions via Fstatat by @h4sh5 with @Copilot – SFTP handler: drop privileges to the logged-in user by @h4sh5 with @Copilot in – add ownership details (user and group) to sftp ls command by @h4sh5 – allow running integration tests locally by @h4sh5 – @nameearly made their first contribution – @h4sh5 with @Copilot made their first contribution

mod_http3 0.0.54 for Apache httpd 2.4.68 is available for testing

Experimental mod_http3 0.0.54 packages are now available in the CodeIT testing repository for EL7, EL8, EL9 and EL10.

The module requires our patched httpd 2.4.68-2 package, which includes MPM changes required for externally managed QUIC connections.

HTTP/3 support remains experimental. Use these packages on testing systems before considering production deployment.

Changes

– applies the core LimitRequestFields and LimitRequestFieldSize to HTTP/3 requests, which nothing did before, and advertises the bound as SETTINGS_MAX_FIELD_SECTION_SIZE instead of nghttp3’s (1<<62)-1 – bounds a response that makes no progress (H3StreamTimeout) so a client that stops reading cannot hold a worker thread, and closes a connection past H3MaxStreamErrors – advertises a QPACK dynamic table (H3QpackTableCapacity, H3QpackBlockedStreams); it was disabled, so HTTP/3 compressed request headers worse than HTTP/2 on the same server – exposes the request worker pool (H3MinWorkers, H3MaxWorkers, H3MaxWorkerIdleSeconds), previously hardcoded at 16/64 – resolves mod_logio once instead of once per request

Installation

For EL8, EL9 and EL10:

dnf module reset -y httpd
dnf module enable -y httpd:codeit
dnf config-manager --setopt=CodeIT-testing.module_hotfixes=1 --save

dnf --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

For EL7:

yum --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

Verify the installed versions:

rpm -q httpd mod_http3

Expected versions:

httpd-2.4.68-2...
mod_http3-0.0.54-1...

Configuration

Default example configuration file is /etc/httpd/vhosts.d/http3-vhost.conf (installed together with the package):

EnableMMAP Off

# Keep the existing Listen directive.
# Do not duplicate it if another configuration file already contains it:
# Listen 443 https

<VirtualHost *:443>
    ServerName example.com

    SSLEngine on
    SSLCertificateFile    /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

    Protocols h3 h2 http/1.1

    H3Port 443
    H3QuicEngine openssl
    H3CertificatePath    /etc/pki/tls/certs/localhost.crt
    H3CertificateKeyPath /etc/pki/tls/private/localhost.key

    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Require all granted
    </Directory>
</VirtualHost>

Check the configuration and restart Apache:

httpd -t
httpd -M | grep -E 'http3|http2|ssl'
systemctl restart httpd

Firewall

HTTP/3 uses QUIC over UDP. Both TCP and UDP port 443 must be open:

firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=443/udp
firewall-cmd --reload

Check the listeners:

ss -lntup | grep ':443'

Testing HTTP/3

The CodeIT ngtcp2 package includes the osslclient QUIC test client. To test the local Apache instance while sending example.com as the target hostname, run:

dnf install ngtcp2
osslclient 127.0.0.1 443 https://example.com

This connects directly to UDP port 443 on localhost and performs an HTTP/3 request using example.com for TLS and HTTP hostname handling.

You can also use a curl build that lists HTTP3 in curl -V:

curl --http3-only -vkI https://example.com/

A successful response should contain:

HTTP/3 200

You can also test graceful restart behavior while an HTTP/3 connection is active:

apachectl graceful
journalctl -u httpd -f

The first browser request may use HTTP/2 while the browser discovers HTTP/3 through Alt-Svc. Reload the page and check the Protocol column in browser Developer Tools for h3.

Please report successful installations, crashes, compatibility issues and graceful-restart problems through comments.

mod_http3 0.0.53 for Apache httpd 2.4.68 is available for testing

Experimental mod_http3 0.0.53 packages are now available in the CodeIT testing repository for EL7, EL8, EL9 and EL10.

The module requires our patched httpd 2.4.68-2 package, which includes MPM changes required for externally managed QUIC connections.

HTTP/3 support remains experimental. Use these packages on testing systems before considering production deployment.

Changes

*) Rejected malformed HTTP/3 requests (missing or duplicate pseudo-header fields, connection-specific fields, content-length mismatch) with a stream error of type H3_MESSAGE_ERROR per RFC 9114 4.1.2. Previously one malformed request closed the whole QUIC connection, ending every other request in flight on it.
[Alexander Gerasimov]

*) Added support for building against httpd 2.4.52+. Without response buckets the module removes the core HTTP_HEADER filter from its requests and snapshots status and headers itself, mirroring mod_http2’s !AP_HAS_RESPONSE_BUCKETS path.
[Alexander Gerasimov]

*) Made the MPM connection-count notifications optional. Stock 2.4.x MPMs do not provide them; the module then runs in a degraded mode where a graceful child stop does not wait for active QUIC connections to drain. The patch in .patches/httpd-2.4.66-pr699.patch adds the notifications to httpd 2.4.x.
[Alexander Gerasimov]

*) Enforced H3IdleTimeout in the module’s own event loop. The QUIC stacks keep an otherwise idle connection alive by themselves — OpenSSL sends a keepalive PING at half the idle interval to hold NAT state open — which resets both endpoints’ idle timers, so the transport timeout never fired and a finished connection held its session pool and its H3MaxConnections slot until the client went away.
[Alexander Gerasimov]

*) Read queued datagrams in one batch with recvmmsg() where the platform has
it, and read the socket’s local address once per event-loop pass instead
of once per datagram, halving the syscalls the ngtcp2 engine spends on a
busy socket. The OpenSSL engine already batches inside its own datagram
BIO. Also dropped a per-pass walk of the connection list whose result was
never used.
[Alexander Gerasimov]

*) Added H3SocketBufferSize, which asks for the QUIC socket send and receive buffer size. A receive buffer left at the OS default overflows once a single connection runs at speed, and each dropped datagram costs a retransmit; the OS still caps what it grants, and a capped grant is logged rather than fatal.
[Alexander Gerasimov]

*) Added H3SessionTickets, which controls whether TLS 1.3 session tickets are issued so a returning client can resume instead of running a full handshake. Tickets stay on by default, as before, and each worker process keeps its own ticket keys, so a client resumes only when it returns to the process that issued its ticket.
[Alexander Gerasimov]

*) Added H3EarlyData, off by default, together with an engine capability bit saying whether 0-RTT can be accepted at all. The OpenSSL QUIC stack has no server-side 0-RTT, so turning early data on there now logs a warning that names the engine instead of silently doing nothing.
[Alexander Gerasimov]

*) Published the mod_ssl TLS environment for HTTP/3 requests: SSL_PROTOCOL, SSL_CIPHER, SSL_CIPHER_USEKEYSIZE, SSL_CIPHER_ALGKEYSIZE, SSL_CIPHER_EXPORT and SSL_SESSION_RESUMED, under the names mod_ssl uses. mod_ssl does not manage these connections, so scripts and rewrite conditions that read them saw nothing but HTTPS=on over HTTP/3. The values are read from the QUIC engine through a new conn.tls_info entry and formatted once per connection, not per request.
[Alexander Gerasimov]

Installation

For EL8, EL9 and EL10:

dnf module reset -y httpd
dnf module enable -y httpd:codeit
dnf config-manager --setopt=CodeIT-testing.module_hotfixes=1 --save

dnf --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

For EL7:

yum --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

Verify the installed versions:

rpm -q httpd mod_http3

Expected versions:

httpd-2.4.68-2...
mod_http3-0.0.53-1...

Configuration

Default example configuration file is /etc/httpd/vhosts.d/http3-vhost.conf (installed together with the package):

EnableMMAP Off

# Keep the existing Listen directive.
# Do not duplicate it if another configuration file already contains it:
# Listen 443 https

<VirtualHost *:443>
    ServerName example.com

    SSLEngine on
    SSLCertificateFile    /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

    Protocols h3 h2 http/1.1

    H3Port 443
    H3QuicEngine openssl
    H3CertificatePath    /etc/pki/tls/certs/localhost.crt
    H3CertificateKeyPath /etc/pki/tls/private/localhost.key

    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Require all granted
    </Directory>
</VirtualHost>

Check the configuration and restart Apache:

httpd -t
httpd -M | grep -E 'http3|http2|ssl'
systemctl restart httpd

Firewall

HTTP/3 uses QUIC over UDP. Both TCP and UDP port 443 must be open:

firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=443/udp
firewall-cmd --reload

Check the listeners:

ss -lntup | grep ':443'

Testing HTTP/3

The CodeIT ngtcp2 package includes the osslclient QUIC test client. To test the local Apache instance while sending example.com as the target hostname, run:

dnf install ngtcp2
osslclient 127.0.0.1 443 https://example.com

This connects directly to UDP port 443 on localhost and performs an HTTP/3 request using example.com for TLS and HTTP hostname handling.

You can also use a curl build that lists HTTP3 in curl -V:

curl --http3-only -vkI https://example.com/

A successful response should contain:

HTTP/3 200

You can also test graceful restart behavior while an HTTP/3 connection is active:

apachectl graceful
journalctl -u httpd -f

The first browser request may use HTTP/2 while the browser discovers HTTP/3 through Alt-Svc. Reload the page and check the Protocol column in browser Developer Tools for h3.

Please report successful installations, crashes, compatibility issues and graceful-restart problems through comments.

mod_http3 0.0.52 for Apache httpd 2.4.68 is available for testing

Experimental mod_http3 0.0.52 packages are now available in the CodeIT testing repository for EL7, EL8, EL9 and EL10.

The module requires our patched httpd 2.4.68-2 package, which includes MPM changes required for externally managed QUIC connections.

HTTP/3 support remains experimental. Use these packages on testing systems before considering production deployment.

Installation

For EL8, EL9 and EL10:

dnf module reset -y httpd
dnf module enable -y httpd:codeit
dnf config-manager --setopt=CodeIT-testing.module_hotfixes=1 --save

dnf --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

For EL7:

yum --enablerepo=CodeIT-testing install -y \
    httpd mod_ssl mod_http2 mod_http3

Verify the installed versions:

rpm -q httpd mod_http3

Expected versions:

httpd-2.4.68-2...
mod_http3-0.0.52-1...

Configuration

Default example configuration file is /etc/httpd/vhosts.d/http3-vhost.conf (installed together with the package):

EnableMMAP Off

# Keep the existing Listen directive.
# Do not duplicate it if another configuration file already contains it:
# Listen 443 https

<VirtualHost *:443>
    ServerName example.com

    SSLEngine on
    SSLCertificateFile    /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

    Protocols h3 h2 http/1.1

    H3Port 443
    H3QuicEngine openssl
    H3CertificatePath    /etc/pki/tls/certs/localhost.crt
    H3CertificateKeyPath /etc/pki/tls/private/localhost.key

    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Require all granted
    </Directory>
</VirtualHost>

Check the configuration and restart Apache:

httpd -t
httpd -M | grep -E 'http3|http2|ssl'
systemctl restart httpd

Firewall

HTTP/3 uses QUIC over UDP. Both TCP and UDP port 443 must be open:

firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=443/udp
firewall-cmd --reload

Check the listeners:

ss -lntup | grep ':443'

Testing HTTP/3

The CodeIT ngtcp2 package includes the osslclient QUIC test client. To test the local Apache instance while sending example.com as the target hostname, run:

dnf install ngtcp2
osslclient 127.0.0.1 443 https://example.com

This connects directly to UDP port 443 on localhost and performs an HTTP/3 request using example.com for TLS and HTTP hostname handling.

You can also use a curl build that lists HTTP3 in curl -V:

curl --http3-only -vkI https://example.com/

A successful response should contain:

HTTP/3 200

You can also test graceful restart behavior while an HTTP/3 connection is active:

apachectl graceful
journalctl -u httpd -f

The first browser request may use HTTP/2 while the browser discovers HTTP/3 through Alt-Svc. Reload the page and check the Protocol column in browser Developer Tools for h3.

Please report successful installations, crashes, compatibility issues and graceful-restart problems through comments.