powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Received fatal alert: handshake_failure
13 сообщений из 13, страница 1 из 1
Received fatal alert: handshake_failure
    #38420642
jjackass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
В общем, такая беда.
Имеется связка сертификата + 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
Received fatal alert: handshake_failure
    #38420654
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, https://www.google.by/#q=javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure - инфы вроде как много. Причин тоже может быть много, поэтому 2) Выложите код
...
Рейтинг: 0 / 0
Received fatal alert: handshake_failure
    #38420693
jjackass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Received fatal alert: handshake_failure
    #38420695
jjackass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
З.Ы. гуглили долго и интенсивно к сожалению решения не нашли, собственно что и вынудило обратиться к форуму!
...
Рейтинг: 0 / 0
Received fatal alert: handshake_failure
    #38420699
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
два замечания по коду

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

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

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

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
Received fatal alert: handshake_failure
    #38420827
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите в wireshark разницу между тем когда вы через openssl идете и через веблоджик - может натолкнет на мысль
...
Рейтинг: 0 / 0
Received fatal alert: handshake_failure
    #38420828
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите полный stacktrace. И, да, если openssl работает, посмотрите TCP пакеты сниффером и сравните.
...
Рейтинг: 0 / 0
Received fatal alert: handshake_failure
    #38421210
jjackass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем проблема решена, всё заработало! Спасибо всем кто откликнулся!

Собственно проблема таилась немного не там ... подправили код, вот что вышло
Код: 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
Received fatal alert: handshake_failure
    #38504492
horgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Received fatal alert: handshake_failure
    #38506034
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
horgh,

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

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

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


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