Ahoj, krome  
sun.security.ssl.allowUnsafeRenegotiation=true
Zkus jeste
sun.security.ssl.allowLegacyHelloMessages=true

podle 
http://www.oracle.com/technetwork/java/javase/documentation/tlsreadme2-176330.html
https://forums.oracle.com/forums/thread.jspa?threadID=2241443
by to mohlo zabrat, tedy pokud ta exception v debugu
je exception kterou zminujou v uvedenem odkazu.

Chtelo by to vedet, co pouzivaj za java update na druhe strane.
-- 
Pavel Škop




----- PŮVODNÍ ZPRÁVA -----
Od: "Robert Novotny" <[email protected]>
Komu: [email protected]
Předmět: Re: Casove razitko s Postsignum
Datum: 7.5.2012 - 15:13:37

> Pozdravujem,
> aku mate verziu Javy? Moze to suvisiet s
> 
> sun.security.ssl.allowUnsafeRenegotiation
> 
> Ono sa to menilo v istej verzii, pretoze to bola
> bezpecnostna chyba pri 
> znovunadvazovani session v SSL. Skuste pozriet
> [1].
> 
> RN
> 
> [1]
> http://java.sun.com/javase/javaseforbusiness/docs/TLSReadme.html
> 
> <http://java.sun.com/javase/javaseforbusiness/docs/TLSReadme.html>
> 
> 
> 
> On 7. 5. 2012 14:34, Dusan Zatkovsky wrote:
> > Dobry den ( ahoj ),
> >
> > stale nic. Presiel som na apache http
> > komponenty, stale bez uspechu, 
> > > javax.net.ssl.SSLException: HelloRequest
> > followed by an unexpected  
> > > handshake message.
> >
> > Truststorom to asi nebude, pretoze ten isty mnou
> > vyrobeny jks ( narval 
> > > som tam vsetky postsignum certifikaty plus
> > vyexportovane z browseru po 
> > > rucnom pokuse pripojit sa na tu url )
> > pouzivam pri autentifikacii cez login/password a
> > tam to funguje,
> > >
> >
> > Kod:
> >
> >         private static String keyStoreFile = 
> > "/home/msk/work/misc/keys/private.pfx";
> >         private static String trustStoreFile = 
> > "/home/msk/work/misc/keys/postsignum.jks";
> >         private static String keyStorePassword =
> >         "BLABLA";
> >         >         private static String trustStorePassword
> >         = "123456";
> >         >         private static String ts_url = 
> > "https://www.postsignum.cz/DEMOTSA/TSS_crt/";;
> >
> >         final HttpParams httpParams = new
> >         BasicHttpParams();
> >         >
> >         // keystore. Povazujem zan subor
> >         "private.pfx" od postsignum, 
> >         > co je zda sa pkcs12 kontainer
> >         KeyStore keystore =
> >         KeyStore.getInstance("pkcs12");
> >         >         InputStream keystoreInput = new
> >         FileInputStream(new 
> >         > File(keyStoreFile));
> >         keystore.load(keystoreInput,
> >         keyStorePassword.toCharArray());
> >         >
> >         // truststore. Vyrobil som si sam a
> >         narval tam vsetky 
> >         > postsignum certifikaty s ktorymi som prisiel do
> > styku.
> > >         KeyStore truststore =
> >         KeyStore.getInstance("jks");
> >         >         InputStream truststoreInput = new
> >         FileInputStream(new 
> >         > File(trustStoreFile));
> >         truststore.load(truststoreInput, 
> > trustStorePassword.toCharArray());
> >
> >         final SchemeRegistry schemeRegistry =
> >         new SchemeRegistry();
> >         >         schemeRegistry.register(new
> >         Scheme("https", 443, new 
> >         > SSLSocketFactory(keystore, keyStorePassword,
> > truststore)));
> > >
> >         final DefaultHttpClient c = new
> >         DefaultHttpClient(new 
> >         > ThreadSafeClientConnManager(httpParams,
> > schemeRegistry), httpParams);
> > >
> >         HttpPost post = new HttpPost(ts_url);
> >         post.setParams(httpParams);
> >
> >         HttpResponse x = c.execute(post);
> >
> >
> > Skusil som zapnut debug, vid priloha. Vidim tam
> > napr:
> > >
> > Found trusted certificate:
> > [
> > [
> >   Version: V3
> >   Subject: SERIALNUMBER=S7464,
> >   CN=www.postsignum.cz, OU=PostSignum 
> >   > Services, O="Česká pošta, s.p. [IČ 47114983]",
> > C=CZ
> > >
> >
> > alebo
> >
> > *** ServerHelloDone
> > *** ClientKeyExchange, RSA PreMasterSecret,
> > TLSv1
> > > ...
> > *** Finished
> >
> >
> > a potom
> >
> > %% Cached client session: [Session-1,
> > SSL_RSA_WITH_RC4_128_MD5]
> > > main, setSoTimeout(0) called
> > main, WRITE: TLSv1 Application Data, length =
> > 119
> > > main, READ: TLSv1 Handshake, length = 20
> > *** HelloRequest (empty)
> > main, SEND TLSv1 ALERT:  warning, description =
> > no_negotiation
> > > main, WRITE: TLSv1 Alert, length = 18
> > %% Invalidated:  [Session-1,
> > SSL_RSA_WITH_RC4_128_MD5]
> > >
> >
> > Pravdupovediac, moc mudrejsi z toho nie som.
> > Stale to na mna posobi, 
> > > ze druha strana usudila, ze sa so mnou bavit
> > nebude a tu session 
> > > odstrihla.
> >
> > Podotykam, ze sa mi stale nepodarilo uspesne
> > spojit ani priamo ich 
> > > aplikaciou.
> >
> >
> > Diky.
> >
> >
> > --
> > Dusan
> >
> >
> >> Pro standardní HTTPS komunikaci s přihlášením
> >> klientským certifikátem 
> >> >> musíte mít dvě úložiště klíčů - jedno pro
> >> ověření certifikátu serveru 
> >> >> (trustore) a druhé pro privární klíč, kterým se
> >> přihlašujete 
> >> >> (keystore). Bez trustore se lze obejít, pokud
> >> si implementujete 
> >> >> "ověřování" certifikátu protistrany, které bude
> >> věřit každému 
> >> >> certifikátu.
> >>
> >> Použití HttpsURLConnection bych se snažil
> >> vyhnout, nedá se to 
> >> >> debugovat, jsou tam chyby, závislosti na
> >> globálních proměnných...
> >> >>
> >> S pozdravem
> >>
> >> Filip Jirsák
> >>
> >>
> >> Dne 3. května 2012 15:24 Dusan Zatkovsky
> >> <[email protected] 
> >> >> <mailto:[email protected]>> napsal(a):
> >>
> >>     Ahoj,
> >>
> >>     postupil som dalej, ale o moc zas nie.
> >>
> >>       private static SSLSocketFactory
> >>       getFactory() throws ...{
> >>       >>
> >>             KeyManagerFactory keyManagerFactory
> >>             =
> >>             >>     KeyManagerFactory.getInstance("SunX509");
> >>             KeyStore keyStore =
> >>             KeyStore.getInstance("JKS");
> >>             >>
> >>             InputStream keyInput = new
> >>             FileInputStream(new
> >>             >>     File(clientJksFile));
> >>             keyStore.load(keyInput,
> >>             clientJksPasswd.toCharArray());
> >>             >>             keyInput.close();
> >>
> >>             keyManagerFactory.init(keyStore,
> >>     clientJksPasswd.toCharArray());
> >>
> >>             SSLContext context =
> >>             SSLContext.getInstance("TLS");
> >>             >>             context.init(keyManagerFactory.getKeyManagers(),
> >>             >>             > >>             null,
> >>             >>     new SecureRandom());
> >>
> >>             return context.getSocketFactory();
> >>         }
> >>
> >>
> >>       void test() {
> >>
> >>         //private static String ts_url =
> >>     "https://www.postsignum.cz/DEMOTSA/TSS_crt/";
> >>     >>     <https://www.postsignum.cz/DEMOTSA/TSS_crt/>;
> >>     >>         private static String ts_url =
> >>     "https://tsa.postsignum.cz/TSS/HttpTspServer/";
> >>     >>     <https://tsa.postsignum.cz/TSS/HttpTspServer/>;
> >>     >>
> >>     ...
> >>             Security.addProvider(new
> >>             BouncyCastleProvider());
> >>             >>
> >>             // tu mam certifikaty postsignum k
> >>             overeniu ssl cert path
> >>             >>             System.setProperty("javax.net.ssl.trustStore",
> >>             >>             > >>             caJksFile);
> >>             >>             
> >> System.setProperty("javax.net.ssl.trustStorePassword",
> >>             >>             > >>             >>     caJksPasswd);
> >>
> >>             // generuj request
> >>
> >>             TimeStampRequestGenerator reqGen =
> >>             new
> >>             >>     TimeStampRequestGenerator();
> >>             TimeStampRequest request =
> >>     reqGen.generate(TSPAlgorithms.SHA1, new
> >>     byte[20]);
> >>     >>             byte[] reqData =
> >>             request.getEncoded();
> >>             >>
> >>             // posli request
> >>             SSLSocketFactory sslfact =
> >>             getFactory();
> >>             >>             URL url = new URL(ts_url);
> >>             HttpsURLConnection c =
> >>             (HttpsURLConnection)
> >>             >>     url.openConnection();
> >>             c.setSSLSocketFactory(sslfact);
> >>
> >>             c.setDoOutput(true);
> >>             c.setDoInput(true);
> >>             c.setRequestMethod("POST");
> >>             c.setRequestProperty("Content-type",
> >>             >>     "application/timestamp-query");
> >>             c.setRequestProperty("Content-length",
> >>             >>     String.valueOf(reqData.length));
> >>             OutputStream out =
> >>             c.getOutputStream();
> >>             >>             out.write(reqData);
> >>             out.flush();
> >>
> >>             if (c.getResponseCode() !=
> >>             HttpURLConnection.HTTP_OK) {
> >>             >>     ...
> >>
> >>     }
> >>
> >>     V getResponseCode() koncim na
> >>     javax.net.ssl.SSLHandshakeException:
> >>     Received fatal alert:
> >>     >>     handshake_failure.
> >>
> >>     Vzhladom na to, ze som skusil aj
> >>     oficialneho TSA klienta od
> >>     >>     PostSignum, ktory koncil s podobnou
> >>     vynimkou by mohol byt problem
> >>     >>     zakopany prave v certifikate a skusim sa
> >>     vydat najprv touto cestou.
> >>     >>
> >>     V com mam trosku gulas ale je, ze v
> >>     aplikacii TSA sa pridava
> >>     >>     privatny kluc ( s heslom ), kdezto na
> >>     autentikaciu sa pouzije
> >>     >>     certifikat. Ale predpokladam,
> >>     ze ta aplikacia si certifikat vygeneruje z
> >>     privatneho kluca...
> >>     >>
> >>
> >>     Diky
> >>
> >>     --
> >>     Dusan
> >>
> >>
> >>
> >>>     Zdravím,
> >>>     přihlášení je standardní HTTPS přihlášení
> >>>     klientským
> >>>     >>>     certifikátem, ne? Použijte třeba
> >>>     HttpClient z Apache
> >>>     >>>     HttpComponents (
> >>>     http://hc.apache.org/httpcomponents-client-ga/index.html
> >>>     ),
> >>>     >>>     použití HTTPS je tam myslím někde v
> >>>     příkladech.
> >>>     >>>
> >>>     S pozdravem
> >>>
> >>>     Filip Jirsák
> >>>
> >>>
> >>>     2012/5/2 Dusan Zatkovsky
> >>>     <[email protected]
> >>>     >>>     <mailto:[email protected]>>
> >>>
> >>>         Ahoj,
> >>>
> >>>         implementoval niekto z Vas casove
> >>>         razitko od postsignum s
> >>>         >>>         prihlasenim certifikatom?
> >>>
> >>>         Vygooglit sa mi nic zatial nepodarilo,
> >>>         v podstate som zatial
> >>>         >>>         pripravil hash a odoslal na
> >>>         server, ale nemam doriesenu
> >>>         autentifikaciu.
> >>>         >>>
> >>>                Security.addProvider(new
> >>>                BouncyCastleProvider());
> >>>                >>>                TimeStampRequestGenerator
> >>>                reqGen = new
> >>>                >>>         TimeStampRequestGenerator();
> >>>                TimeStampRequest request =
> >>>         reqGen.generate(TSPAlgorithms.SHA1,
> >>>         new byte[20]);
> >>>         >>>                byte[] reqData =
> >>>                request.getEncoded();
> >>>                >>>
> >>>                String s_url =
> >>>         "https://www.postsignum.cz/DEMOTSA/TSS_crt/";;
> >>>         >>>                URL url = new URL(s_url);
> >>>
> >>>                HttpURLConnection c =
> >>>                (HttpURLConnection)
> >>>                >>>         url.openConnection();
> >>>                c.setDoOutput(true);
> >>>                c.setDoInput(true);
> >>>                c.setRequestMethod("POST");
> >>>                c.setRequestProperty("Content-type",
> >>>                >>>         "application/timestamp-query");
> >>>                c.setRequestProperty("Content-length",
> >>>                >>>         String.valueOf(reqData.length));
> >>>
> >>>
> >>>                OutputStream out =
> >>>                c.getOutputStream();
> >>>                >>>                out.write(reqData);
> >>>                out.flush();
> >>>
> >>>                InputStream in =
> >>>                c.getInputStream();
> >>>                >>>                TimeStampResp resp =
> >>>                TimeStampResp.getInstance(new
> >>>                >>>         ASN1InputStream(in).readObject());
> >>>                TimeStampResponse response =
> >>>                new TimeStampResponse(resp);
> >>>                >>>                response.validate(request);
> >>>
> >>>
> >>>
> >>>
> >>>         Diky
> >>>
> >>>         --
> >>>         Dusan
> >>>
> >>>
> >>
> >>
> >
> 
> 

Odpovedet emailem