Skip to content

Commit c0ff78f

Browse files
committed
(maint) Avoid hardcoding cert fingerprints
Avoid hardcoding cert fingerprints so we can automate cert regeneration.
1 parent 9ab6c32 commit c0ff78f

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

spec/unit/application/agent_spec.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,11 +546,16 @@
546546
@puppetd.options[:digest] = :MD5
547547
end
548548

549+
def expected_fingerprint(name, x509)
550+
digest = OpenSSL::Digest.new(name).hexdigest(x509.to_der)
551+
digest.scan(/../).join(':').upcase
552+
end
553+
549554
it "should fingerprint the certificate if it exists" do
550555
cert = cert_fixture('signed.pem')
551556
allow_any_instance_of(Puppet::X509::CertProvider).to receive(:load_client_cert).and_return(cert)
552557

553-
expect(@puppetd).to receive(:puts).with('(MD5) E2:BA:9A:EF:20:A8:7D:10:8D:82:9A:61:5D:FD:5B:33')
558+
expect(@puppetd).to receive(:puts).with("(MD5) #{expected_fingerprint('md5', cert)}")
554559

555560
@puppetd.fingerprint
556561
end
@@ -560,7 +565,7 @@
560565
allow_any_instance_of(Puppet::X509::CertProvider).to receive(:load_client_cert).and_return(nil)
561566
allow_any_instance_of(Puppet::X509::CertProvider).to receive(:load_request).and_return(request)
562567

563-
expect(@puppetd).to receive(:puts).with('(MD5) B8:4C:FB:31:AE:17:86:E3:AD:53:97:CA:F6:3C:4A:CB')
568+
expect(@puppetd).to receive(:puts).with("(MD5) #{expected_fingerprint('md5', request)}")
564569

565570
@puppetd.fingerprint
566571
end

spec/unit/ssl/state_machine_spec.rb

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@
3131
allow(Kernel).to receive(:sleep)
3232
end
3333

34+
def expected_digest(name, content)
35+
OpenSSL::Digest.new(name).hexdigest(content)
36+
end
37+
38+
def to_fingerprint(digest)
39+
digest.scan(/../).join(':').upcase
40+
end
41+
3442
context 'when passing keyword arguments' do
3543
it "accepts digest" do
3644
expect(described_class.new(digest: 'SHA512').digest).to eq('SHA512')
@@ -395,29 +403,35 @@ def expect_lockfile_to_contain(pid)
395403

396404
it 'verifies CA cert bundle if a ca_fingerprint is given case-insensitively' do
397405
Puppet[:log_level] = :info
398-
machine = described_class.new(digest: 'SHA256', ca_fingerprint: 'caacf69bbbcdad9dbcda92dd2da3608b639d1aea4c314d6cc6823cdb32d8e0f8')
406+
407+
digest = expected_digest('SHA256', cacert_pem)
408+
fingerprint = to_fingerprint(digest)
409+
machine = described_class.new(digest: 'SHA256', ca_fingerprint: digest.downcase)
399410
state = Puppet::SSL::StateMachine::NeedCACerts.new(machine)
400411
state.next_state
401412

402-
expect(@logs).to include(an_object_having_attributes(message: "Verified CA bundle with digest (SHA256) CA:AC:F6:9B:BB:CD:AD:9D:BC:DA:92:DD:2D:A3:60:8B:63:9D:1A:EA:4C:31:4D:6C:C6:82:3C:DB:32:D8:E0:F8"))
413+
expect(@logs).to include(an_object_having_attributes(message: "Verified CA bundle with digest (SHA256) #{fingerprint}"))
403414
end
404415

405416
it 'verifies CA cert bundle using non-default fingerprint' do
406417
Puppet[:log_level] = :info
407-
machine = described_class.new(digest: 'SHA512', ca_fingerprint: '3c9d1482b878913ad95c9631feac5090cb05c6eab9496178d6fd5c14a023da3b1a8650a3cbaac516d9a48caf0b0742e1ed7eebf55105c024c74834a45056a9d9')
418+
419+
digest = expected_digest('SHA512', cacert_pem)
420+
machine = described_class.new(digest: 'SHA512', ca_fingerprint: digest)
408421
state = Puppet::SSL::StateMachine::NeedCACerts.new(machine)
409422
state.next_state
410423

411-
expect(@logs).to include(an_object_having_attributes(message: "Verified CA bundle with digest (SHA512) 3C:9D:14:82:B8:78:91:3A:D9:5C:96:31:FE:AC:50:90:CB:05:C6:EA:B9:49:61:78:D6:FD:5C:14:A0:23:DA:3B:1A:86:50:A3:CB:AA:C5:16:D9:A4:8C:AF:0B:07:42:E1:ED:7E:EB:F5:51:05:C0:24:C7:48:34:A4:50:56:A9:D9"))
424+
expect(@logs).to include(an_object_having_attributes(message: "Verified CA bundle with digest (SHA512) #{to_fingerprint(digest)}"))
412425
end
413426

414427
it 'returns an error if verification fails' do
415428
machine = described_class.new(digest: 'SHA256', ca_fingerprint: 'wrong!')
416429
state = Puppet::SSL::StateMachine::NeedCACerts.new(machine)
417430

431+
fingerprint = to_fingerprint(expected_digest('SHA256', cacert_pem))
418432
st = state.next_state
419433
expect(st).to be_an_instance_of(Puppet::SSL::StateMachine::Error)
420-
expect(st.message).to eq("CA bundle with digest (SHA256) CA:AC:F6:9B:BB:CD:AD:9D:BC:DA:92:DD:2D:A3:60:8B:63:9D:1A:EA:4C:31:4D:6C:C6:82:3C:DB:32:D8:E0:F8 did not match expected digest WR:ON:G!")
434+
expect(st.message).to eq("CA bundle with digest (SHA256) #{fingerprint} did not match expected digest WR:ON:G!")
421435
end
422436
end
423437
end

0 commit comments

Comments
 (0)