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
), obtengo la excepción java.security.cert.CertificateException: No subject alternative names present
.
Para solucionarlo, primero ejecuté openssl 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 de
certs.txt
entre-----BEGIN CERTIFICATE-----
y-----END CERTIFICATE-----
, - modificarlo para que el nombre del certificado sea igual a
AAA.BBB.CCC.DDD
y - luego importe el resultado usando
keytool -importcert -file fileWithModifiedCertificate
(dondefileWithModifiedCertificate
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 una pregunta 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 "usar"?