logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline stanbel1  
#1 Оставлено : 12 июля 2018 г. 14:54:15(UTC)
stanbel1

Статус: Новичок

Группы: Участники
Зарегистрирован: 15.12.2017(UTC)
Сообщений: 6
Откуда: Москва

пытаюсь установить соеденение с двухсторонним SSL

Код:

	public static void main(String[] args) throws  Exception {
	
        System.setProperty("https.proxyHost", "172.18.0.88");
        System.setProperty("https.proxyPort", "3128");
        System.setProperty("http.proxyHost", "172.18.0.88");
        System.setProperty("http.proxyPort", "3128");
        System.setProperty("com.sun.security.enableCRLDP", "true"); // для sun jvm
        System.setProperty("javax.net.ssl.supportGVO", "true");
        
        KeyStore ks = KeyStore.getInstance("HDImageStore", "JCP"); // Тут хранится только один наш сертификат            
        ks.load(new FileInputStream("C:\\Dev Tools\\Eclipse workspace\\NBKI-CKKI\\bogocert"), "123".toCharArray());
    

        KeyStore kst = KeyStore.getInstance("HDImageStore", "JCP");   // Тут хранится сертификат удалённого сервера и корневые сертификаты
        kst.load(new FileInputStream("C:\\Dev Tools\\Eclipse workspace\\NBKI-CKKI\\trust17"), "123".toCharArray());

        
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
    	kmf.init(ks,  "123".toCharArray());
    	tmf.init(kst);
    	SSLContext sslContext =  SSLContext.getInstance("GostTLS");

    	sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

    	SSLSocketFactory  sslFact = (SSLSocketFactory)SSLSocketFactory.getDefault();
    	
    	
    	HttpsURLConnection.setDefaultSSLSocketFactory(sslFact);
        URL url = new URL("https://icrs.nbki.ru/signals/list");
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.setHostnameVerifier(new HostnameVerifier()
        {
			public boolean verify(String hostname, SSLSession session) {
				// TODO Auto-generated method stub
				return true;
			}});
        connection.setUseCaches(false);
        connection.setRequestMethod("GET");
        connection.connect();
        int responseCode = connection.getResponseCode();  /// Тут возникает ошибка!
        String responseMesssage = connection.getResponseMessage();
        
        InputStream is = connection.getInputStream();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
        String line;
        String response = "";
        while ((line = rd.readLine()) != null) {
            response += line + "\r\n";
        }
        rd.close();
        is.close();
        System.out.println(response);
        connection.disconnect();



В консоли ошибка
июл 12, 2018 5:42:37 PM ru.CryptoPro.ssl.am a
FINE: THROW
java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at ru.CryptoPro.ssl.w.<init>(Unknown Source)
at ru.CryptoPro.ssl.g.b(Unknown Source)
at ru.CryptoPro.ssl.g.checkServerTrusted(Unknown Source)
at ru.CryptoPro.ssl.x.checkServerTrusted(Unknown Source)
at ru.CryptoPro.ssl.ao.a(Unknown Source)
at ru.CryptoPro.ssl.ao.a(Unknown Source)
at ru.CryptoPro.ssl.f.o(Unknown Source)
at ru.CryptoPro.ssl.f.a(Unknown Source)
at ru.CryptoPro.ssl.am.a(Unknown Source)
at ru.CryptoPro.ssl.am.i(Unknown Source)
at ru.CryptoPro.ssl.am.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
at testapps.TwoWaySSLTester.main(TwoWaySSLTester.java:83)
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at java.security.cert.PKIXParameters.setTrustAnchors(Unknown Source)
at java.security.cert.PKIXParameters.<init>(Unknown Source)
at java.security.cert.PKIXBuilderParameters.<init>(Unknown Source)
... 15 more

Вроде как, сервер удалённый сертификат предъявляет, в хранилище trust17 сертификат сервера присутствует, а выдаёт ошибку
Во вложении журнал обмена
SSL_LOG.txt (23kb) загружен 1 раз(а).

Online afev  
#2 Оставлено : 12 июля 2018 г. 15:38:27(UTC)
afev

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 2,155
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 277 раз в 275 постах
Здравствуйте. в хранилище доверенных сертификатов должны быть корневые сертификаты УЦ, а не сертификат сервера. Нужно добавить сертификат УЦ, издавшего сертификат сервера.
Техническую поддержку оказываем тут
Наша база знаний
Offline stanbel1  
#3 Оставлено : 13 июля 2018 г. 6:18:41(UTC)
stanbel1

Статус: Новичок

Группы: Участники
Зарегистрирован: 15.12.2017(UTC)
Сообщений: 6
Откуда: Москва

Это есть и цепочка строится
Bezymjannyjj.png (6kb) загружен 1 раз(а).
Online afev  
#4 Оставлено : 13 июля 2018 г. 7:43:29(UTC)
afev

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 2,155
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 277 раз в 275 постах
Можете показать пример TwoWaySSLTester?
Техническую поддержку оказываем тут
Наша база знаний
Offline stanbel1  
#5 Оставлено : 13 июля 2018 г. 7:52:10(UTC)
stanbel1

Статус: Новичок

Группы: Участники
Зарегистрирован: 15.12.2017(UTC)
Сообщений: 6
Откуда: Москва

Код:

package testapps;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.URL;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;

public class TwoWaySSLTester {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws  Exception {
/*
        System.setProperty("javax.net.ssl.trustStore", "С:\\Dev Tools\\Eclipse workspace\\NBKI-CKKI\\trust17");
        System.setProperty("javax.net.ssl.trustStoreType", "HDImageStore");
        System.setProperty("javax.net.ssl.trustStoreProvider", "JCP");
        System.setProperty("javax.net.ssl.trustStorePassword", "123");

        System.setProperty("javax.net.ssl.keyStoreType","HDImageStore");
        System.setProperty("javax.net.ssl.keyStorePassword", "123"); 
*/        
		
        System.setProperty("https.proxyHost", "172.18.0.88");
        System.setProperty("https.proxyPort", "3128");
        System.setProperty("http.proxyHost", "172.18.0.88");
        System.setProperty("http.proxyPort", "3128");
        System.setProperty("com.sun.security.enableCRLDP", "true"); // для sun jvm
        System.setProperty("javax.net.ssl.supportGVO", "true");
        
        KeyStore ks = KeyStore.getInstance("HDImageStore", "JCP"); // Тут хранится наш сертификат            
        ks.load(new FileInputStream("C:\\Dev Tools\\Eclipse workspace\\NBKI-CKKI\\bogocert"), "123".toCharArray());
    

        KeyStore kst = KeyStore.getInstance("HDImageStore", "JCP");   // тут хранится сертификат удалённого сервера         
        kst.load(new FileInputStream("C:\\Dev Tools\\Eclipse workspace\\NBKI-CKKI\\trust17"), "123".toCharArray());

        
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
    	kmf.init(ks,  "123".toCharArray());
    	tmf.init(kst);
    	SSLContext sslContext =  SSLContext.getInstance("GostTLS");

    	sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

    	SSLSocketFactory  sslFact = (SSLSocketFactory)SSLSocketFactory.getDefault();
    	
    	
    	HttpsURLConnection.setDefaultSSLSocketFactory(sslFact);
        URL url = new URL("https://icrs.nbki.ru/signals/list"); //signals--icrs
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.setHostnameVerifier(new HostnameVerifier()
        {
			public boolean verify(String hostname, SSLSession session) {
				// TODO Auto-generated method stub
				return true;
			}});
        
        connection.setUseCaches(false);
        connection.setRequestMethod("GET");
        connection.connect();
        int responseCode = connection.getResponseCode();  /// Тут возникает ошибка!
        String responseMesssage = connection.getResponseMessage();
        
        InputStream is = connection.getInputStream();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
        String line;
        String response = "";
        while ((line = rd.readLine()) != null) {
            response += line + "\r\n";
        }
        rd.close();
        is.close();
        System.out.println(response);
        connection.disconnect();
        
        
        
    	if (true) return;  // дальше не выполняем
    	SSLSocket soc = (SSLSocket) sslFact.createSocket("signals.nbki.ru", 443);
    	
    	soc.startHandshake();
    	
        BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(soc.getOutputStream(), "Windows-1251"));
        wr.write("GET list HTTP/1.0\r\n");
        wr.write("Host: signals.nbki.ru");

//        wr.write("");
//       wr.write("\r\n");
        wr.flush();        

        // Get response
        BufferedInputStream bis = new BufferedInputStream(soc.getInputStream());
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int c=0 ;
        boolean flg=false;
        while (true) {                
        c = bis.read();
        if (flg==false) {
        if (c==13) {
            c = bis.read();
            if (c==10) {
                c = bis.read();
                if (c==13) {
                    c = bis.read();
                    if (c==10) {
                        flg=true;
                        continue;
                    }                        
                }                    
            }               
        }
        } //if (!flg)
        if (c == -1) break;
        if (flg) baos.write(c);
        } //while
        
        byte[] bytedata = baos.toByteArray();
        baos.close();
        bis.close(); 
        wr.close();
        String rzxml = new String(bytedata, "windows-1251");                

        
        
    	
    	
	}

}

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.