Исключение безопасности при использовании wsimport - PullRequest
5 голосов
/ 05 июля 2011

Я хочу сгенерировать стаб-файлы из wsdl-файла, который доступен через ssl-соединение с самозаверяющим сертификатом.

<exec executable="wsimport">
<arg value="-d" />
<arg value="${absolute.path.to.project}/gen" />
<arg value="-s" />
<arg value="${absolute.path.to.project}/src" />
<arg value="https://host:8443/wsrf/services/WS?wsdl" />
</exec>

Когда я выполняю это в ant, я получаю эту ошибку:

generate-from-wsdl:
     [exec] parsing WSDL...
     [exec] [ERROR] sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
     [exec] Failed to read the WSDL document: https://192.168.56.101:8443/wsrf/services/KnowledgebaseWebservice?wsdl, because 1) could not find the document; /2) the document could not be read; 3) the root element of the document is not <wsdl:definitions>.
     [exec] [ERROR] failed.noservice=Could not find wsdl:service in the provided WSDL(s): 
     [exec]  At least one WSDL with at least one service definition needs to be provided.
     [exec]     Failed to parse the WSDL.
     [exec] Result: 1

Чтобы избежать этого, я попытался

  • Импортировать файл server.crt с помощью keytool -importcert -file ~/path/server.crt
  • Копирование server.crt в $ JAVA_HOME / lib /security

ОБНОВЛЕНИЕ

Я также попробовал следующее:

<wsimport wsdl="https://host:8443/Webservice?wsdl" destdir="gen"
              sourcedestdir="src"
              verbose="true">
    <jvmarg value="-Djavax.net.ssl.trustStore=/path/host.cer" />
    <jvmarg value="-Djavax.net.ssl.trustStorePassword=changeit" />
</wsimport>

Я все еще получаю эту ошибку.Что я мог сделать?

Ответы [ 2 ]

4 голосов
/ 05 июля 2011

Я думаю, вам нужно будет импортировать сертификат сервера в хранилище ключей JRE, указав -keystore <path_to>/jre/lib/security/cacerts.Если вы придерживаетесь предыдущей командной строки, я думаю, вам нужно будет выполнить эту команду для того же пользователя, который выполняет Ant.

2 голосов
/ 14 ноября 2012

Я не могу импортировать сертификат в мой /jre/lib/security/cacerts.

Итак, я остановился на следующем обходном пути:

<target name="main" >
    <exec executable="java">
        <arg line="-Djavax.net.ssl.trustStore=c:\jdk160_29\.mykeystore  -classpath C:\jdk160_29\lib\tools.jar com.sun.tools.internal.ws.WsImport https://host:8443/Webservice?wsdl -p com.test -s ./src"/>
    </exec>
</target>
...