Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 08.09.2016
Сообщений: 5

Не получается создать SSL подключение к Bitstamp на java на протоколе Fix

04.04.2019, 14:37. Показов 1723. Ответов 7

Студворк — интернет-сервис помощи студентам
Всем привет! Возникла проблема при подключении к Bitstamp для получения мгновенной информации с биржи. Делаю простенькое sslsocket соединение, но выдает exception типа "unable to find valid certification path to requested target". До этого я успешно смог подключаться к этой бирже и тягать данные по http (есть соединение с биржей). Они внесли мой айпи и ключ в вайтлист и с помощью FixSimulator успешно обменивался fix сообщениями с биржей (есть соединение с помощью Fix-протокола). Но при соединении через java код у меня вылезает странный exception. Теоретически это может быть и не моя ошибка (хотя, это наиболее вероятно), а их, потому что у этой биржи есть ошибки в API, странные ограничения для подключения и неполная документация. Подскажите что-то дельное, в какую сторону копать. Мой код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void main(String[] args) throws IOException {
        SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
        SSLSocket sslSocket = (SSLSocket) sslsocketfactory.createSocket("fix.bitstamp.net", 8905);
        sslSocket.startHandshake();
 
        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sslSocket.getOutputStream())));
        String logonText = FixLibrary.getLogon(1);
        System.out.println(logonText);
        out.print(logonText);
        out.flush();
 
        BufferedReader in = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            System.out.println(inputLine);
        }
        in.close();
        out.close();
        sslSocket.close();
}
Exception следующего вида:

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
"C:\Program Files\Java\jdk1.8.0_201\bin\java" -Didea.launcher.port=7534 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;F:\JAVAроекты\BitstampConnection\target\classes;C:\Users\Nikita\.m2\repository\com\squareup\okhttp3\okhttp\3.14.0\okhttp-3.14.0.jar;C:\Users\Nikita\.m2\repository\com\squareup\okio\okio\2.2.2\okio-2.2.2.jar;C:\Users\Nikita\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib\1.2.60\kotlin-stdlib-1.2.60.jar;C:\Users\Nikita\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-common\1.2.60\kotlin-stdlib-common-1.2.60.jar;C:\Users\Nikita\.m2\repository\org\jetbrains\annotations\13.0\annotations-13.0.jar;C:\Users\Nikita\.m2\repository\com\squareup\moshi\moshi\1.8.0\moshi-1.8.0.jar;C:\Users\Nikita\.m2\repository\com\google\code\gson\gson\2.8.5\gson-2.8.5.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.2.4\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain FirstTest
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:316)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:310)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1639)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:223)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1037)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:965)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1064)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
    at FirstTest.main(FirstTest.java:79)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302)
    at sun.security.validator.Validator.validate(Validator.java:262)
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1621)
    ... 13 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:392)
    ... 19 more
 
Process finished with exit code 1
К сожалению метод FixLibrary.getLogon() показать не могу, так как он содержит в себе ключи, но я уверен в том, что он возвращает гарантированно правильную строку для подключения, я ее перепроверял на стороннем приложении (FixSimulator). Что я делаю не так?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2019, 14:37
Ответы с готовыми решениями:

StringGrid. fix и не fix cells одного col
Здравствуйте, гуглил/пробовал разобраться, но пока так и не разобрался. Можно ли в stringgrid сделать конкретно одну колонку с такой-то...

Подключение библиотеки OpenGL. Не получается создать файл описание геометрии
Добрый день. Не получается заставить линковщик видеть: #pragma comment(lib,"glu32.lib") #pragma comment(lib,"glaux.lib") ...

Не получается прикрепить SSL к домену
Здравствуйте. У меня есть сайт-портфолио. На днях решил установить SSL на домен, бесплатный. Загрузил ключи сертификата через cpanel -...

7
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.04.2019, 14:43
Лучший ответ Сообщение было отмечено trouble-nikita как решение

Решение

Цитата Сообщение от trouble-nikita Посмотреть сообщение
unable to find valid certification path to requested target
надо либо отключить проверку сертификата для ssl (что вообще говоря не самый правильный путь), либо добавить кого-то в доверенные, чтобы проверка проходила успешно
0
0 / 0 / 0
Регистрация: 08.09.2016
Сообщений: 5
05.04.2019, 13:07  [ТС]
Таких методов там нет. Это действия, которые проводят вручную, а не с помощью ПО.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
05.04.2019, 14:09
Цитата Сообщение от trouble-nikita Посмотреть сообщение
Таких методов там нет
каких таких?
Цитата Сообщение от trouble-nikita Посмотреть сообщение
Это действия, которые проводят вручную, а не с помощью ПО.
добавление сертификата в доверенные естественно руками делается, а отключить проверку сертификата можно из кода, как делать сам уж погугли
0
0 / 0 / 0
Регистрация: 08.09.2016
Сообщений: 5
05.04.2019, 15:08  [ТС]
Привет. Спасибо за то, что стараешься помочь.
В классе SSLSocket https://docs.oracle.com/javase... ocket.html существует только один метод более-менее близок к тому, что ты написал: setNeedClientAuth, но он работает только когда открывается на сервере. Для клиента он не работает. Других методов, описанных тобой я не нашел.
Цитата Сообщение от xoraxax Посмотреть сообщение
отключить проверку сертификата для ssl
и
Цитата Сообщение от xoraxax Посмотреть сообщение
добавить кого-то в доверенные
это действия которые совершаются ручками на компьютере, когда заходишь на сайт, а на него ругается броузер/фаервол/антивирус и ты делаешь эти действия, просто чтоб вставить костыль. Но у меня не сайт, а специальный сервер с портом и на 3 строчке интуитивно простого кода, создание фабрики, создание подключения и рукопожатие на котором все валится. От меня больше ничего не требуется. Дальше я только должен работать с потоками.
P.S. Не претендую на вселенскую истину, запросто могу ошибаться.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
05.04.2019, 15:22
https://stackoverflow.com/ques... validation
ну и по похожим словам гугли
0
0 / 0 / 0
Регистрация: 08.09.2016
Сообщений: 5
05.04.2019, 19:52  [ТС]
Похоже, что ты прав. В понедельник постараюсь решить эту проблему. После отпишусь.
0
0 / 0 / 0
Регистрация: 08.09.2016
Сообщений: 5
08.04.2019, 17:59  [ТС]
С помощью [InstallCert](https://github.com/escline/InstallCert) импортировал SSL сертификат от сервера к себе, а потом с помощью keytool установил его в список доверенных сертификатов. Как подтверждение, могу распечатать информацию по этому сертификату с помощью команды keytool -printcert -sslserver fix.bitstamp.net:8905 и мне выдаст всю информацию по этому сертификату.
Также убрал ограничения на проверку в Java Control Panel
Ничего не помогло, все еще выдает ошибку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2019, 17:59
Помогаю со студенческими работами здесь

Не получается получить SSL сертификат от Let's Encrypt
Задался целью поставить и настроить LAMP на Ubuntu 16.04. Делал я это по этой инструкции. Всё шло красно прекрасно, вплоть до пункта 8, а...

PHP подключение к google.com через ssl
$sock = fsockopen("ssl://google.com", 443, $errno, $errstr, 30); if (!$sock) die("$errstr ($errno)\n"); fputs($sock, "GET /...

Boost 1.67.0 ssl connect не получается сделать timeout 10sec
Не очень-то я сильна в библиотеке boost 1.67.0, от чего прошу помощи экспертов. Спустя какое-то время, запрос ждет ответа от сервера...

Sql server 2008r2. Ole db подключение выдает ошибку ssl
В реестре выставлял сертификат равный нулю. Tsl 1.2 включен. Драйвер ole db обновлял. В менеджер студио входит под учеткой ,в файле udl...

Java в Oracle. Подключение java source
Ребят, день добрый! Есть в БД (Oracle) у меня два java source, созданных мной. В одном идет работа, в другом хранятся методы. Я из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru