/ / SSLPeerUnverifiedException (Unirest) - java, https, ssl-сертификат, unirest

SSLPeerUnverifiedException (Unirest) - java, https, ssl-сертификат, unirest

Аз съм нов, който се занимава с API (официални и неофициални) и използвам един, наречен JavaSnap, Аз съм се забъркал с много основно изпълнение на примера код, но са в грешки.Тук е много основен код:

Snapchat snapchat = Snapchat.login("xxxx", "xxxxx");

Най-напред се натъкнах на много грешки ClassNotFoundи трябваше да продължим да изтегляме модулите на apache (commons, httpcomponents и т.н.), за да позволим на програмата да се развива, но като класни файлове това означаваше, че не мога да видя наведнъж какви модули имах нужда да изтегля.Така че ако някой иска да ми каже колко грешно правя нещо, чувствам се свободно.

Както и да е, сега, след като изясних всички изключения от ClassNotFound (надявам се), получавам следното изключение:

com.mashape.unirest.http.exceptions.UnirestException: javax.net.ssl.SSLPeerUnverifiedException: Host name "feelinsonice-hrd.appspot.com" does not match the certificate subject provided by the peer (CN=*.appspot.com, O=Google Inc, L=Mountain View, ST=California, C=US)
at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:146)
at com.mashape.unirest.request.BaseRequest.asJson(BaseRequest.java:68)
at com.habosa.javasnap.Snapchat.requestJson(Snapchat.java:953)
at com.habosa.javasnap.Snapchat.login(Snapchat.java:160)
at Tester.go(Tester.java:21)

Както разбирам, това е така, защото трябва да го направяпозволявам да се доверявам на всички сертификати, но за да направя това, вярвам, че ще трябва да използвам HostNameVerifiers с SSLSocketFactorys, но не мога да започна да се забърквам с това, защото имам само източника за JavaSnap API и проследяването на грешката стека на най-новия метод, който е на разположение за мен да редактирам, е следният:

private static HttpResponse<JsonNode> requestJson(String path, Map<String, Object> params, File file) throws UnirestException {
MultipartBody req = prepareRequest(path, params, file);

// Execute and return response as JSON
HttpResponse<JsonNode> resp = req.asJson();

// Record
lastRequestPath = path;
lastResponse = resp;
lastResponseBodyClass = JsonNode.class;

return resp;

Моят въпрос е, всъщност съм в правилната посока с мисленето си?
Ако съм така, как мога да постигна целта си за премахване на тези грешки / доверителни сертификати? Ако не съм тогава какво всъщност е проблемът?

Много благодаря

Отговори:

1 за отговор № 1

Отговоря на този стар въпрос, за да си спомня моето търсене решението за грешка в сертификатите е комбинация от няколко места


import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;

import javax.net.ssl.SSLContext;
import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;

import org.apache.http.client.HttpClient;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;

import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;

public class XXX {

private static HttpClient unsafeHttpClient;

static {
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy() {
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true;
}
}).build();

unsafeHttpClient = HttpClients.custom().setSSLContext(sslContext)
.setSSLHostnameVerifier(new NoopHostnameVerifier()).build();

} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
e.printStackTrace();
}
}

public static HttpClient getClient() {
return unsafeHttpClient;
}

public static void main(String[] args) {

try {
HttpClient creepyClient = RestUnirestClient.getClient();
Unirest.setHttpClient(creepyClient);

HttpResponse<JsonNode> response = Unirest.get("https://httpbin.org/get?show_env=1").asJson();
System.out.println(response.getBody().toString());

} catch (UnirestException e) {
e.printStackTrace();
}
}
}