0

我目前正在使用以下提供商选项测试我的协议合同

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)
        })

当我给出基本网址时,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)

如果我更改 urlhttp:让它进行重定向(我得到重定向状态代码 308)。

https url 是一个自签名的 url,自签名证书存在于我们所有的服务器中。我从任何浏览器或 curl 或通过 express.js 访问 url 都没有问题。

但是,如果我直接在提供程序选项中提供 url,我会收到错误消息。我浏览了协议文档,但找不到任何其他论据。

非常感谢您为克服此问题提供的任何帮助。

谢谢。

更新:问题是在 docker 容器内运行协议。来自容器的请求被内部代理阻止。一旦代理被绕过,它就起作用了。

4

2 回答 2

0

在底层,pact-js 使用“pact-ruby-standalone”。您可以使用环境变量 SSL_CERT_FILE 设置 pact-ruby-standalone 的证书,如下所述:https ://github.com/pact-foundation/pact-ruby-standalone/releases#pact-provider-verifier

于 2020-04-08T01:28:32.813 回答
0

更新

问题是由于主机上的 VPN/代理设置拦截了请求并提供了无效证书。

原帖

虽然 Beth 是正确的,因为我们确实在底层使用了 Ruby 库,但 Pact JS 实际上启动了一个代理,Ruby 独立实际与之交互 - 即 Ruby 与运行 http 的本地 JS 服务器对话,并且代理重新发出请求到服务。所以问题很可能出在 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了解如何帮助我们帮你)。

于 2020-04-08T01:44:37.447 回答