mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-20 10:50:08 +03:00
Merge branch 'feature-1790'
This commit is contained in:
commit
a5b0be6d57
@ -2,3 +2,6 @@
|
||||
# the server, each CA certificate shoud be name CA_hash.0
|
||||
|
||||
#:ca_dir: "/etc/one/auth/certificates"
|
||||
|
||||
# Uncoment this line if you want to force crl checking
|
||||
#:check_crl: true
|
||||
|
@ -199,7 +199,6 @@ private
|
||||
###########################################################################
|
||||
def validate
|
||||
now = Time.now
|
||||
failed = "Could not validate user credentials: "
|
||||
|
||||
# Check start time and end time of certificates
|
||||
@cert_chain.each do |cert|
|
||||
@ -213,6 +212,8 @@ private
|
||||
# Validate the proxy certifcates
|
||||
signee = @cert_chain[0]
|
||||
|
||||
check_crl(signee)
|
||||
|
||||
@cert_chain[1..-1].each do |cert|
|
||||
if !((signee.issuer.to_s == cert.subject.to_s) &&
|
||||
(signee.verify(cert.public_key)))
|
||||
@ -247,4 +248,41 @@ private
|
||||
raise
|
||||
end
|
||||
end
|
||||
|
||||
def check_crl(signee)
|
||||
failed = "Could not validate user credentials: "
|
||||
|
||||
ca_hash = signee.issuer.hash.to_s(16)
|
||||
ca_path = @options[:ca_dir] + '/' + ca_hash + '.0'
|
||||
|
||||
crl_path = @options[:ca_dir] + '/' + ca_hash + '.r0'
|
||||
|
||||
if !File.exist?(crl_path)
|
||||
if @options[:check_crl]
|
||||
raise failed + "CRL file #{crl_path} does not exist"
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
ca_cert = OpenSSL::X509::Certificate.new( File.read(ca_path) )
|
||||
crl_cert = OpenSSL::X509::CRL.new( File.read(crl_path) )
|
||||
|
||||
# First verify the CRL itself with its signer
|
||||
unless crl_cert.verify( ca_cert.public_key ) then
|
||||
raise failed + "CRL is not verified by its Signer"
|
||||
end
|
||||
|
||||
# Extract the list of revoked certificates from the CRL
|
||||
rc_array = crl_cert.revoked
|
||||
|
||||
# Loop over the list and compare with the target personal
|
||||
# certificate
|
||||
rc_array.each do |e|
|
||||
if e.serial.eql?(signee.serial) then
|
||||
raise failed + "#{signee.subject.to_s} is found in the "<<
|
||||
"CRL, i.e. it is revoked"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user