Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема запроса с сертификатом на яве / 6 сообщений из 6, страница 1 из 1
29.01.2017, 23:47
    #39394275
зубок александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема запроса с сертификатом на яве
Всем привет. Ошибкаа известная и не новая а вот не выходит каменный цветок.
Раньше с сертификатамии работал только из браузеров а теперь надо программно загрузить. Сертификат на входе p12.

Конвертнул его в crt и потом jks и далее завел собственное хранилище cacerts - ибо в стандартное он не лез ни в ккоом виде- ругань была в стиле на то что сертификат не X.509

Код: 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.
public synchronized void checkForDuplicates(Lei lei) throws Exception{	
		
 		if (readTestXML.readFile("C:\\work\\Docs\\xml_lei_1_duplicate_001.xml"))
		{
		   try
		   {
			 String keyPassphrase = "111111";
			   
			 SSLContext sslContext = SSLContext.getInstance("TLS"); 
		
	 sslContext.init(null, new TrustManager[]{tm}, new java.security.SecureRandom()); 
			   
			// настройки cacerts и прочег везде в статьях по разному применены - сейчас все примерно в таком виде
			 System.setProperty("javax.net.ssl.trustStore", "/work/cacerts");
			 System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
			 System.setProperty("javax.net.ssl.trustStoreType", "JKS");
			   
			 System.setProperty("javax.net.ssl.keyStore", "/work/cert.p12");
			 System.setProperty("javax.net.ssl.keyStorePassword",keyPassphrase);	
			 System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
		
			
		     URL url=new URL(strUrl);
		     
		     KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
		   
		     keyStore.load(new FileInputStream("/work/keystore.jks"), keyPassphrase.toCharArray());		     		     
		     

		     TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
		    		 
		     
		     tmf.init(keyStore);
		     
		   
		     
		     sslContext.init(null, tmf.getTrustManagers(), new java.security.SecureRandom());
		     
		     HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
		     
		     HostnameVerifier allHostsValid = new HostnameVerifier() {
					@Override
					public boolean verify(String hostname, SSLSession session) {						
						return true;
					}
		        };
		     
		     HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
		     		     
		     HttpsURLConnection httpcon=(HttpsURLConnection)url.openConnection();
		     httpcon.setSSLSocketFactory(sslContext.getSocketFactory());
		     httpcon.setDoOutput(true);
		     httpcon.setDoInput(true);
		     httpcon.setUseCaches(false);
		     httpcon.setAllowUserInteraction(false);
	         httpcon.setRequestMethod("POST");	       
	      
	         String authStr = testLeiStr + ":" + pass;
	         httpcon.setRequestProperty  ("Authorization", "Basic " + Base64.getEncoder().encodeToString(authStr.getBytes()));	       
	         httpcon.setConnectTimeout(longOfTimeout);
	         httpcon.setRequestProperty("Accept", "application/json");
	         httpcon.setRequestProperty("Content-Type", "application/json");
// тут сама ошибка проявляется	        
	         OutputStreamWriter output = new OutputStreamWriter(httpcon.getOutputStream());
	         
	         System.out.println(readTestXML.getResStr());
	         httpcon.connect();
	         output.write(readTestXML.getResStr());	         
	         
	         gleifDuplicateCheckJsonRead.readResponceB(httpcon.getResponseMessage());
		   }
		   catch (Exception e)
		   {
			 new Notification(app.getMessage("gleifDuplicate.msgErrorQuestion") + " " + e, Notification.Type.ERROR_MESSAGE).show(Page.getCurrent());
			 log.debug(e.getMessage());
		   }
		}
	}	



Сама ошибка звучит как
Код: java
1.
error javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCer



Как я понимаю сертификат ява надежным не считает. Вне явы из мозиллы и хрома все отилчно работает. Со стороны сервака никто подсказать никогда не сможет - там своя бюрократия - максимум могут скаазать у нас все работает а как выбудете использовать наш сертификат не наша проблема - да вот такая система и все.

Собственно хтелось бы знать как лечить данную ошибку. Проблема в настройказ хранилища, конвертации или коде и если в коде то где?
...
Рейтинг: 0 / 0
30.01.2017, 00:43
    #39394289
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема запроса с сертификатом на яве
...
Рейтинг: 0 / 0
31.01.2017, 00:23
    #39395051
зубок александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема запроса с сертификатом на яве
Спасибо, эффект тот же

По сути код мало чем отличается от моего разве только для свойст исполььщуется динамический объект.

И еще при конвертации сертификата и добавленни его в хранилище наблюдается также весьма инетресный эффект (сегодня переносил все в ресурсы проекта и снова переконвертировал все)

вот сама строка конвертации keytool -import -v -alias eqs -file keystore.jks -keystore C:\Users\azubok\git\lei\src\main\resources\cert\cacerts

А вот ошибка

Код: java
1.
2.
3.
4.
5.
6.
Keytool-Fehler: java.lang.Exception: Eingabe kein X.509-Zertifikat
java.lang.Exception: Eingabe kein X.509-Zertifikat
                at sun.security.tools.keytool.Main.addTrustedCert(Main.java:2655)
                at sun.security.tools.keytool.Main.doCommands(Main.java:1009)
                at sun.security.tools.keytool.Main.run(Main.java:343)
                at sun.security.tools.keytool.Main.main(Main.java:336)


Как я понимаю проблема связана с предидущей.

И вообщем то хотелось ы понимать проблема все же моего кода или проблема в том что сертификат не пригоден для конвертации в формат явы - как явствует из статей в инете именно для явы требуется эта самая конвертация.Тот же пхп похволяет использовать оригинальный сертификат.
...
Рейтинг: 0 / 0
31.01.2017, 13:12
    #39395406
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема запроса с сертификатом на яве
зубок александрСама ошибка звучит как
Код: plaintext
1.
2.
error javax.net.ssl.SSLHandshakeException:
 sun.security.validator.ValidatorException:
  PKIX path building failed: sun.security.provider.certpath.SunCer
Как я понимаю сертификат ява надежным не считает.Перевожу: "Не могу построить цепочку доверия (до корневого УЦ)".
В хранилище, с которым работает тул, должен быть импортирован сертификат корневого УЦ.
Цепочка сертификатов может храниться в контейнере (небезопасно) или сертификат корневого УЦ ищется ручками.

P.S. Взял на себя смелость заменить тэг и форматирование на более адекватные.
...
Рейтинг: 0 / 0
31.01.2017, 19:18
    #39395828
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема запроса с сертификатом на яве
зубок александрВсем привет. Ошибкаа известная и не новая а вот не выходит каменный цветок.

Возьмите мой работающий пример. Сертификаты сгенирите вот этим кодом

https://github.com/SVyatkin/tomcat-ssl-java-example/blob/master/scripts/generateClientServerSSCerts.sh


Все подробно расписано и главное работает

https://vyatkins.wordpress.com/2013/11/19/java-base-ssl-connection-to-tomcat-with-server-and-client-certifications/
...
Рейтинг: 0 / 0
01.02.2017, 18:13
    #39396616
зубок александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема запроса с сертификатом на яве
Basil A. Sidorov,

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


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