Получение «невозможно найти действительный путь сертификации к запрошенной цели» в интеграционном тестеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Получение «невозможно найти действительный путь сертификации к запрошенной цели» в интеграционном тесте

Сообщение Anonymous »


Я пытаюсь использовать Wiremock для имитации ответов двух разных API в интеграционном тесте. Чтобы внести ясность, у меня есть микросервис Spring Boot, который использует еще два API (bible-api.com и jsonplaceholder.typicode.com), после чего я присоединяюсь к двум ответам и отправляю их обратно клиенту. Это всего лишь POC, чтобы научиться использовать Wiremock с несколькими доменами. Итак, мне нужно, чтобы Wiremock вмешался и ответил вместо bible-api.com и jsonplaceholder.typicode.com. Мой интеграционный тест выглядит следующим образом:

package me.brunosantana.wiremock.integration; импортировать com.github.tomakehurst.wiremock.WireMockServer; импортировать com.github.tomakehurst.wiremock.client.WireMock; импортировать com.github.tomakehurst.wiremock.http.JvmProxyConfigurer; импортировать jakarta.annotation.Resource; импортируйте меня.brunosantana.wiremock.util.FileReaderUtil; импортировать org.junit.jupiter.api.Test; импортировать org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; импортировать org.springframework.boot.test.context.SpringBootTest; импортировать org.springframework.http.HttpHeaders; импортировать org.springframework.test.web.servlet.MockMvc; импортировать org.springframework.test.web.servlet.request.MockMvcRequestBuilders; импортировать org.springframework.test.web.servlet.result.MockMvcResultHandlers; импортировать org.springframework.test.web.servlet.result.MockMvcResultMatchers; импортировать java.io.IOException; импортировать java.net.URISyntaxException; импортировать статический com.github.tomakehurst.wiremock.client.WireMock.*; импортировать статический com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; импортировать статический io.restassured.RestAssured.given; импортировать статический org.hamcrest.Matchers.equalTo; импортировать статический org.hamcrest.Matchers.is; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) @AutoConfigureMockMvc общественный класс IntegrationTest { @Ресурс MockMvc /*@Тест общественный недействительный testApiIntegrationTest () { данный() .когда() .get("http://localhost:8080/albums/1/bible/john/3/16") .затем() .log().all() .statusCode(200) .body("album.albumId", is(1)) .body("album.photos[0].title", equalTo("accusamus beatae ad facilis cum similique qui sunt")) .body("bible.reference",qualTo("Иоанна 3:16")); }*/ @Тест public void testApi() выдает исключение { //НАСТРАИВАТЬ FileReaderUtil fileReaderUtil = новый FileReaderUtil (); String body1 = fileReaderUtil.read("jsonplaceholder-response.json"); String body2 = fileReaderUtil.read("bible-response.json"); WireMockServer WireMockServer = новый WireMockServer (опции() .enableBrowserProxying(истина) .dynamicPort() .dynamicHttpsPort() //.httpsПорт(443) .trustAllProxyTargets(истина) ); WireMockServer.start(); JvmProxyConfigurer.configureFor(wireMockServer); WireMockServer.stubFor(get("/albums/1/photos") //.withScheme("https") .withHost(WireMock.equalTo("jsonplaceholder.typicode.com")) .withПорт(443) .willReturn(aResponse() .withStatus(200) .withHeader("Тип контента", "приложение/json") .withBody(body1))); WireMockServer.stubFor(get(urlPathMatching(".+\s.+")) //.withScheme("https") .withHost(WireMock.equalTo("bible-api.com")) .withПорт(443) .willReturn(aResponse() .withStatus(200) .withHeader("Тип контента", "приложение/json") .withBody(body2))); //ТЕСТ ockMvc.perform(MockMvcRequestBuilders.get("http://localhost:8080/albums/1/bible/john/3/16") .содержание("{}") .headers(новые HttpHeaders())) .andExpect(MockMvcResultMatchers.status().is2xxSuccessful()) .andDo(MockMvcResultHandlers.print()) .и вернуться(); //СРЫВАТЬ WireMockServer.stop(); JvmProxyConfigurer.restorePrevious(); } } Но когда я запускаю код, я получаю следующее исключение:

Вызвано: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели Я пытался использовать MockMvc и Rest Assured для выполнения запроса, но всегда получал одно и то же исключение. Кажется, проблема в том, что я использую как внешние API, используя https, так и JVM нужны сертификаты внутри хранилища ключей/cacert. Я уже пытался импортировать сертификаты разными способами, например, процесс получения сертификата библейского веб-сайта будет таким:

1 – загрузить сертификат в формате .pem

openssl s_client -showcerts -connect bible-api.com:443 -servername bible-api.com bible-api.com.pem 2 – конвертировать в .cer

openssl x509 -inform PEM -in bible-api.com.pem -outform DER -out bible-api.com.cer 3- импортируйте .cer в хранилище ключей

keytool -import -alias bible -keystore cacerts -file bible-api.com.cer Я также попробовал, например, этот скрипт:

#!/bin/sh # cacerts.sh openssl s_client -showcerts -connect $1:443 /dev/null | openssl x509 -outform PEM > /tmp/$1.pem /some/path/here/corretto-17.0.5/bin/keytool -import -trustcacerts -file /tmp/$1.pem -alias $1 -keystore /some/path/here/corretto-17.0.5/lib/security/ сертификаты РМ /tmp/$1.pem Чтобы запустить его:

./cacerts.sh bible-api.com Конечно, я повторил процедуру для другого домена (jsonplaceholder.typicode.com). Ничего не помогло! Я почти уверен, что импортирую сертификаты в cacerts, относящиеся к JDK, который использую для запуска теста.

Если вы хотите запустить мой код, он находится в этом репозитории на GitHub.

Кто-нибудь знает, почему я все еще получаю сообщение об ошибке?

Спасибо!
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»