Sto tentando di inviare una richiesta al seguente indirizzo. Il certificato non è valido e vorrei ignorarlo. Ho scritto il seguente codice in base alla mia ricerca su 1, 2 ma non riesco a completarlo. Sto usando Java 1.7,È necessario ignorare il certificato quando si utilizza restTemplate
https://api.stubhubsandbox.com/search/catalog/events/v3
Codice
private static final TrustManager[] UNQUESTIONING_TRUST_MANAGER = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers(){
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType){}
public void checkServerTrusted(X509Certificate[] certs, String authType){}
public void checkClientTrusted(
java.security.cert.X509Certificate[] arg0, String arg1)
throws CertificateException {
// TODO Auto-generated method stub
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] arg0, String arg1)
throws CertificateException {
// TODO Auto-generated method stub
}
}
};
public static void main(String[] args) {
TrustStrategy acceptingTrustStrategy =
SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
.loadTrustMaterial(null, acceptingTrustStrategy)
.build();
SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(csf)
.build();
HttpComponentsClientHttpRequestFactory requestFactory =
new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
String url = "https://api.stubhubsandbox.com/search/catalog/events/v3";
RestTemplate rest = new RestTemplate();
Map<String, String> mvm = new HashMap<String, String>();
mvm.put("Authorization", "Bearer TOKEEEEEEEN");
Object object = rest.postForObject(url, null, Object.class, mvm);
System.err.println("done");
}
Mi manca l'impostazione 'UNQUESTIONING_TRUST_MANAGER' a 'SSLContext' nel tuo codice. –
@MichalFoksa come impostarlo? Inoltre ho jdk 1.7 ma una parte del mio codice è 1.8 non so come risolverlo. –
Si sta forzando un'istanza 'RestTemplate' per accettare certificati autofirmati su RestTemplate restTemplate = new RestTemplate (requestFactory);'. Ma poi hai RestTemplate rest = new RestTemplate(); rest.postForObject (url, null, Object.class, mvm); '. Ciò significa che l'effettiva chiamata REST utilizza un'istanza 'RestTemplate' che non accetta il certificato autofirmato. Se invece si utilizza 'restTemplate.postForObject', la chiamata verrà eseguita. – manish