2016-12-18 11 views
0

Я пытаюсь установить соединение TLS. Я прочитал, что для его реализации я должен инициализировать params и установить его в канал.TLS сертификация. TLSParameters с кабелем CXF

Это общий метод, который вызывается со стороны потребителя, чтобы получить прокси JaxWs. Не могли бы вы посоветовать мне, что я делаю неправильно?

public static <T> T getSvc(String urlWsdl, Class<? extends Service> svcClass, 
     Class<T> endpointCl) { 

    Service service = null; 
    try { 
     final URL wsdl = new URL(urlWsdl); 
     service = svcClass.getConstructor(URL.class).newInstance(wsdl); 
    } catch (Exception ex) {} 

    final T endPointInterface = service.getPort(endpointCl); 

    initTls(ClientProxy.getClient(port)); 
    return endPointInterface; 
} 

private static void initTls(final Client client) { 

    final HTTPConduit httpConduit = (HTTPConduit) client.getConduit(); 
    final TLSClientParameters tlsClientParameters = new TLSClientParameters(); 

    try { 

     final KeyStore trustStore = KeyStore.getInstance("JKS"); 
     trustStore.load(new FileInputStream("path", "password"); 
     final TrustManager[] myTrustStoreKeyManagers = getTrustManagers(trustStore); 

     tlsClientParameters.setTrustManagers(myTrustStoreKeyManagers); 
     httpConduit.setTlsClientParameters(tlsClientParameters); 
    } catch (Exception e) {} 
} 

Теперь я терплю неудачу с происходящим исключением в строке (service = svcClass.getConstructor(URL.class).newInstance(wsdl);)

Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at ..... 
Caused by: javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. 
    at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:151) 
    at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:101) 
    at javax.xml.ws.Service.<init>(Unknown Source) 
    at com.selity.service.v1.SelityService.<init>(SelityService.java:40) 
    ... 31 more 
    Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: Problem parsing 'https://somehost/SelitySvc?wsdl'.: 
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2198) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2390) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2422) 
    at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:263) 
    at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:206) 
    at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:98) 

ответ

0

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX здание пути не удалось: солнце. security.provider.certpath.SunCertPathBuilderException: не удалось найти действительный путь сертификации для запрошенной цели

Это значит, что клиент не доверяет сертификату, представленному сервером, когда он пытается загрузить файл WSDL. Эта операция до конфигурации TLS в клиенте CXF

Альтернативы:

1) точка в локальный файл WSDL.

File wsdlFile = new File(wsdlPath); 
URL wsdl = wsdlFile.toURI().toURL(); 

2) Настройка доверенных на уровне виртуальной машины Java

System.setProperty("javax.net.ssl.trustStore",pathToYourTruststore); 
System.setProperty("javax.net.ssl.trustStorePassword","password"); 
+0

Это неисправного раньше. здесь -service = svcClass.getConstructor (URL.class) .newInstance (wsdl); – liotur

+0

Он не работает в этой строке, когда пытается загрузить wsdl: «Разбор проблем» https: // somehost/SelitySvc? Wsdl'.' – pedrofb

+0

Есть ли другой вариант для его реализации? – liotur

 Смежные вопросы

  • Нет связанных вопросов^_^