Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > WSDL на HTTPS (jax-ws/wsimport)


Автор: dzheika 23.6.2008, 15:32
Необходимо собраться с wsdl-ки (jax-ws/wsimport) с ssl-ного url'a (https://server:443/file?wsdl).
Как я понимаю, необходимо взять сертификат сервера, импортировать его в хранилище ключей и прописать опции связанные с этим хранилищем для wsimport'a, и эти же опции использовать при обращении к веб-сервисам с того кода, что собереться...
Как это сделать?

пытался скопировать сертификат из openssl s_client -connect server:port от -----BEGIN CERTIFICATE----- до -----END CERTIFICATE----- и засэйвил в файл cert

keytool -import -v -trustcacerts -alias ws-client -keystore client.keystore -file cert -keypass XXXXXX -storepass YYYYYY
keytool error: java.lang.Exception: Public keys in reply and keystore don't match

так же имеются в файлах в формате PEM сертификат ws-client'a из хранилища ключей и приватный ключ.

Автор: dzheika 24.6.2008, 19:06
nice, разобрался... в общем дело было в алиасе... попробовал создать пустой keystore, а далее добавить сертификат, в общем сложно объяснить, проще показать.

скриптик для забора сертификата:
Код

#!/bin/bash

echo $1 | grep ^[^:]\\+:[[:digit:]]\\+\$ &>/dev/null || { printf "usage: getServerCert.sh server:port\n"; exit 1; }

openssl s_client -connect $1 << EOT 2>/dev/null | awk 'BEGIN {iscert=0}\
/-----BEGIN CERTIFICATE-----/ {iscert=1}\
iscert == 1 {print}\
/-----END CERTIFICATE-----/ {exit}'


и последовательность команд
Код

./getServerCert.sh server:443 > server.cert
keytool -genkey -alias notusedalias -keystore truststore.jks -storepass XXXXXX -keypass NOTUSED\
    -dname "CN=Mark Smith, OU=Java, O=Sun, L=Cupertino, S=California, C=US"
keytool -delete -alias notusedalias -keystore truststore.jks -storepass XXXXXX
keytool -import -trustcacerts -alias "ws-client" -file server.cert -keystore truststore.jks -storepass XXXXXX


для удобства я забил это в do.sh:
./do.sh 
Owner: CN=*<censored>, OU=<censored>, O=<censored>, L=St.Petersburg, ST=Russian Federation, C=ru
Issuer: CN=<censored>, OU=<censored>, O=<censored>, C=US
Serial number: <censored>
Valid from: <censored> MSD <censored> until: <censored> MSK <censored>
Certificate fingerprints:
         MD5:  <censored>
         SHA1: <censored>
Trust this certificate? [no]:  yes
Certificate was added to keystore

ну и теперь следует указать опции для wsimport'a:
Код

export WSIMPORT_OPTS="-Djavax.net.ssl.keyStore=/path/truststore.jks -Djavax.net.ssl.keyStorePassword=XXXXXX -Djavax.net.ssl.trustStore=/path/truststore.jks -Djavax.net.ssl.trustStorePassword=XXXXXX"
/usr/share/jaxws-ri/bin/wsimport.sh -s ws -Xdebug -Xnocompile https://server:443/file?wsdl
parsing WSDL...
generating code...


надеюсь понятно, что wsimport я сам разместил в данном месте и каталог ws необходимо создать...

P.S.: если нужна авторизация, не забываем про ~/.metro/auth, либо сами указываем -Xauthfile.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)