Hola,
Voy a exponer conceptualmente mi problema por si me estoy equivocando es en la base, más que en la propia realización.
Me encuentro desarrollando el acceso desde una app a un servicio web mediante ssl bidireccional, se emplea certificados para cliente y servidor. El servidor de servicio se encuentra en una ip privada, esta ip es la usada para acceder al servicio (No existe DNS), por tanto es la que se ha colocado como CN, nombre común, del certificado del servidor.
Sobre los certificados indicar que se han generado con la herramienta openssl, creando primero un certificado de ca con el que se firman los certificados de cliente y servidor generados posteriormente con la misma herramienta, certificados autofirmados, sobre ellos sólo volver a señalar que el CN del certificado del servidor es su ip.
Con la herramienta keytool de java se crea el almacén de claves importando el certificado del servidor y el del cliente, con la misma herramienta se crea también el almacén de certificados importando el certificado de la CA. Seguidamente se configura JBOSS para que acceda a los almacenes señalados y para que acepte autenticación de cliente mediante certificado.
Por la parte del cliente se ha creado una simple aplicación, un layout con un botón que accede al servicio, con permisos de lectura/escritura en la sd (donde estarán los certificados) e internet. Se ha personalizado el SSLContext para usar nuestra configuración de seguridad y el TrustManager para que acepte únicamente el certificado de nuestro servidor.
En todos los casos se consigue el siguiente error:
java.io.IOException: Hostname ip was not verified
Sobre este error he de decir que no existe virtual hosting en el servidor, jboss no está configurado para ello y las pruebas realizadas con openssl s_client es lo que indican, del mismo modo se verifica que solo existe una cadena subject para el certificado emitido por el servidor.
Comentar también que la única forma que se ha conseguido obtener la respuesta del servicio es mediante un HostNameVerifier que siempre devuelve true. Se ha tratado de personalizar de otro modo el método verify del objeto indicado, pero siempre devuelve false incluso si se usa como parámetros el propio método getPeerHost() de la sesión y la propia session, supongo que será algo diferente lo que compara.
Muchas gracias de antemano, un cordial saludo.