BLOG | NGINX

Suporte QUIC+HTTP/3 para OpenSSL com NGINX

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Prabhat Dixit
Prabhat Dixit
Publicado em 13 de setembro de 2023

Os desenvolvedores geralmente querem criar aplicativos e infraestrutura usando bibliotecas lançadas, oficiais e suportadas. Mesmo com HTTP/3, há uma forte necessidade de uma biblioteca conveniente que suporte QUIC e não aumente os custos de manutenção ou a complexidade operacional na infraestrutura de produção.

Para muitos usuários do QUIC+HTTP/3 , a biblioteca criptográfica padrão é o OpenSSL . Instalado por padrão na maioria dos sistemas operacionais baseados em Linux, o OpenSSL é a biblioteca número um de Segurança da Camada de Transporte (TLS) e é usado pela maioria dos aplicativos de rede.

O problema: Incompatibilidade entre OpenSSL e QUIC+HTTP/3

Mesmo com uso tão amplo, o OpenSSL não fornece a API TLS necessária para suporte QUIC. Em vez disso, o Comitê de Gestão do OpenSSL decidiu implementar uma pilha QUIC completa por conta própria. Esse esforço é um esforço considerável planejado para o OpenSSL v3.4, mas, de acordo com o roteiro do OpenSSL , isso provavelmente não acontecerá antes do final de 2024. Além disso, o Produto Mínimo Viável inicial da implementação do OpenSSL não conterá a implementação da API QUIC, portanto não há um caminho claro para os usuários obterem suporte a HTTP/3 com o OpenSSL.

Opções para suporte QUIC TLS

Nessa situação, há duas opções para usuários que buscam suporte QUIC TLS para suas necessidades HTTP/3:

  • Implementação do QUIC do OpenSSL – Conforme mencionado acima, o OpenSSL está atualmente trabalhando na implementação de uma pilha QUIC completa por conta própria. Este desenvolvimento encapsulará todas as funcionalidades do QUIC dentro da implementação, tornando muito mais fácil para usuários do HTTP/3 usarem a API OpenSSL TLS sem se preocupar com a funcionalidade específica do QUIC.
  • Bibliotecas que dão suporte à BoringSSL QUIC API – Várias bibliotecas SSL como BoringSSL , quicTLS e LibreSSL (todas que começaram como forks do OpenSSL) agora fornecem funcionalidade QUIC TLS implementando a BoringSSL QUIC API. No entanto, essas bibliotecas não são tão amplamente adotadas quanto o OpenSSL. Essa opção também requer a criação da biblioteca SSL a partir da fonte e sua instalação em todos os servidores que precisam de suporte QUIC+HTTP/3, o que pode não ser uma opção viável para todos. Dito isso, esta é atualmente a única opção para usuários que desejam usar HTTP/3 porque a implementação do OpenSSL QUIC TLS ainda não está pronta.

Uma nova solução: A Camada de Compatibilidade OpenSSL

Na NGINX, nos sentimos inspirados por esses desafios e criamos a Camada de Compatibilidade OpenSSL para simplificar implantações QUIC+HTTP/3 que usam OpenSSL e ajudar a evitar complexidades associadas à manutenção de uma biblioteca SSL separada em ambientes de produção.

Disponível com o NGINX Open Source mainline desde a versão 1.25.0 e o NGINX Plus R30 , a Camada de Compatibilidade OpenSSL permite que o NGINX execute QUIC+HTTP/3 sobre o OpenSSL sem precisar aplicar patches ou reconstruí-lo. Isso elimina a dependência de compilação e implantação de bibliotecas TLS de terceiros para obter suporte QUIC. Como os usuários não precisam usar bibliotecas de terceiros, isso também alivia a dependência de cronogramas e roteiros dessas bibliotecas, tornando-a uma solução comparativamente mais fácil de implantar em produção.

Como funciona a camada de compatibilidade OpenSSL

A Camada de Compatibilidade OpenSSL implementa estas etapas:

  • Converte um handshake QUIC em um handshake TLS 1.3 suportado pelo OpenSSL.
  • Passa as mensagens de handshake TLS para dentro e para fora do OpenSSL.
  • Obtém as chaves de criptografia para níveis de criptografia de handshake e aplicativo do OpenSSL.
  • Passa os parâmetros de transporte QUIC para dentro e para fora do OpenSSL.

Com base na quantidade de adoção do OpenSSL hoje e sabendo de seu status com suporte oficial QUIC+HTTP/3, acreditamos que uma opção fácil e escalável para habilitar o QUIC é um passo na direção certa. Também promoverá a adoção do HTTP/3 e permitirá feedback valioso. Mais importante ainda, confiamos que a Camada de Compatibilidade OpenSSL nos ajudará a fornecer uma solução mais robusta e escalável para nossos usuários corporativos e para toda a comunidade NGINX.

Observação : Enquanto garantimos que os usuários do NGINX tenham uma opção fácil e escalável com a disponibilidade da Camada de Compatibilidade OpenSSL, os usuários ainda têm opções para usar bibliotecas de terceiros como BoringSSL, quicTLS ou LibreSSL com o NGINX. Para decidir qual é o caminho certo para você, considere qual abordagem atende melhor às suas necessidades e o quão confortável você está compilando e gerenciando bibliotecas como dependências.

Uma nota sobre 0-RTT

0-RTT é um recurso do QUIC que permite que um cliente envie dados do aplicativo antes que o handshake TLS seja concluído. A funcionalidade 0-RTT é possível pela reutilização de parâmetros negociados de uma conexão anterior. Ele é habilitado quando o cliente lembra parâmetros críticos e fornece ao servidor um tíquete de sessão TLS que permite que o servidor recupere as mesmas informações.

Embora esse recurso seja uma parte importante do QUIC, ele ainda não é suportado na Camada de Compatibilidade OpenSSL. Se você tiver casos de uso específicos que precisam de 0-RTT, agradecemos seu feedback para informar nosso roteiro.

Saiba mais sobre NGINX com QUIC+HTTP/3 e OpenSSL

Você pode começar a usar a Camada de Compatibilidade OpenSSL do NGINX hoje mesmo com o NGINX Open Source ou iniciando uma avaliação gratuita de 30 dias do NGINX Plus . Esperamos que você ache isso útil e agradecemos seu feedback.

Mais informações sobre NGINX com QUIC+HTTP/3 e OpenSSL estão disponíveis nos recursos abaixo.


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."