pact-foundation / pact-ruby

Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.
https://pact.io
MIT License
2.16k stars 215 forks source link

Publish contracts to broker with self-signed certs #238

Closed eiriarte-mendez closed 3 weeks ago

eiriarte-mendez commented 3 years ago

The hal http_client does not uploads/publishes verified contracts to pact-broker with self signed certificate. Its not possible to get the certificate at the moment but there is also no possibility to disable the ssl-verification.

Publishing contract to pact-broker without certificate works correctly.

Im using: pact-php v7.0.1 pact 1.55.6 (standalone)

Related issue for loading contracts from broker was created here: https://github.com/pact-foundation/pact-support/issues/88

Relevant Logs:

vendor/bin/phpunit --testsuite PactProvider
PHPUnit 9.5.0 by Sebastian Bergmann and contributors.

[2021-02-25T18:00:46.172008+00:00] server.DEBUG: Starting [] []
[2021-02-25T18:00:46.193655+00:00] server.WARNING: Running in production with assertions enabled is not recommended; it has a negative impacton performance. Disable assertions in php.ini (zend.assertions = -1) for best performance or set the debug mode option to hide this warning. [] []
[2021-02-25T18:00:46.204528+00:00] server.WARNING: The 'xdebug' extension is loaded, which has a major impact on performance. [] []
[2021-02-25T18:00:46.283655+00:00] server.DEBUG: Started [] []
[2021-02-25T18:00:46.288913+00:00] server.INFO: Listening on http://127.0.0.1:6873/ [] []
"/project/vendor/pact-foundation/pact-php/src/PhpPact/Standalone/Installer/../../../../pact/bin/pact-provider-verifier https://pact.ci.ratepay.local/pacts/provider/MerchantApiActivationEventProvider/consumer/SaraConsumer/version/3.1.0 --provider-base-url=http://127.0.0.1:6873 --provider-app-version=0.0.0_alpha --publish-verification-results --verbose"
[2021-02-25T18:02:45.833697+00:00] server.DEBUG: Accept 127.0.0.1:47724 on 127.0.0.1:6873 #707 [] []
[2021-02-25T18:02:46.136849+00:00] server.DEBUG: POST http://127.0.0.1:6873/ HTTP/1.1 @ 127.0.0.1:47724 [] []
[2021-02-25T18:02:46.634352+00:00] server.DEBUG: Close 127.0.0.1:47724 #707 [] []
[2021-02-25T18:03:11.996488+00:00] server.WARNING: WARN: Ignoring unsupported combine AND for path $['payload']['request_id']
WARN: Ignoring unsupported combine AND for path $['payload']['action']
WARN: Ignoring unsupported combine AND for path $['payload']['request_id']
WARN: Ignoring unsupported combine AND for path $['payload']['action']
Error making request - OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=error: certificate verify failed , attempt 1 of 3
Error making request - OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=error: certificate verify failed , attempt 2 of 3
Error making request - OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=error: certificate verify failed , attempt 3 of 3
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish.rb:96:in `rescue in publish_verification_results': Failed to publish verification results due to: OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=error: certificate verify failed /project/vendor/pact-foundation/pact-php/pact/lib/ruby/lib/ruby/2.2.0/net/http.rb:923:in `connect' (Pact::Provider::VerificationResults::PublicationError)
/project/vendor/pact-foundation/pact-php/pact/lib/ruby/lib/ruby/2.2.0/net/http.rb:923:in `block in connect'
/project/vendor/pact-foundation/pact-php/pact/lib/ruby/lib/ruby/2.2.0/timeout.rb:74:in `timeout'
/project/vendor/pact-foundation/pact-php/pact/lib/ruby/lib/ruby/2.2.0/net/http.rb:923:in `connect'
/project/vendor/pact-foundation/pact-php/pact/lib/ruby/lib/ruby/2.2.0/net/http.rb:863:in `do_start'
/project/vendor/pact-foundation/pact-php/pact/lib/ruby/lib/ruby/2.2.0/net/http.rb:852:in `start'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/hal/http_client.rb:56:in `block in perform_request'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/retry.rb:23:in `until_true'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/hal/http_client.rb:49:in `perform_request'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/hal/http_client.rb:34:in `post'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/hal/link.rb:61:in `post'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/hal/entity.rb:27:in `post'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish.rb:93:in `publish_verification_results'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish.rb:35:in `call'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish.rb:21:in `call'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish_all.rb:22:in `block in call'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish_all.rb:19:in `collect'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish_all.rb:19:in `call'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish_all.rb:10:in `call'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/rspec/pact_broker_formatter.rb:28:in `close'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.10.0/lib/rspec/core/reporter.rb:209:in `block in notify'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.10.0/lib/rspec/core/reporter.rb:208:in `each'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.10.0/lib/rspec/core/reporter.rb:208:in `notify'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.10.0/lib/rspec/core/reporter.rb:243:in `close'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.10.0/lib/rspec/core/reporter.rb:196:in `close_after'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.10.0/lib/rspec/core/reporter.rb:174:in `finish'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.10.0/lib/rspec/core/reporter.rb:76:in `report'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.10.0/lib/rspec/core/runner.rb:115:in `run_specs'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.10.0/lib/rspec/core/runner.rb:89:in `run'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.10.0/lib/rspec/core/runner.rb:71:in `run'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/pact_spec_runner.rb:90:in `run_specs'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/pact_spec_runner.rb:35:in `run'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/cli/run_pact_verification.rb:70:in `run_with_pact_uri_object'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/cli/run_pact_verification.rb:51:in `run_specs'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/cli/run_pact_verification.rb:21:in `call'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/cli/run_pact_verification.rb:13:in `call'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-verifier-1.32.1/lib/pact/provider_verifier/app.rb:171:in `verify_pact'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-verifier-1.32.1/lib/pact/provider_verifier/app.rb:43:in `block in call'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-verifier-1.32.1/lib/pact/provider_verifier/app.rb:42:in `collect'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-verifier-1.32.1/lib/pact/provider_verifier/app.rb:42:in `call'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-verifier-1.32.1/lib/pact/provider_verifier/app.rb:34:in `call'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-verifier-1.32.1/lib/pact/provider_verifier/cli/verify.rb:47:in `verify'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/thor-0.20.3/lib/thor/command.rb:27:in `run'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/thor-0.20.3/lib/thor/invocation.rb:126:in `invoke_command'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/thor-0.20.3/lib/thor.rb:387:in `dispatch'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/thor-0.20.3/lib/thor/base.rb:466:in `start'
/project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-verifier-1.32.1/lib/pact/provider_verifier/cli/custom_thor.rb:17:in `start'
/project/vendor/pact-foundation/pact-php/pact/lib/app/pact-provider-verifier.rb:33:in `<main>'
        from /project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish.rb:91:in `publish_verification_results'
        from /project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish.rb:35:in `call'
        from /project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish.rb:21:in `call'
        from /project/vendor/pact-foundation/pact-php/pact/lib/vendor/ruby/2.2.0/gems/pact-1.55.6/lib/pact/provider/verification_results/publish_all.rb:22:in `block in call'
        from /pro [] []

Tests\Contract\Provider\ActivationMessageProviderTest
  ⚈INFO: Reading pact at https://pact.ci.ratepay.local/pacts/provider/MerchantApiActivationEventProvider/consumer/SaraConsumer/version/3.1.0

Verifying a pact between SaraConsumer and MerchantApiActivationEventProvider
  An activation event
    has matching content

1 interaction, 0 failures
 it should verify activation message contract from sara [160.766s]

Time: 02:40.994, Memory: 24.00 MB

There was 1 error:

1) Tests\Contract\Provider\ActivationMessageProviderTest::it_should_verify_activation_message_contract_from_sara
Exception: Pact failed to validate.  Exit code: 1

/project/vendor/pact-foundation/pact-php/src/PhpPact/Provider/MessageVerifier.php:222
/project/vendor/amphp/amp/lib/Coroutine.php:118
/project/vendor/amphp/amp/lib/Internal/Placeholder.php:149
/project/vendor/amphp/amp/lib/Deferred.php:52
/project/vendor/amphp/byte-stream/lib/ResourceInputStream.php:109
/project/vendor/amphp/amp/lib/Loop/Driver.php:119
/project/vendor/amphp/amp/lib/Loop/Driver.php:72
/project/vendor/amphp/amp/lib/Loop.php:95
/project/vendor/pact-foundation/pact-php/src/PhpPact/Provider/MessageVerifier.php:229
/project/vendor/pact-foundation/pact-php/src/PhpPact/Standalone/ProviderVerifier/Verifier.php:195
/project/tests/Contract/Provider/ActivationMessageProviderTest.php:63

ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
bethesque commented 3 years ago

Its not possible to get the certificate at the moment but there is also no possibility to disable the ssl-verification.

Have you tried this? https://docs.pact.io/pact_broker/advanced_topics/using-tls/#extracting-a-copy-of-the-certificate-from-a-running-pact-broker

YOU54F commented 3 weeks ago

Looks like this was resolved for our OP

https://github.com/pact-foundation/pact-support/issues/88#issuecomment-2288964471