powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вызов .net wcf-сервиса из java по SSL.
8 сообщений из 8, страница 1 из 1
Вызов .net wcf-сервиса из java по SSL.
    #37643046
mijer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Подскажите, плиз, не сталкивался ли кто-либо проблемой, похожей на описанную ниже:
Из java нужно вызват .net wcf-сервис по SSL. Проблема в том, что java-клиент категорически отказывается передавать больше чем 48680 байт. Т.е., если Content-Size 48680, то сообщение передается, если 48681 - нет. С .net-клиентом таких проблем нет.

К сожалению, конфиг-файл .net-сервиса предоставить пока не могу, т.к. сервис не мой.

Вот юнит-тест, которым я пытаюсь вызывать веб-сервис.

Код: 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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
package foo.bar;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.junit.Test;

import javax.net.ssl.*;
import java.io.*;
import java.net.URL;
import java.security.KeyStore;

public class ReadTimedOutTest {

    @Test
    public void testReadTimedOut() throws Exception {
        URL url = new URL("https://services/endpoint/");

        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        setUpSSL(connection);
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("SOAPAction", "http://namespace/2012/01/service/Operation");
        connection.setRequestProperty("Accept", "*/*");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");

        connection.setConnectTimeout(10 * 1000);
        connection.setReadTimeout(10 * 1000);
        connection.setInstanceFollowRedirects(true);

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        InputStream is = ReadTimedOutTest.class.getResourceAsStream("payload.failure.xml");
        try {
            IOUtils.copy(is, bos);
        } finally {
            is.close();
        }
        byte[] bytes = bos.toByteArray();
        connection.setRequestProperty("Content-Length", String.valueOf(bytes.length));

        OutputStream os = connection.getOutputStream();
        try {
            IOUtils.copy(new ByteArrayInputStream(bytes), os);
            os.flush();
        } finally {
            os.close();
        }

        int respCode = connection.getResponseCode();
        if(respCode >= HttpsURLConnection.HTTP_INTERNAL_ERROR) {
            is = connection.getErrorStream();
            try {
                IOUtils.copy(is, System.err);
            } finally {
                is.close();
            }
        } else {
            is = connection.getInputStream();
            try {
                IOUtils.copy(is, System.out);
            } finally {
                is.close();
            }
        }
    }

    private void setUpSSL(HttpsURLConnection connection) throws Exception {
        byte[] bytes = FileUtils.readFileToByteArray(new File("d:\\workspace\\temp\\keystore"));
        KeyStore keyStore = KeyStore.getInstance("JKS");
        keyStore.load(new ByteArrayInputStream(bytes), "changeit".toCharArray());
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("X509");
        keyManagerFactory.init(keyStore, "changeit".toCharArray());

        bytes = FileUtils.readFileToByteArray(new File("d:\\workspace\\temp\\truststore"));
        KeyStore trustStore = KeyStore.getInstance("JKS");
        trustStore.load(new ByteArrayInputStream(bytes), "changeit".toCharArray());
        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("X509");
        trustManagerFactory.init(trustStore);

        SSLContext context = SSLContext.getInstance("TLS");
        context.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
        SSLSocketFactory socketFactory = context.getSocketFactory();

        connection.setSSLSocketFactory(socketFactory);
    }
}
...
Рейтинг: 0 / 0
Вызов .net wcf-сервиса из java по SSL.
    #37643971
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что значит "сообщение не передается"?
Метод зависает? Выкидывает исключение? Передаёт не всё?
-Djavax.net.debug=all пробовали?
...
Рейтинг: 0 / 0
Вызов .net wcf-сервиса из java по SSL.
    #37644687
mijer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Exception in thread "main" java.net.SocketTimeoutException: Read timed out
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(SocketInputStream.java:129)
	at ru.CryptoPro.ssl.q.a(Unknown Source)
	at ru.CryptoPro.ssl.q.a(Unknown Source)
	at ru.CryptoPro.ssl.t.a(Unknown Source)
	at ru.CryptoPro.ssl.t.a(Unknown Source)
	at ru.CryptoPro.ssl.af.read(Unknown Source)
	at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
	at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
	at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
	at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
	at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
	at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:318)



За настройки SSL, сорри, немного слукавил. На самом деле метод setUpSSL выглядит следующим образом, хотя врядли крипто-про виноват (этот момент еще не проверялся, но уже даже и не ясно на что грешить):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    private static void setUpSSL(HttpsURLConnection connection) throws Exception {
        KeyStore keyStore = KeyStore.getInstance("HDImageStore", "JCP");
        keyStore.load(null, "changeit".toCharArray());
        AliasedX509ExtendedKeyManager keyManager = new AliasedX509ExtendedKeyManager(keyStore, "tester", "changeit");

        byte[] bytes = FileUtils.readFileToByteArray(new File("c:\\Users\\me\\AppData\\Local\\Crypto Pro\\truststore"));
        KeyStore trustStore = KeyStore.getInstance("HDImageStore", "JCP");
        trustStore.load(new ByteArrayInputStream(bytes), "changeit".toCharArray());
        TrustManagerFactory trustManagers = TrustManagerFactory.getInstance("GostX509", "JTLS");
        trustManagers.init(trustStore);

        SSLContext context = SSLContext.getInstance("GostTLS");
        context.init(new KeyManager[]{keyManager}, trustManagers.getTrustManagers(), null);
        SSLSocketFactory socketFactory = context.getSocketFactory();

        connection.setSSLSocketFactory(socketFactory);
    }
...
Рейтинг: 0 / 0
Вызов .net wcf-сервиса из java по SSL.
    #37644690
mijer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz-Djavax.net.debug=all пробовали?
Пробовал, не помогает, поскольку клипто-про не очень то и знает про этот параметр.
...
Рейтинг: 0 / 0
Вызов .net wcf-сервиса из java по SSL.
    #37644695
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в bouncycastle нет нужных алгоритомов?
...
Рейтинг: 0 / 0
Вызов .net wcf-сервиса из java по SSL.
    #37645163
mijer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть, но нет поддержки TLS для этих алгоритмов. Вот , то, что есть в BC, а вот, что нужно Крипто-Про

Имя шифр-сюитыИдентификатор шифр-сюитыАлгоритм ключей обменаРежим шифрования данных по алгоритму ГОСТ Р 28147-89TLS_CIPHER_20010x81ГОСТ 34.10-2001Гаммирование
BC не подойдет еще и из-за того, что нужен сертифицированный ФСБ криптопровайдер.
...
Рейтинг: 0 / 0
Вызов .net wcf-сервиса из java по SSL.
    #37645626
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mijerBC не подойдет еще и из-за того, что нужен сертифицированный ФСБ криптопровайдер. Есть ньюансы .
Вкратце: если не оказываете услуги сторонним лицам - сертификация необязательна.
...
Рейтинг: 0 / 0
Вызов .net wcf-сервиса из java по SSL.
    #37646094
mijer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@Basil A. Sidorov, большое спасибо за полезную ссылку.
Basil A. Sidorovесли не оказываете услуги сторонним лицам
Как раз поэтому BC и не подойдет.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вызов .net wcf-сервиса из java по SSL.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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