Я пытаюсь отправить запрос по следующему адресу. Сертификат недействителен, и я хотел бы проигнорировать его. Я написал следующий код, основанный на моих исследованиях по 1, 2, но я не могу его завершить. Я использую Java 1.7,Необходимо игнорировать сертификат при использовании restTemplate
https://api.stubhubsandbox.com/search/catalog/events/v3
код
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");
}
Я скучаю по настройке 'UNQUESTIONING_TRUST_MANAGER' в 'SSLContext' в вашем коде. –
@MichalFoksa как установить это? Также у меня есть jdk 1.7, но часть моего кода 1,8 не уверен, как его исправить. –
Вы вынуждаете экземпляр 'RestTemplate' принимать самозаверяющие сертификаты в' RestTemplate restTemplate = new RestTemplate (requestFactory); '. Но тогда у вас есть RestTemplate rest = new RestTemplate(); rest.postForObject (url, null, Object.class, mvm); '. Это означает, что в действительном вызове REST используется экземпляр 'RestTemplate', который не принимает самозаверяющий сертификат. Если вместо этого вы используете 'restTemplate.postForObject', ваш звонок будет проходить. – manish