Skip to content

Commit fd1cb18

Browse files
authored
Merge pull request #7417 from joshcooper/60x_mergeup
Merge 5.5.x to 6.0.x
2 parents a741240 + 5dc1cb7 commit fd1cb18

File tree

2 files changed

+9
-25
lines changed

2 files changed

+9
-25
lines changed

lib/puppet/util/ssl.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,11 @@ def self.handle_connection_error(error, verifier, host)
7070
# can be nil
7171
peer_cert = verifier.peer_certs.last
7272

73-
if peer_cert && !OpenSSL::SSL.verify_certificate_identity(peer_cert, host)
73+
if error.message.include? "certificate verify failed"
74+
msg = error.message
75+
msg << ": [" + verifier.verify_errors.join('; ') + "]"
76+
raise Puppet::Error, msg, error.backtrace
77+
elsif peer_cert && !OpenSSL::SSL.verify_certificate_identity(peer_cert, host)
7478
valid_certnames = [peer_cert.subject.to_s.sub(/.*=/, ''),
7579
*Puppet::SSL::Certificate.subject_alt_names_for(peer_cert)].uniq
7680
if valid_certnames.size > 1
@@ -81,10 +85,6 @@ def self.handle_connection_error(error, verifier, host)
8185

8286
msg = _("Server hostname '%{host}' did not match server certificate; %{expected_certnames}") % { host: host, expected_certnames: expected_certnames }
8387
raise Puppet::Error, msg, error.backtrace
84-
elsif !verifier.verify_errors.empty?
85-
msg = error.message
86-
msg << ": [" + verifier.verify_errors.join('; ') + "]"
87-
raise Puppet::Error, msg, error.backtrace
8888
else
8989
raise error
9090
end

spec/unit/network/http/connection_spec.rb

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
WebMock.enable!
7979
end
8080

81-
it "should provide a useful error message when one is available and certificate validation fails in ruby 2.4 and up" do
81+
it "should provide a useful error message when one is available and certificate validation fails", :unless => Puppet::Util::Platform.windows? do
8282
connection = Puppet::Network::HTTP::Connection.new(
8383
host, port,
8484
:verify => ConstantErrorValidator.new(:fails_with => 'certificate verify failed',
@@ -89,32 +89,16 @@
8989
end.to raise_error(Puppet::Error, /certificate verify failed: \[shady looking signature\]/)
9090
end
9191

92-
it "should provide a helpful error message when hostname does not match server certificate before ruby 2.4", :unless => RUBY_PLATFORM == 'java' do
92+
it "should provide a helpful error message when hostname was not match with server certificate", :unless => Puppet::Util::Platform.windows? || RUBY_PLATFORM == 'java' do
9393
Puppet[:confdir] = tmpdir('conf')
9494

9595
connection = Puppet::Network::HTTP::Connection.new(
9696
host, port,
9797
:verify => ConstantErrorValidator.new(
98-
:fails_with => "hostname 'myserver' does not match the server certificate",
98+
:fails_with => 'hostname was not match with server certificate',
9999
:peer_certs => [Puppet::TestCa.new.generate('not_my_server',
100100
:subject_alt_names => 'DNS:foo,DNS:bar,DNS:baz,DNS:not_my_server')[:cert]]))
101-
expect do
102-
connection.get('request')
103-
end.to raise_error(Puppet::Error) do |error|
104-
error.message =~ /\AServer hostname 'my_server' did not match server certificate; expected one of (.+)/
105-
expect($1.split(', ')).to match_array(%w[DNS:foo DNS:bar DNS:baz DNS:not_my_server not_my_server])
106-
end
107-
end
108-
109-
it "should provide a helpful error message when hostname does not match server certificate in ruby 2.4 or greater" do
110-
Puppet[:confdir] = tmpdir('conf')
111101

112-
connection = Puppet::Network::HTTP::Connection.new(
113-
host, port,
114-
:verify => ConstantErrorValidator.new(
115-
:fails_with => "certificate verify failed",
116-
:peer_certs => [Puppet::TestCa.new.generate('not_my_server',
117-
:subject_alt_names => 'DNS:foo,DNS:bar,DNS:baz,DNS:not_my_server')[:cert]]))
118102
expect do
119103
connection.get('request')
120104
end.to raise_error(Puppet::Error) do |error|
@@ -133,7 +117,7 @@
133117
end.to raise_error(/some other message/)
134118
end
135119

136-
it "should check all peer certificates for upcoming expiration", :unless => RUBY_PLATFORM == 'java' do
120+
it "should check all peer certificates for upcoming expiration", :unless => Puppet::Util::Platform.windows? || RUBY_PLATFORM == 'java' do
137121
Puppet[:confdir] = tmpdir('conf')
138122
cert = Puppet::TestCa.new.generate('server',
139123
:subject_alt_names => 'DNS:foo,DNS:bar,DNS:baz,DNS:server')[:cert]

0 commit comments

Comments
 (0)