SSLHandshakeException: Pas d'autres noms de l'objet présent

Je suis en invoquant HTTPS web service SOAP par le biais de code java. J'ai déjà importé le certificat auto-signé dans jre cacerts de magasin de clés. Maintenant j'obtiens :

com.sun.xml.internal.ws.com.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present

Le nom d'hôte de l'URL du service ne correspond pas à celle de la CN fourni dans cert. J'ai lu sur un contournement de la définition d'un nom d'hôte personnalisé vérificateur ici. Mais je ne peux pas en mesure de faire, où je dois mettre en œuvre la solution de contournement dans mon code.

public SOAPMessage invokeWS(WSBean bean) throws Exception {
SOAPMessage response=null;
try{
/** Create a service and add at least one port to it. **/
String targetNameSpace = bean.getTargetNameSpace();
String endpointUrl = bean.getEndpointUrl();
QName serviceName = new QName(targetNameSpace, bean.getServiceName());
QName portName = new QName(targetNameSpace, bean.getPortName());
String SOAPAction = bean.getSOAPAction();
HashMap<String, String> map = bean.getParameters();
Service service = Service.create(serviceName);
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointUrl);
/** Create a Dispatch instance from a service. **/
Dispatch dispatch = service.createDispatch(portName, SOAPMessage.class,
Service.Mode.MESSAGE);
//The soapActionUri is set here. otherwise we get a error on .net based
//services.
dispatch.getRequestContext().put(Dispatch.SOAPACTION_USE_PROPERTY,
new Boolean(true));
dispatch.getRequestContext().put(Dispatch.SOAPACTION_URI_PROPERTY,
SOAPAction);
/** Create SOAPMessage request. **/
//compose a request message
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage message = messageFactory.createMessage();
//Create objects for the message parts
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody body = envelope.getBody();
SOAPElement bodyElement = body.addChildElement(bean.getInputMethod(),
bean.getPrefix(), bean.getTargetNameSpace());
...more code to form soap body goes here
//Print request
message.writeTo(System.out);
//Save the message
message.saveChanges();
response = (SOAPMessage)dispatch.invoke(message);
}
catch (Exception e) {
log.error("Error in invokeSiebelWS :"+e);
}
return response;
}

S'il vous plaît ignorer WSBean paramètre que les espaces de noms et d'autres wsdl attributs sont en provenance de ce bean. Et si cette exception peut résoudre avec diverses solutions de contournement, pls ne le suggèrent.

  • Votre service est URI aide d'une adresse IP ou un nom d'hôte?
  • sa à l'aide de l'adresse ip.