Укажите самоподписанный сертификат при тестировании поставщика пакта
В настоящее время я тестирую свои пакт-контракты, используя следующие варианты поставщиков
let opts = {
provider: "api",
providerBaseUrl: "https://my-domain.com",
pactUrls: [
path.resolve(
process.cwd(),
"./pacts/pact-api.json"
),
],
validateSSL: false,
changeOrigin: true,
providerVersion: "1.0.0"
}
return new Verifier(opts).verifyProvider().then(output => {
console.log("Pact Verification Complete!")
console.log(output)
})
Когда я даю базовый URL как https
Я получаю следующую ошибку:
Uncaught Error: write EPROTO 140574248376192:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332:
at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:92:16)
Если я изменю URL на http:
он выполняет перенаправление (я получаю код статуса перенаправления 308).
URL-адрес https - это самоподписанный URL-адрес, а самозаверяющий сертификат присутствует на всех наших серверах. У меня нет проблем с доступом к URL-адресу из любого браузера, curl или через express.js.
Но если я укажу URL-адрес непосредственно в параметрах поставщика, я получаю сообщение об ошибке. Я просмотрел документацию пакта и не смог найти никаких дополнительных аргументов.
Любая помощь в решении этой проблемы приветствуется.
Спасибо.
Обновление: проблема заключалась в запуске пакта внутри контейнера докеров. Запросы от контейнера блокировались внутренним прокси. После обхода прокси он заработал.
2 ответа
ОБНОВЛЕНИЕ:
Проблема возникла из-за настроек VPN/ прокси на хосте, который перехватил запрос и предоставил недействительный сертификат.
ОРИГИНАЛЬНАЯ СТАТЬЯ:
Хотя Бет права в том, что мы используем эту библиотеку Ruby под капотом, Pact JS фактически запускает прокси, с которым фактически взаимодействует автономный Ruby, то есть Ruby разговаривает с локальным сервером JS, на котором запущен http, и прокси повторно выдает запрос к сервису. Так что проблема, скорее всего, в структуре Pact JS.
Здесь может произойти несколько вещей:
- Где-то в библиотеке есть проблема
- Есть проблема с конфигурацией, где нам нужно разобраться в
- В сертификате TLS есть что-то особенное
Не могли бы вы обновить отчет об ошибке на https://github.com/pact-foundation/pact-js/issues/429?
Нам понадобятся журналы и другая информация, чтобы разобраться в этом (см. https://github.com/pact-foundation/pact-js/blob/master/.github/issue_template.md, чтобы узнать, как нам помочь. помочь тебе).
Под капотом pact-js использует "pact-ruby-standalone". Вы можете установить сертификат для pact-ruby-standalone, используя переменные среды SSL_CERT_FILE, как описано здесь: https://github.com/pact-foundation/pact-ruby-standalone/releases