首页 > 解决方案 > 在协议提供者测试中指定自签名证书

问题描述

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

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 容器内运行协议。来自容器的请求被内部代理阻止。一旦代理被绕过,它就起作用了。

标签: node.jsdatacontractpactpact-node

解决方案


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


推荐阅读