Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar

Člen
Avatar
:10.9.2013 10:48

Zdravím, chtěl bych se zeptat jestli tu někdo nepracuje v Javě s webovýma službama. Mám vygenerovány třídy pomocí WSDL a snažím se přistupovat k dané službě. Ta je dostupná přes HTTPS takže musím dodat certifikát a v tom je problém. Vůbec nemám tušení jak na to. Najde se někdo kdo by mi pomohl? Díky

 
Odpovědět
10.9.2013 10:48
Avatar
Silvinios
Tvůrce
Avatar
Silvinios:10.9.2013 21:07

Jaký framework pro webové služby používáš?

 
Nahoru Odpovědět
10.9.2013 21:07
Avatar

Člen
Avatar
Odpovídá na Silvinios
:10.9.2013 21:44

Vytvářím klienta pro přístup ke službě. Popravdě nemám moc tušení jak to udělat. Můžeš mi prosím nastínit nějaké řešení. Moméntálně jsem zkusil vygenerovat pomocí wsimport třídy pro přístup k službám a přidal ty certifikáty do cacerts. Ale program mi padá s javax.net.ssl­.SSLHandshake­Exception :/

 
Nahoru Odpovědět
10.9.2013 21:44
Avatar
Silvinios
Tvůrce
Avatar
Silvinios:10.9.2013 22:28

How to dynamically select a certificate alias when invoking web services
http://alesaudate.wordpress.com/…eb-services/

 
Nahoru Odpovědět
10.9.2013 22:28
Avatar

Člen
Avatar
Odpovídá na Silvinios
:11.9.2013 7:10

Díky moc pročtu si to :) Snad mě to nakopne správným směrem.

 
Nahoru Odpovědět
11.9.2013 7:10
Avatar

Člen
Avatar
:11.9.2013 7:53

Nemůžeš mi prosím Tě nějak popsat jak postupovat zhruba postupovat. Možná v tom hledám nějaký složitosti ale nemůžu s tím pohnout.
Mám vytvořenej klasickej JavaProject, v něm mám přidanej balíček tříd vygenerovanej wsimport-em z WSDL pak tam mám jinej balíček ve kterém je třída obsahující main. V tom volám službu. Certifikáty mám vloženy do keystoru a truststore. Zkoušel jsem je nastavit v programu takhle

System.setProperty("javax.net.ssl.keyStore", "<cesta>");
                System.setProperty("javax.net.ssl.keyStorePassword", "password");
                System.setProperty("javax.net.ssl.trustStore", "<cesta>");
                System.setProperty("javax.net.ssl.keyStoreType", "JKS");

Když to spustím tak to dopadne takhle: http://pastebin.com/g2sDTy9S

 
Nahoru Odpovědět
11.9.2013 7:53
Avatar
goddard
Člen
Avatar
Odpovídá na
goddard:11.9.2013 9:10

Mas ten stejny certifikat u klienta i na serveru?

 
Nahoru Odpovědět
11.9.2013 9:10
Avatar

Člen
Avatar
:11.9.2013 9:24

Já využívám komerční server jedné instituce. Certifikát byl přiložen k "dokumentaci" která je dost nedostatečná.

 
Nahoru Odpovědět
11.9.2013 9:24
Avatar
goddard
Člen
Avatar
goddard:11.9.2013 9:51

Kdyz se pripojis k tomu serveru, treba skrz prohlizec tak te by se ti ten certifikat mel stahnout. Tak ho pak muzes porovnat s tim v dokumentaci kde muze byt klidne i zastaralej a muze byt potreba ho obnovit.

 
Nahoru Odpovědět
11.9.2013 9:51
Avatar

Člen
Avatar
:11.9.2013 20:09

Když jsem zkusil nahrát do IE ten poskytovaný certifikát tak ho ta služba přijala. Pravděpodobně bude chyba někde v získávání certifikátu z keystore..:/ Už jsem z toho celej jalovej. Poslední 2 dny nad tím sedím a nemůžu přijít na to kde přesně je problém.

Editováno 11.9.2013 20:10
 
Nahoru Odpovědět
11.9.2013 20:09
Avatar
Silvinios
Tvůrce
Avatar
Odpovídá na
Silvinios:11.9.2013 20:13

Myslím, že chyba nesouvisí s JAX-WS ale SSL/TLS obecně.

Vyžaduje server autentizaci klienta?
Pokud ne, stačí do trust store přidat certifikáty vydavatelů certifikátu serveru (certificate chain).

Další možností je implementovat vlastní trust manager (viz příklad):

package demo;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class HTTPSDemo {

    public static void main(String[] args) throws Exception {
        String url = "https://www.seznam.cz/";

        TrustManager[] trustAllCerts = new TrustManager[] { new DummyTrustManager() };
        SSLContext context = SSLContext.getInstance("TLS");
        context.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());

        InputStream in = new URL(url).openStream();
        while (in.read() != -1) {
        }
        in.close();
    }

    /**
     * Accepts all certificates. Stores server certificates to files. For demo
     * purposes only!
     */
    private static class DummyTrustManager implements X509TrustManager {

        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            System.out.println("Server certificate chain:");
            for (int i = 0; i < chain.length; i++) {
                X509Certificate certificate = chain[i];
                System.out.println(i + ": " + certificate.getSubjectX500Principal().getName());
                try {
                    FileOutputStream out = new FileOutputStream("cert" + i + ".cer");
                    out.write(certificate.getEncoded());
                    out.close();
                } catch (IOException e) {
                    throw new CertificateException("Could not save certificate", e);
                }
            }
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }

    }

}
 
Nahoru Odpovědět
11.9.2013 20:13
Avatar

Člen
Avatar
:16.9.2013 14:37

Děkuji za odpověď nakonec se ukázalo že chyba byla v tom že mi chyběl certifikát ověřující autenticitu serveru v keystore.

 
Nahoru Odpovědět
16.9.2013 14:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.