powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / https запрос с невалидным сертификатом
15 сообщений из 15, страница 1 из 1
https запрос с невалидным сертификатом
    #37117356
maratische
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю https запрос к локальному вебсерверу с невалидным сертификатом, получаю ошибку

автор sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
можно ли это обойти без прописывания чего бы то ни было на компьютере пользователя?
те как подменить этот класс, занимающийся валидацией
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #37117388
eros2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
TrustManager[] trustAllCerts =  new  TrustManager[] {
     new  X509TrustManager() {
        @Override
         public  java.security.cert.X509Certificate[] getAcceptedIssuers() {
             return   null ;
        }
        @Override
         public   void  checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) {
        }
        @Override
         public   void  checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) {
        }
    }
};

SSLContext sc = SSLContext.getInstance("SSL");
sc.init( null , trustAllCerts,  new  java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(  new  HostnameVerifier() {
    @Override
     public   boolean  verify(String hostname, SSLSession session) {
         return  true;
    }
} );
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #37117414
maratische
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eros2,

хмм, а еще чуть чуть кода, который дальше идет можно? в моем случае это не работает.
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #37117456
eros2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maratische,

Это всё, и этого достаточно.
Первый класс убирает проверки сертификатов, второй доверяет всем хостнеймам.

Какая дальше ошибка у вас?
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #37117482
maratische
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eros2,

Error sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

собственное
Код: plaintext
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.
 public   class  ServiceSSLHttpAccess  extends  BaseCheckService {

	 public   static  String getCode() {
		 return  "SSL_HTTP_ACCESS";
	}

	@Override
	 public   boolean  execute(Credentials credentials) {
		TrustManager[] trustAllCerts =  new  TrustManager[] {  new  X509TrustManager() {
			@Override
			 public  java.security.cert.X509Certificate[] getAcceptedIssuers() {
				System.out.println("getAcceptedIssuers");
				 return   null ;
			}

			@Override
			 public   void  checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
				System.out.println("checkClientTrusted");
			}

			@Override
			 public   void  checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
				System.out.println("checkServerTrusted");
			}
		} };

		SSLContext sc;
		 try  {
			sc = SSLContext.getInstance("SSL");
			sc.init( null , trustAllCerts,  new  java.security.SecureRandom());
			HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
			HttpsURLConnection.setDefaultHostnameVerifier( new  HostnameVerifier() {
				@Override
				 public   boolean  verify(String hostname, SSLSession session) {
					System.out.println("verify");
					 return  true;
				}
			});
		}  catch  (NoSuchAlgorithmException e1) {
			e1.printStackTrace();
		}  catch  (KeyManagementException e) {
			e.printStackTrace();
		}

		HttpClient httpClient =  new  DefaultHttpClient();
		HttpGet getMethod =  new  HttpGet(getService().getStringField1());
		HttpResponse responce;
		 this .setServiceImplStatus(ServiceImplStatus.ERROR);
		 try  {
			responce = httpClient.execute(getMethod);
			 if  (responce.getStatusLine().getStatusCode() ==  200 ) {
				 return  returnTrue();
			}
		}  catch  (Exception e) {
			System.out.println("Error " + e.getMessage());
		}
		 return  returnFalse();
	}
}
сейчас весь стек еще выведу в консоль

я System.out.println навтыкал, ни один не отработал
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #37117495
maratische
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maratische,

автор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 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1623)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:198)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:192)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1074)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:128)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:529)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:465)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1120)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:623)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at org.apache.http.impl.io.AbstractSessionOutputBuffer.flushBuffer(AbstractSessionOutputBuffer.java:131)
at org.apache.http.impl.io.AbstractSessionOutputBuffer.flush(AbstractSessionOutputBuffer.java:138)
at org.apache.http.impl.conn.LoggingSessionOutputBuffer.flush(LoggingSessionOutputBuffer.java:95)
at org.apache.http.impl.AbstractHttpClientConnection.doFlush(AbstractHttpClientConnection.java:270)
at org.apache.http.impl.AbstractHttpClientConnection.flush(AbstractHttpClientConnection.java:275)
at org.apache.http.impl.conn.AbstractClientConnAdapter.flush(AbstractClientConnAdapter.java:197)
at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:258)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:622)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:454)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:700)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:625)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:603)
at checkresources.service.ServiceSSLHttpAccess.execute(ServiceSSLHttpAccess.java:71)
at checkresources.desktop.gui.ServicePanelCheckAccess.doCheck(ServicePanelCheckAccess.java:55)
at checkresources.desktop.gui.ServicePanelCheckAccess.credentialsEntered(ServicePanelCheckAccess.java:50)
at checkresources.desktop.gui.TypeAccessPanel.login(TypeAccessPanel.java:79)
at checkresources.desktop.gui.TypeAccessPanel.access$0(TypeAccessPanel.java:74)
at checkresources.desktop.gui.TypeAccessPanel$1.actionPerformed(TypeAccessPanel.java:32)
at javax.swing.JTextField.fireActionPerformed(JTextField.java:492)
at javax.swing.JTextField.postActionEvent(JTextField.java:705)
at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:820)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1633)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2851)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2886)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2814)
at java.awt.Component.processEvent(Component.java:6044)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676)
at java.awt.Component.dispatchEventImpl(Component.java:4502)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
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:325)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:219)
at sun.security.validator.Validator.validate(Validator.java:218)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1053)
... 54 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:320)
... 60 more
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #37117542
eros2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ха, мой код для стандартного HttpsURLConnection, а апачевский клиент этот коннекшн явно не юзает.

Значит вам нужно смотреть что-то подобное именно для apache http.
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #37117556
maratische
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eros2,

действительно, заменил на стандартный и получил уже 401 ошибку, результат, пошел курить как тут использовать авторизацию

Код: plaintext
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.
 public   class  ServiceSSLHttpAccess  extends  BaseCheckService {

	 public   static  String getCode() {
		 return  "SSL_HTTP_ACCESS";
	}

	@Override
	 public   boolean  execute(Credentials credentials) {
		TrustManager[] trustAllCerts =  new  TrustManager[] {  new  X509TrustManager() {
			@Override
			 public  java.security.cert.X509Certificate[] getAcceptedIssuers() {
				System.out.println("getAcceptedIssuers");
				 return   null ;
			}

			@Override
			 public   void  checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
				System.out.println("checkClientTrusted");
			}

			@Override
			 public   void  checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
				System.out.println("checkServerTrusted");
			}
		} };

		SSLContext sc;
		 try  {
			sc = SSLContext.getInstance("SSL");
			sc.init( null , trustAllCerts,  new  java.security.SecureRandom());
			HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
			HttpsURLConnection.setDefaultHostnameVerifier( new  HostnameVerifier() {
				@Override
				 public   boolean  verify(String hostname, SSLSession session) {
					System.out.println("verify");
					 return  true;
				}
			});
		}  catch  (NoSuchAlgorithmException e1) {
			e1.printStackTrace();
		}  catch  (KeyManagementException e) {
			e.printStackTrace();
		}

		URL myurl;
		 try  {
			myurl =  new  URL(getService().getStringField1());
		    HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
		    InputStream ins = con.getInputStream();
		    InputStreamReader isr =  new  InputStreamReader(ins);
		    BufferedReader in =  new  BufferedReader(isr);

		    String inputLine;

		     while  ((inputLine = in.readLine()) !=  null )
		    {
		      System.out.println(inputLine);
		    }

		    in.close();
			 return  returnTrue();
		}  catch  (MalformedURLException e) {
			e.printStackTrace();
		}  catch  (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 return  returnFalse();
	}
}
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #37117584
eros2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maratischeпошел курить как тут использовать авторизацию
Код: plaintext
1.
2.
3.
4.
5.
6.
URLConnection uc = u.openConnection();
String userPassword = login + ":" + password;
String encoding = Base64.encode( userPassword, "UTF-8", false ).toString();
uc.setRequestProperty( "Authorization", "Basic " + encoding );
InputStream istr = uc.getInputStream();
// ...
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #37117745
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maratische,

Так сертификат-то какой-то есть или вообще нет никакого?
Может быть это подойдёт?
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #37117750
maratische
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrickmaratische,

Так сертификат-то какой-то есть или вообще нет никакого?
Может быть это подойдёт?
есть, работает пример, который выше.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
https запрос с невалидным сертификатом
    #37867729
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня похожая трабла, но дело имею с мылом
Java особо сильно не знаю, но кое-что умею
вылетает ошибка
Код: java
1.
2.
3.
javax.mail.MessagingException: Could not convert socket to TLS;
  nested exception is:
	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


для этого какое-то лекарство есть?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
https запрос с невалидным сертификатом
    #39613381
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eros2
Код: 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.
TrustManager[] trustAllCerts = new TrustManager[] {
    new X509TrustManager() {
        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }
        @Override
        public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) {
        }
        @Override
        public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) {
        }
    }
};

SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
} );


спасибо через 7 лет.
очень полезное решение оказалось сейчас, когда сайты стали часто менять сертификаты.
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #39613418
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogel,

Так, к слову, это очень стремное решение. Во-первых оно делает ваше приложение уязвимым к атакам через поддельные сервера, а во-вторых при использовании в JEE ещё и к утечке classloader-а приводит.
...
Рейтинг: 0 / 0
https запрос с невалидным сертификатом
    #39613720
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczFogel,

Так, к слову, это очень стремное решение. Во-первых оно делает ваше приложение уязвимым к атакам через поддельные сервера, а во-вторых при использовании в JEE ещё и к утечке classloader-а приводит.

не спорю в масштабах вселенной.
всё относительно.

приложение лезет на сайт по ссылке и забирает файл в автоматическом режиме. и всё.
потом уже с этим файлом дальнейшая работа, закрытая от посторонних глаз.
никто это приложение не атакует, и сайт, куда лезть, строго определён.
а когда на сайте часто обновляют сертификат, чтобы постоянно его не заносить в keystore, такое решение отрабатывает на ура без лишних заморочек.

это не web-приложение, ждущее запросов клиента, оно само по себе, запускается единоразово скриптом и после обработки файла завершается.

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


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