cryptcheck/spec/cryptcheck/tls/cert_spec.rb

53 lines
1.8 KiB
Ruby
Raw Normal View History

2017-01-29 22:54:21 +00:00
require 'faketime'
2017-01-22 19:06:14 +00:00
describe CryptCheck::Tls::Cert do
def load_chain(chain)
2017-01-29 22:54:21 +00:00
chain.collect { |f| ::OpenSSL::X509::Certificate.new File.read "spec/resources/#{f}.crt" }
2017-01-22 19:06:14 +00:00
end
describe '::trusted?' do
2017-01-29 22:54:21 +00:00
it 'must accept valid certificate' do
2017-01-29 23:28:28 +00:00
FakeTime.freeze Time.utc(2000, 1, 1) do
2017-01-29 22:54:21 +00:00
cert, *chain, ca = load_chain %w(ecdsa-prime256v1 intermediate ca)
trust = ::CryptCheck::Tls::Cert.trusted? cert, chain, roots: ca
expect(trust).to eq :trusted
end
2017-01-22 19:06:14 +00:00
end
it 'must reject self signed certificate' do
cert, ca = load_chain %w(self-signed ca)
2017-01-29 22:54:21 +00:00
trust = ::CryptCheck::Tls::Cert.trusted? cert, [], roots: ca
2017-01-22 19:06:14 +00:00
expect(trust).to eq 'self signed certificate'
end
it 'must reject unknown CA' do
2017-01-29 22:54:21 +00:00
cert, *chain = load_chain %w(ecdsa-prime256v1 intermediate ca)
2017-01-22 19:06:14 +00:00
trust = ::CryptCheck::Tls::Cert.trusted? cert, chain, roots: []
expect(trust).to eq 'unable to get issuer certificate'
end
it 'must reject missing intermediate chain' do
2017-01-29 22:54:21 +00:00
cert, ca = load_chain %w(ecdsa-prime256v1 ca)
chain = []
trust = ::CryptCheck::Tls::Cert.trusted? cert, chain, roots: ca
2017-01-22 19:06:14 +00:00
expect(trust).to eq 'unable to get local issuer certificate'
end
2017-01-29 22:54:21 +00:00
it 'must reject expired certificate' do
2017-01-29 23:28:28 +00:00
FakeTime.freeze Time.utc(2002, 1, 1) do
2017-01-29 22:54:21 +00:00
cert, *chain, ca = load_chain %w(ecdsa-prime256v1 intermediate ca)
trust = ::CryptCheck::Tls::Cert.trusted? cert, chain, roots: ca
expect(trust).to eq 'certificate has expired'
end
end
it 'must reject not yet valid certificate' do
2017-01-29 23:28:28 +00:00
FakeTime.freeze Time.utc(1999, 1, 1) do
2017-01-29 22:54:21 +00:00
cert, *chain, ca = load_chain %w(ecdsa-prime256v1 intermediate ca)
trust = ::CryptCheck::Tls::Cert.trusted? cert, chain, roots: ca
expect(trust).to eq 'certificate is not yet valid'
end
end
2017-01-22 19:06:14 +00:00
end
end