Invalid request scheme for Endpoint Expected http Received https

En un servidor de aplicaciones sobre JAVA, existe la posibilidad de definir y personalizar determinadas restricciones de seguridad (security constraints) con el fin de limitar los privilegios y métodos de acceso a determinadas aplicaciones ó URLs.

Una de estas restricciones se basa en la capa de transporte (transport-guarantee), permitiendo especificar los métodos de comunicación permitidos entre el cliente y el servidor de aplicaciones, o más concretamente en este caso, la aplicación. En otras palabras, podemos obligar a que los datos recibidos por parte del cliente estén cifrados (HTTPS).

Así pues, podemos encontrarnos por ejemplo, con el error del título al intentar acceder a una aplicación utilizando HTTPS cuando está preparada para recibir sólo HTTP (o viceversa):

javax.enterprise.system.container.ejb|_ThreadID=694;_ThreadName=TP-Processor662;
_RequestID=11ba432a-13f8-4e8e-a4ea-dd2a41f07e03;|
Invalid request scheme for Endpoint. Expected http . Received https|#]

En este caso, el frontal web (Apache) estaba accediendo a la aplicación a través de un vhost HTTPS, siendo que la app esperaba recibir tráfico HTTP.

La solución es, configurar la aplicación para permitir tráfico HTTPS, que en este caso es el transport-guarantee del tipo CONFIDENTIAL. En el caso de un glassfish, por ejemplo, especificamos esta configuración en el archivo sun-ejb-jar.xml de la aplicación (dentro de META-INF). O en cualquier caso, donde se estén especificando las restricciones de seguridad de JAVA para el webservice:

<sun-ejb-jar>
        <enterprise-beans>
                <ejb>
                        <ejb-name>FOO</ejb-name>                                         
                        <webservice-endpoint>                           
                                <port-component-name>FOO</port-component-name>
                                <transport-guarantee>CONFIDENTIAL</transport-guarantee>
                        </webservice-endpoint>                                  
                </ejb>  
        </enterprise-beans>
</sun-ejb-jar>

Redespliegue de la aplicación, y listo. El error debería desaparecer.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *