Используемое программное обеспечение: IBM WAS 7.0.0.41, JDK 6
Java-код:
JSONTNRequest jsonRequestBean = new JSONTNRequest(xmlRequest.getServiceInstanceId(), "FOO");
String jsonRequest = beanToJSON(jsonRequestBean);
StringEntity params = null;
try {
params = new StringEntity(jsonRequest);
logger.info("json request was created");
} catch (UnsupportedEncodingException e) {
logger.error("Exception: ", e);
}
HttpPost request = new HttpPost(MineProperties.getRestserviceUrl());
request.addHeader("content-type", "application/json");
request.setEntity(params);
String xmlOutput = null;
HttpClient client = null;
String jsonOutput = null;
try {
client = HttpClientBuilder.create().build();
logger.info("build was completed");
} catch (Exception e) {
logger.error("Exception: ", e);
}
try {
HttpResponse response = client.execute(request);
HttpEntity httpEntity = response.getEntity();
jsonOutput = EntityUtils.toString(httpEntity);
JSONObject json = new JSONObject(jsonOutput);
xmlOutput = XML.toString(json);
} catch (Exception e) {
logger.error("failed previous attempt, now with different one");
HttpURLConnection httpConn;
try {
URL url = new URL("https://fo.bar/rest_uri");
URLConnection conn = url.openConnection();
httpConn = (HttpURLConnection) conn;
if (httpConn.getResponseCode() == 200) {
System.out.println("das ist gut");
} else {
System.out.println("das ist nich gut: " + httpConn.getResponseCode());
}
System.out.println("------------------------all is ok");
} catch (MalformedURLException e) {
logger.info("------------------------mal: ", e);
} catch (IOException e) {
logger.error("------------------------ioe: ",e);
}
}
- Установлен сертификат: Безопасность / SSL-сертификат и управление ключами / Хранилища ключейи сертификаты / NodeDefaultTrustStore / Сертификаты подписчика / Добавить
Этот параметр
Добавить
был использован, поскольку
* 1018Опция * Retrieve from port
привела к тому же sslhandshake_failure, это заставляет меня думать, что java-код не плохой, и это очевидно, потому что я тестировал свой код из моего локального в простой JSE, не привязанный кСервер приложений и даже не нужно было устанавливать сертификат в JDK, и он работал, мой локальный и где серверы приложений IBM WAS принадлежат к разным доменам.
Тест подключения, откуда IBM WAS (всеиз них работали как положено):
- telnet на порт 443 работал
- open_ssl работал
- curl с запросом json получил ответ json, поэтому он работал
Отслеживание:
Опция для отслеживания проблем, связанных с SLL, была также включена:
trobuleshooting / Журналы и трассировка / SERVER / Диагностическая трассировка / Время выполнения / Подробный журнал изменений / leves /
com.ibm.websphere. * com.ibm.websphere.ssl *
Нотиг печатается там при получении этой проблемы SSL.
В файле: ss.client.props у нас есть:
com.ibm.ssl.protocol=TLSv1.2
Тот же сценарий был протестирован с другой конечной точкой REST (другой домен, запрос / ответ json), и с первой попытки сертификат был импортирован веб-консолью WAS, нет необходимости загружать его с URL-адреса.