Укажите самозаверяющий сертификат в тестировании pact провайдера - PullRequest
0 голосов
/ 07 апреля 2020

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

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-адрес непосредственно в настройках провайдера, я получу сообщение об ошибке. Я просмотрел документацию по пакту и не смог найти никаких дополнительных аргументов.

Любая помощь в преодолении этой проблемы высоко ценится.

Спасибо.

Обновление : проблема заключалась в запуске pact внутри контейнера docker. Запросы из контейнера блокировались внутренним прокси-сервером. Как только прокси был обойден, он заработал.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

ОБНОВЛЕНИЕ :

Проблема была связана с настройками VPN / прокси на хосте, который перехватывал запрос и представлял недействительный сертификат.

ОРИГИНАЛ POST :

Хотя Бет и права, поскольку мы используем эту библиотеку 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, чтобы узнать, как помочь нам помочь вам).

0 голосов
/ 08 апреля 2020

Под капотом pact- js используется "pact- ruby -standalone". Вы можете установить сертификат для pact- ruby -standalone, используя переменные среды SSL_CERT_FILE, как описано здесь: https://github.com/pact-foundation/pact-ruby-standalone/releases#pact -provider-verifyier

...