Documentum Rest Service - доверие SSL-сертификата от клиента Java

Мне нужно принять SSL-сертификат, включенный для URL-адреса веб-службы REST (https: /: / dctm-rest), из автономного приложения Java (которое будет упаковано как JAR).

Насколько мне известно, лучший способ - это создать KeyStore / TrustStore с помощью Keytool, загрузить сертификат из браузера / openssl и добавить его в TrustStore. При этом мы создаем зависимость, и кто-то должен обновлять сертификат при каждом обновлении.

Может ли кто-нибудь помочь мне реализовать это, удалив ручную зависимость?

 pedrofb28 июн. 2016 г., 21:12
1) если сертификат сервера находится в JRE cacerts, то нет необходимости устанавливать trustsore 2) я думаю, что ваш сервер возвращает ответ xml или html, а не json. Убедитесь, что вы установилиapplication/json тип контента вAccept заголовок и запись ответа для просмотра содержимого
 Santhosh28 июн. 2016 г., 17:41
1. После отладки я обнаружил, что Documentum Connection успешно использует URL-адрес «https» и не добавляет Truststore. 2. Возникает исключение при отправке запроса в Webservice с помощью resttemplate.exchange (). 3. Я попытался правильно добавить местоположение для TrustStore с помощью system.setproperty, но я вижу ниже ошибку, вызванную: com.fasterxml.jackson. core.JsonParseException: неожиданный символ ('<' (код 60)): ожидаемое допустимое значение (число, строка, массив, объект, «истина», «ложь» или «ноль»)

Ответы на вопрос(1)

Решение Вопроса

https://dctm-rest в белый список вашей JRE (склад доверенных сертификатов)

Опции

1)Включите сертификат сервера в JRE trustore (jre/lib/security/cacerts) (Не рекомендуется)

Чтобы загрузить сертификат сервера, откройте сайт в браузере, щелкните правой кнопкой мыши зеленый замок, выберите «просмотреть сертификат» и загрузите.

Самый простой способ исследовать cacerts и импортировать доверенный сертификат - использовать инструмент с графическим интерфейсом, такой как portecle (http://portecle.sourceforge.net/). Вы также можете использовать keytool

keytool -import -trustcacerts -keystore /opt/java/jre/lib/security/cacerts -alias mycert -noprompt -storepass changeit -file /tmp/examplecert.crt

УвидетьКак правильно импортировать самоподписанный сертификат в хранилище ключей Java, которое по умолчанию доступно всем приложениям Java?

2)Используйте свой собственный склад доверенных сертификатов и включите сертификат сервера (рекомендуемые)

System.setProperty ("javax.net.ssl.trustStore", path_to_your_trustore_jks_file);
System.setProperty ("javax.net.ssl.trustStorePassword", "password");

Вы также можете создать SSLSocketFactory и добавить к своему соединению перед соединением или применить ко всем соединениям, используя статический метод.

HttpsURLConnection.setDefaultSSLSocketFactory(sslFactory);

Это пример создания фабрики сокетов

//Load JKS keystore that includes the server certificate or the root
KeyStore keyStore = ... 
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, tmf.getTrustManagers(), null);
sslFactory = ctx.getSocketFactory();

3)Не используйте доверенные хранилища вообще (Не рекомендуется вообще)

УвидетьОтключить SSLHandshakeException для одного соединения (Я не буду копировать решение)

 Santhosh28 июн. 2016 г., 17:44
Конечно, приятель, но я нашел другую проблему и след исключений. Вы можете помочь?
 Santhosh23 июн. 2016 г., 21:21
Еще раз спасибо, согласен с вами в потреблении корневой цепочки. Просто хочу знать, можем ли мы программно извлечь сертификат с сайта https и добавить его в мое хранилище ключей? Таким образом, мы можем избежать ручной зависимости?
 pedrofb23 июн. 2016 г., 19:00
на самом деле вам нужно будет только распространить корневой сертификат. Обычно они выпускаются с длительным сроком годности
 pedrofb28 июн. 2016 г., 07:58
Здравствуйте, @Santhost, если этот или любой ответ решил ваш вопрос, пожалуйста, примите его, нажав на галочку. Это указывает более широкому сообществу, что вы нашли решение, и дает некоторую репутацию как ответчику, так и вам. Там нет обязательств сделать это.
 Santhosh23 июн. 2016 г., 17:16
Спасибо pedrofb за подробные параметры, даже я склонен к вариантам 1 / 2. Если я не ошибаюсь, кто-то должен обновлять TrustStore для каждого обновления сертификата, в противном случае он попадет в исключение рукопожатия SSL, которое вызывает ручную работу. Мой компонент представляет собой файл Jar, который будет использоваться другим веб-приложением, размещенным в diff env, и не хочет делать его сложным / зависящим от вручную в зависимости от даты истечения срока действия сертификата.
 pedrofb23 июн. 2016 г., 23:21
Это было бы возможно. Даже просто скачать обновление хранилища ключей. Но обновление файла во внешней системе может стать головной болью. Рассмотрите возможность использования доверенного CA, который в настоящее время находится в JDK cacerts

Ваш ответ на вопрос