Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Received fatal alert: handshake_failure / 13 сообщений из 13, страница 1 из 1
08.10.2013, 17:04:53
    #38420642
jjackass
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
Доброго времени суток!
В общем, такая беда.
Имеется связка сертификата + privatekey в хранилище PKCS12.
Устанавливаю соединение через RestTemplate спринга.
Инициализирую его самописным классом
MySimpleClientHttpRequestFactory extends SimpleClientHttpRequestFactory

Включаю ссл-дебаг, идёт сервер-клиент хеллоу, обмен сертификатами, и, как я понимаю, доходит до последнего шага, где моя сторона должна отправить случайную фразу, зашифрованную, на сервере должны её расшифровать, перешифровать своим алгоритмом и отправить мне.
И вот на этом этапе у меня валит ошибка. 2й день поиска не даёт никаких результатов.

verify_data: { 110, 99, 169, 173, 154, 211, 104, 225, 206, 199, 188, 193 }
***
[write] MD5 and SHA1 hashes: len = 16
0000: 14 00 00 0C 6E 63 A9 AD 9A D3 68 E1 CE C7 BC C1 ....nc....h.....
Padded plaintext before ENCRYPTION: len = 32
0000: 14 00 00 0C 6E 63 A9 AD 9A D3 68 E1 CE C7 BC C1 ....nc....h.....
0010: 52 A2 7C 0D DF E6 3F DB 54 D1 7C BF B8 EC 97 9E R.....?.T.......
main, WRITE: TLSv1 Handshake, length = 32
[Raw write]: length = 37
0000: 16 03 01 00 20 05 21 98 F0 1E AB 73 7D D4 4A CA .... .!....s..J.
0010: 77 34 4E BA 95 9F 28 64 9A B9 98 1B 80 31 F4 3B w4N...(d.....1.;
0020: C4 74 83 C3 76 .t..v
[Raw read]: length = 5
0000: 15 03 01 00 02 .....
[Raw read]: length = 2
0000: 02 28 .(
main, READ: TLSv1 Alert, length = 2
main, RECV TLSv1 ALERT: fatal, handshake_failure
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
Exception in thread "main" org.springframework.web.client.ResourceAccessException: I/O error: Received fatal alert: handshake_failure; nested exception is javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
...
Рейтинг: 0 / 0
08.10.2013, 17:16:44
    #38420654
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
Во-первых, https://www.google.by/#q=javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure - инфы вроде как много. Причин тоже может быть много, поэтому 2) Выложите код
...
Рейтинг: 0 / 0
08.10.2013, 17:43:12
    #38420693
jjackass
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
private SSLSocketFactory getFactory() throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, FileNotFoundException, IOException, UnrecoverableKeyException, CertificateException, ClassNotFoundException, InstantiationException, IllegalAccessException {


        System.setProperty("https.protocols", "TLSv1,SSLv3");
        System.setProperty("weblogic.security.SSL.enforceConstraints", "off");
        
        SSLContext sslContext = SSLContext.getInstance("SSLv3");
        
        String pKeyPassword = "123";

        KeyStore keyStore = KeyStore.getInstance("PKCS12");
       
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());

        File f = new File("c:\\cacerts");
        InputStream keyStoreStream = new FileInputStream(f);


        keyStore.load(keyStoreStream, pKeyPassword.toCharArray());
        keyManagerFactory.init(keyStore, pKeyPassword.toCharArray());


        TrustManager[] trustAll = new javax.net.ssl.TrustManager[]{
            new javax.net.ssl.X509TrustManager() {
                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return null;
                }

                @Override
                public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                }

                @Override
                public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                }
            }
        };
        sslContext.init(keyManagerFactory.getKeyManagers(), trustAll, new SecureRandom());

        SSLContext.setDefault(sslContext);


        SSLSocketFactory socketFactory = sslContext.getSocketFactory();
       

        }

        return socketFactory;

    }
...
Рейтинг: 0 / 0
08.10.2013, 17:44:42
    #38420695
jjackass
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
З.Ы. гуглили долго и интенсивно к сожалению решения не нашли, собственно что и вынудило обратиться к форуму!
...
Рейтинг: 0 / 0
08.10.2013, 17:48:32
    #38420699
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
два замечания по коду

1) У веблоджика своя кухня с https, выставлять
System.setProperty("https.protocols", "TLSv1,SSLv3");
System.setProperty("weblogic.security.SSL.enforceConstraints", "off");

по-моему бессмысленно. Их надо указывать при запуске веблоджика.

2) У вас трастменеджер захачен чтобы доверять всем, я думаю это от безысходности и в целом весьма неправильно, может изза этого и ошибок куча. В обшем вам надо разбираться и разбираться, удаленно трудно сказать, но когда я попал в подобную ситуацию мне гугла хватило, хотя и ушло дня 2.
...
Рейтинг: 0 / 0
08.10.2013, 17:52:43
    #38420706
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
SSL SSLю рознь. Это может быть как просто защита транспорта так и аутентификация. Что именно требует сервер?
Пустой TrustManager, вроде, нужен чтобы клиентская Java не падала на самоподписаных сертификатах. Тут же вроде сервер инициирует ошибку.
...
Рейтинг: 0 / 0
08.10.2013, 18:39:57
    #38420766
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
Пробовали версию java менять?
Кстати, вот - http://code.google.com/p/zaproxy/issues/detail?id=290, тут сайт поддерживает только tls1 - вывод в консоли почти как вас. В общем очень много векторов откуда может быть ошибка, перечислите что пробовали хотя бы
...
Рейтинг: 0 / 0
08.10.2013, 19:31:00
    #38420823
jjackass
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
Пробовал делать проверку через опенссл, проблем нет, ответ есть

Start Time: 1381221236
Timeout : 300 (sec)
Verify return code: 0 (y)
---
1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.</p>
</body></html>
closed

если переключиться с JDK6 на JDK7, то есть дополнение к коллстеку
%% Invalidated: [Session-1, TLS_RSA_WITH_AES_128_CBC_SHA
То есть что-то с алгоритмом шифрования, или чёрт его знает.

Так же думал что быть может дело в экспортных ограничениях, качал файлы с политикой local_policy.jar и US_export_policy.jar с оффа оракла, заменял в либах, также без результатно...
...
Рейтинг: 0 / 0
08.10.2013, 19:37:33
    #38420827
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
посмотрите в wireshark разницу между тем когда вы через openssl идете и через веблоджик - может натолкнет на мысль
...
Рейтинг: 0 / 0
08.10.2013, 19:43:32
    #38420828
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
Покажите полный stacktrace. И, да, если openssl работает, посмотрите TCP пакеты сниффером и сравните.
...
Рейтинг: 0 / 0
09.10.2013, 10:58:41
    #38421210
jjackass
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
Вобщем проблема решена, всё заработало! Спасибо всем кто откликнулся!

Собственно проблема таилась немного не там ... подправили код, вот что вышло
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SSLContext sslContext = SSLContext.getInstance("SSLv3");

        String pKeyPassword = "changeit";
        URL keyStoreUrl = MySimpleClientHttpRequestFactory.class.getClassLoader().getResource("татата/cacerts");
        URL trustStoreUrl = MySimpleClientHttpRequestFactory.class.getClassLoader().getResource("татата/truststore");

        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        keyStore.load(keyStoreUrl.openStream(), pKeyPassword.toCharArray());
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        keyManagerFactory.init(keyStore, pKeyPassword.toCharArray());

        KeyStore trustStore = KeyStore.getInstance("JKS");
        trustStore.load(trustStoreUrl.openStream(), pKeyPassword.toCharArray());
        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init(trustStore);

        sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());

        SSLContext.setDefault(sslContext);

        SSLSocketFactory socketFactory = sslContext.getSocketFactory();
...
Рейтинг: 0 / 0
18.12.2013, 05:02:24
    #38504492
horgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
jjackass, огромное спасибо Вам за рабочий код. Потратили массу времени на поиск решения, но именно предложенный Вами код помог решить проблему.

В моем случае самоподписанный серверный сертификат пришлось поместить в хранилище в отдельный файл при помощи командыЖ

Код: vbnet
1.
keytool -import -v -trustcacerts -file certificate.pem -keystore truststore.jks -keypass changeit -storepass changeit



найденной в статье Common SSL issues in Java .

И пришлось добавить свою реализацию HostnameVerifier:

Код: java
1.
2.
3.
4.
5.
6.
7.
            HostnameVerifier allHostsValid = new HostnameVerifier() {
                public boolean verify(String hostname, SSLSession session) {
                    //...
                }
            };

            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
...
Рейтинг: 0 / 0
19.12.2013, 05:05:50
    #38506034
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Received fatal alert: handshake_failure
horgh,

Я даже блог стал вести когда понял как люди круто тупят в простых вещах

http://vyatkins.wordpress.com/2013/11/19/java-base-ssl-connection-to-tomcat-with-server-and-client-certifications/

как раз моя первая статья с проектом на гитхабе и со всеми деталями была посвящена SSL в статье так же есть скрипт который при помощи keytool создает трасты для сервера и клиента автоматически.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Received fatal alert: handshake_failure / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]