Как настроить Spring RestTemplate с SSL (в Spring @MVC)

Я хочу настроить мое приложение Spring @MVC заглушки Spring RestTemplate с SSL для связи с REST base https, которое развернуто на сервере Tomcat (Spring 3, Tomcat 7). Я до сих пор выполнял свои работы ссылку на эту ссылку. Теперь я не знаю, как использовать эти сгенерированные сертификаты с Spring RestTemplate. Может ли кто-нибудь понять, пожалуйста, помогите мне. Благодарю. До сих пор все, что я сделал,

//Spring Конфигурации безопасности xml

   <http>
    <intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https"/>      
    <http-basic/></http> 

//Конфигурации для включения SSL с помощью Tomcat

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="200"
    scheme="https" secure="true" SSLEnabled="true"
    keystoreFile="C:\Users\Channa\.keystore" keystorePass="changeit"
    clientAuth="false" sslProtocol="TLS"/>

Для создания ключей, сертификатов и т.д.

//Создаем ключи клиента и сервера:

F:\jdk1.6.0_23\bin > keytool -genkey -keystore keystore_client -alias clientKey -dname "CN = localhost, OU = Dev, O = MyBusiness, L = Colombo, S = Westen, C = SL" < ш > F:\jdk1.6.0_23\bin > keytool -genkey -keystore keystore_server -alias serverKey -dname "CN = localhost, OU = Dev, O = MyBusiness, L = Colombo, S = Westen, C = SL"

//Создание сертификатов клиентов и серверов:

F:\jdk1.6.0_23\bin > keytool -export -alias clientKey -rfc -keystore keystore_client > client.cert F:\jdk1.6.0_23\bin > keytool -export -alias serverKey -rfc -keystore keystore_server > server.cert

//Импорт сертификатов в соответствующие магазины доверия:

F:\jdk1.6.0_23\bin > keytool -import -alias clientCert -file client.cert -keystore truststore_server F:\jdk1.6.0_23\bin > keytool -import -alias serverCert -file server.cert -keystore truststore_client

//Spring Конфигурации RestTemplate

  

<!--Http client-->
<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
    <constructor-arg ref="httpClientParams"/>
    <property name="state" ref="httpState"/>
</bean>

<!--Http state-->
<bean id="httpState" class="com.org.imc.test.stub.http.CustomHttpState">
    <property name="credentials" ref="usernamePasswordCredentials"/>
</bean>

<!--User name password credentials-->
<bean id="usernamePasswordCredentials" class="org.apache.commons.httpclient.UsernamePasswordCredentials"/>

<!--Http client-->
<bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory">
    <constructor-arg ref="httpClient"/>
</bean>

<!--RestTemplate-->
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <constructor-arg ref="httpClientFactory"/>
</bean>

//URL-адрес Https для доступа

ResponseEntity<User> rECreateUser = restTemplate.postForEntity("https://127.0.0.1:8443/skeleton-1.0/login", user, User.class);

//Исключение в настоящий момент:

org.springframework.web.client.ResourceAccessException: ошибка ввода-вывода: sun.security.validator.ValidatorException: не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запрошенной цели; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запрошенной цели

Ответ 1

Это связано с тем, что сертификат SSL вызываемой службы не подписан доверенным центром сертификации. Обходной путь заключается в том, чтобы импортировать сертификат в хранилище доверия сертификатов (cacerts) вашей JRE.

  • загрузите сертификат, открыв URL-адрес в браузере, щелкните блокировку значок в адресной строке браузера.
  • Как только у вас есть .cer файл, выполните следующую команду

    keytool -import -keystore jdk1.8.0_77/jre/lib/security/cacerts -file ~/test.cer -alias test