Сами мы не умные

Dec 14, 2020 12:52

Есть приложение на адроид, написано на java. Есть сервер, с которым оно соединяется по https.
Соединяется вот таким кодом
код на java )

линукс, памятка, программирование, андроид

Leave a comment

Re: code kosenko_danila December 14 2020, 13:31:19 UTC
Я умею пользоваться гуглом и яндексом.
Первоначально код функции выглядел так:

public String getStr(String link){

String resultJson = "";

try{

URL url = new URL(link);

HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
con.setRequestMethod( "GET" );

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null,null,null);
/*sslContext.init(null, new TrustManager[] {
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; }
}
}, null);*/
/* TrustManager[] trustManagers = new TrustManager[] {
new X509TrustManager() {

public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}

public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException { }

public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException
{}

}
};*/
HostnameVerifier hostnameVerifier = new HostnameVerifier() {

public boolean verify(String s, SSLSession sslSession) {
return s.equals(sslSession.getPeerHost());
}
};
con.setHostnameVerifier(hostnameVerifier);

// sslContext.init(null, trustManagers, null);
con.setSSLSocketFactory(sslContext.getSocketFactory());

int responseCode = con.getResponseCode();
InputStream inputStream;
if (responseCode == HttpsURLConnection.HTTP_OK) {
inputStream = con.getInputStream();
} else {
inputStream = con.getErrorStream();
}

// Process the response
StringBuffer buffer = new StringBuffer();
BufferedReader reader;
String line = null;
reader = new BufferedReader( new InputStreamReader( inputStream ) );
while( ( line = reader.readLine() ) != null )
{
buffer.append(line);
//alert( line );
}
resultJson = buffer.toString();
inputStream.close();

}catch(Exception e){
//alert(e.toString());
Log.e("+++++++++++++++", e.toString());

return "-1";

}
return resultJson;

}

Я просто скрыл закомментированную часть. Когда эта часть была доступна, гугл.маркет не давал залить к себе, ругаясь, что X509TrustManager небезопасен.

Эти ссылки я читал. Но так и не понял, что именно надо сделать на сервере.

Reply

RE: Re: code craftwr December 14 2020, 14:42:49 UTC
Не проходит проверка промежуточных сертификатов на сервере, грубо говоря, надо создать цепочку доверенных сертификатов.

Reply

Re: code kosenko_danila December 14 2020, 14:47:42 UTC
Тут выше человек вроде пытается помочь, но моих знаний, увы, мало для понимания.

Reply

Re: code craftwr December 14 2020, 14:58:10 UTC
Это не твоя проблема, скажи сисдадминам пусть создадут цепочку сертификатов по линку там все есть.

Reply

Re: code kosenko_danila December 14 2020, 14:59:55 UTC
https://kosenko-danila.livejournal.com/292496.html?thread=3649936#t3649936

>однако, сайт цепочку отдаёт, значит дело не в этом.

Reply

Re: code kosenko_danila December 15 2020, 10:52:29 UTC
Обновил пост.

Reply

RE: Re: code craftwr December 15 2020, 10:53:59 UTC
Ну что и следовало ожидать.

Reply


Leave a comment

Up