HTTP/2 es el nuevo protocolo para mejorar la experiecia de navegación de la web.
Tendrá menos latencia y más velocidad siendo más eficiente.
Se pubicó oficialmente en 2015 y los principales navegadores como Mozilla Firefox, Google Chrome y Microsoft Edge ya lo soportan.
Desde Wildfly 9.0.0.Beta1 se libero el soporte para HTTP2.
Se requiere una extensión que se llama ALPN (application layer protocol negotiation).
El soporte para ALPN vendrá en Java 9, y no esta presente en JDK7 y JDK8.
Asi que para poder usarlo hay que proveer su soporte en el classpath de arranque de la JVM.
Toda la información sobre el APLN y donde descargar el soporte en :
http://www.eclipse.org/jetty/documentation/current/alpn-chapter.html
Y descargar en :
http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/
Aunque no se obliga en la RFC, los navegadores obligan a que el HTTP2 sea por TLS, asi que necesitaremos un certificado. Para hacer pruebas podemos generarnos uno autofirmado:
$ keytool -genkeypair -alias server -storetype jks -keyalg RSA -keysize 2048 -keypass cambiame -keystore wfly.jks -storepass cambiame -dname "CN=server.neodoo.es,OU=inf,L=Zaragoza,ST=Zaragoza,C=ES" -validity 9999 -v
$ cp wfly.jks $JBOSS_HOME/standalone/configuration/
Nota: Y para producción podemos conseguir uno gratuito en «letsencrypt.org» (es una autoridad certificadora libre, abierta, gratis y reconocida por los principales navegadores)
Hay que añadir el certificado en un almacen de certificados de confianza de Java:
Exportarlo del almacen:
$ keytool -exportcert -keystore wfly.jks
-alias server -storepass cambiame -file server.cer
Importalo en el almacen de confianza:
$ keytool -importcert -keystore v.truststore -alias server -storepass cambiame -file server.cer -noprompt
Configurar el Wildfly
Crear un realm para el SSL que use el certificado que hemos creado:
<security-realm name=»UndertowRealm»>
<server-identities>
<ssl>
<keystore path=»wfly.jks» relative-to=»jboss.server.config.dir» keystore-password=»cambiame» alias=»comet» key-password=»cambiame»/>
</ssl>
</server-identities>
<authentication>
<truststore path=»wfly.truststore » relative-to=»jboss.server.config.dir» keystore-password=»cambiame»/>
</authentication>
</security-realm>
Añadir un conector al Undertow para HTTPS que use ese realm:
<https-listener name=»default-https» enable-http2=»true» security-realm=»UndertowRealm» socket-binding=»https»/>
Ahora sólo falta poder en soporte de APLN en el arranque del Wildfly:-Xbootclasspath/p:$JBOSS_HOME/bin/alpn-boot-8.1.7.v20160121.jarY quedará asi:
JAVA_OPTS=»-Xms1024m -Xmx1024m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=512m -Djava.net.preferIPv4Stack=true -Xbootclasspath/p:$JBOSS_HOME/bin/alpn-boot-8.1.7.v20160121.jar»
Nota: La versión del APLN depende de la version del JDK y de su update.
Nota extra: A mi con la JDK 1.8.0_74 y el APLN alpn-boot-8.1.7.v20160121.jar me falla, he tenido que poner la 1.8.0_72.
Ahora si tenemos algún balanceador o proxy HTTP esto tiene otras restricciones:
HAPROXY: Será soportado por la versión 1.7 que a dia de hoy aun esta en Beta
NGINX: Es soportado por la versión 1.9.5
UNDERTOW: Ya lo soporta
APACHE: Esta soportado a partir de la versión 2.4.17 usando los modulos del mod_ssl y mod_http2
Como saber si una página esta ofrecida en HTTP2. Pues se puede hacer con un plugin. Yo en Firefox uso este:
https://github.com/chengsun/moz-spdy-indicator
0 comentarios