¿Cómo corregir el error “java.security.cert.CertificateException: No hay nombres alternativos del sujeto presentes”?
Tengo un cliente de servicio web Java, que consume un servicio web a través de HTTPS.
import javax.xml.ws.Service;
@WebServiceClient(name = "ISomeService", targetNamespace = "http://tempuri.org/", wsdlLocation = "...")
public class ISomeService
extends Service
{
public ISomeService() {
super(__getWsdlLocation(), ISOMESERVICE_QNAME);
}
Cuando me conecto a la URL del servicio (https://AAA.BBB.CCC.DDD:9443/ISomeService
), Me sale la excepciónjava.security.cert.CertificateException: No subject alternative names present
.
Para arreglarlo, primero corriopenssl s_client -showcerts -connect AAA.BBB.CCC.DDD:9443 > certs.txt
y obtuve el siguiente contenido en el archivocerts.txt
:
CONNECTED(00000003)
---
Certificate chain
0 s:/CN=someSubdomain.someorganisation.com
i:/CN=someSubdomain.someorganisation.com
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=someSubdomain.someorganisation.com
issuer=/CN=someSubdomain.someorganisation.com
---
No client certificate CA names sent
---
SSL handshake has read 489 bytes and written 236 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 512 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : RC4-MD5
Session-ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Session-ID-ctx:
Master-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Key-Arg : None
Start Time: 1382521838
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
AFAIK, ahora necesito
extraer la parte decerts.txt
Entre-----BEGIN CERTIFICATE-----
y-----END CERTIFICATE-----
,modificarlo para que el nombre del certificado sea igual aAAA.BBB.CCC.DDD
yluego importar el resultado usandokeytool -importcert -file fileWithModifiedCertificate
(dóndefileWithModifiedCertificate
Es el resultado de las operaciones 1 y 2).¿Es esto correcto?
Si es así, ¿cómo puedo hacer exactamente que el certificado del paso 1 funcione con una dirección basada en IP (AAA.BBB.CCC.DDD
)?
Actualización 1 (23.10.2013 15:37 MSK): En respuesta a unpregunta similar, Leí lo siguiente:
Si no tiene el control de ese servidor, use su nombre de host (siempre que haya al menos un CN que coincida con ese nombre de host en el certificado existente).
¿Qué significa exactamente "uso"?