HTTP/2 avec Vert.x

Support d’ALPN

Pour Vert.X 3.3 et 3.4

  • Avec l’extension ALPN de Jetty (en Java 8)

  • Avec OpenSSL

Code

Pour activer HTTP/2, il faut d’abord un serveur HTTP avec TLS, sur lequel on active ALPN.

HttpServerOptions h2Options = new HttpServerOptions()
               .setSsl(true)
               .setKeyStoreOptions(
                       new JksOptions()
                               .setValue(Buffer.buffer(getKeyStore()))
                               .setPassword(KEYSTORE_PASSWORD))
               .setUseAlpn(true);

OpenSSL

Le code ci-dessus produit une erreur si on utilise JSSE, l’implémentation Java de TLS. Par contre, ça fonctionne si on passe en OpenSSL. Et pour ça, il faut ajouter l’extension BoringSSL de Netty.

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-tcnative-boringssl-static</artifactId>
    <version>1.1.33.Fork26</version>
    <scope>runtime</scope>
</dependency>

Remarque : ça fonctionne avec Vert.x 3.4 (donc Netty 4.1) + Netty tcnative 1.1, par contre, ça ne marche pas avec Netty tcnative 2.0.

JSSE

Comme pour Tomcat, HTTP/2 peut fonctionner en JSSE avec Java 8 à condition d’ajouter l’extension ALPN de Jetty au bootclasspath.

java -Xbootclasspath/p:alpn-boot-8.1.11.v20170118.jar ...