Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вызов .net wcf-сервиса из java по SSL. / 8 сообщений из 8, страница 1 из 1
02.02.2012, 00:43:18
    #37643046
mijer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов .net wcf-сервиса из java по SSL.
Привет.

Подскажите, плиз, не сталкивался ли кто-либо проблемой, похожей на описанную ниже:
Из 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
02.02.2012, 14:46:05
    #37643971
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов .net wcf-сервиса из java по SSL.
что значит "сообщение не передается"?
Метод зависает? Выкидывает исключение? Передаёт не всё?
-Djavax.net.debug=all пробовали?
...
Рейтинг: 0 / 0
02.02.2012, 19:14:36
    #37644687
mijer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов .net wcf-сервиса из java по SSL.
Код: 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
02.02.2012, 19:16:05
    #37644690
mijer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов .net wcf-сервиса из java по SSL.
Blazkowicz-Djavax.net.debug=all пробовали?
Пробовал, не помогает, поскольку клипто-про не очень то и знает про этот параметр.
...
Рейтинг: 0 / 0
02.02.2012, 19:19:13
    #37644695
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов .net wcf-сервиса из java по SSL.
А в bouncycastle нет нужных алгоритомов?
...
Рейтинг: 0 / 0
03.02.2012, 09:39:57
    #37645163
mijer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов .net wcf-сервиса из java по SSL.
Есть, но нет поддержки TLS для этих алгоритмов. Вот , то, что есть в BC, а вот, что нужно Крипто-Про

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


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