Укажите самоподписанный сертификат при тестировании поставщика пакта

В настоящее время я тестирую свои пакт-контракты, используя следующие варианты поставщиков

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.

Здесь может произойти несколько вещей:

  1. Где-то в библиотеке есть проблема
  2. Есть проблема с конфигурацией, где нам нужно разобраться в
  3. В сертификате 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

Другие вопросы по тегам