Class: R509::CRL::Administrator
- Inherits:
-
Object
- Object
- R509::CRL::Administrator
- Defined in:
- lib/r509/crl/administrator.rb
Overview
Used to manage revocations and generate CRLs
Instance Attribute Summary (collapse)
-
- (Object) config
readonly
Returns the value of attribute config.
-
- (Object) crl_number
readonly
Returns the value of attribute crl_number.
Instance Method Summary (collapse)
-
- (R509::CRL::SignedList) generate_crl(last_update = Time.at(Time.now.to_i)-@config.crl_start_skew_seconds, next_update = Time.at(Time.now)+@config.crl_validity_hours*3600)
Generate the CRL.
-
- (Administrator) initialize(config, reader_writer = R509::CRL::FileReaderWriter.new)
constructor
A new instance of Administrator.
-
- (Object) revoke_cert(serial, reason = nil, revoke_time = Time.now.to_i, write = true)
Adds a certificate to the revocation list.
-
- (Boolean) revoked?(serial)
Indicates whether the serial number has been revoked, or not.
-
- (Array) revoked_cert(serial)
Serial, reason, revoke_time tuple.
-
- (Array<Array>) revoked_certs
Returns an array of serial, reason, revoke_time tuples.
-
- (Object) unrevoke_cert(serial)
Remove serial from revocation list.
Constructor Details
- (Administrator) initialize(config, reader_writer = R509::CRL::FileReaderWriter.new)
A new instance of Administrator
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/r509/crl/administrator.rb', line 17 def initialize(config,reader_writer=R509::CRL::FileReaderWriter.new) @config = config unless @config.kind_of?(R509::Config::CAConfig) raise R509Error, "config must be a kind of R509::Config::CAConfig" end if not reader_writer.kind_of?(R509::CRL::ReaderWriter) raise ArgumentError, "argument reader_writer must be a subclass of R509::CRL::ReaderWriter" end @rw = reader_writer @rw.crl_list_file = @config.crl_list_file unless not @rw.respond_to?(:crl_list_file=) @rw.crl_number_file = @config.crl_number_file unless not @rw.respond_to?(:crl_number_file=) @crl_number = @rw.read_number @revoked_certs = {} @rw.read_list(self) @crl_md = R509::MessageDigest.new(@config.crl_md) @crl = nil end |
Instance Attribute Details
- (Object) config (readonly)
Returns the value of attribute config
13 14 15 |
# File 'lib/r509/crl/administrator.rb', line 13 def config @config end |
- (Object) crl_number (readonly)
Returns the value of attribute crl_number
13 14 15 |
# File 'lib/r509/crl/administrator.rb', line 13 def crl_number @crl_number end |
Instance Method Details
- (R509::CRL::SignedList) generate_crl(last_update = Time.at(Time.now.to_i)-@config.crl_start_skew_seconds, next_update = Time.at(Time.now)+@config.crl_validity_hours*3600)
Generate the CRL
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/r509/crl/administrator.rb', line 103 def generate_crl(last_update=Time.at(Time.now.to_i)-@config.crl_start_skew_seconds,next_update=Time.at(Time.now)+@config.crl_validity_hours*3600) # Time.at(Time.now.to_i) removes sub-second precision. Subsecond precision is irrelevant # for CRL update times and makes testing harder. crl = create_crl_object(last_update,next_update) self.revoked_certs.each do |serial, reason, revoke_time| revoked = OpenSSL::X509::Revoked.new revoked.serial = OpenSSL::BN.new serial.to_s revoked.time = Time.at(revoke_time) if not reason.nil? enum = OpenSSL::ASN1::Enumerated(reason) ext = OpenSSL::X509::Extension.new("CRLReason", enum) revoked.add_extension(ext) end # now add it to the crl crl.add_revoked(revoked) end crl.sign(@config.crl_cert.key.key, @crl_md.digest) R509::CRL::SignedList.new(crl) end |
- (Object) revoke_cert(serial, reason = nil, revoke_time = Time.now.to_i, write = true)
Adds a certificate to the revocation list. After calling you must call generate_crl to sign a new CRL
reason codes defined by rfc 5280
CRLReason ::= ENUMERATED {
unspecified (0),
keyCompromise (1),
cACompromise (2),
affiliationChanged (3),
superseded (4),
cessationOfOperation (5),
certificateHold (6),
removeFromCRL (8),
privilegeWithdrawn (9),
aACompromise (10) }
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/r509/crl/administrator.rb', line 70 def revoke_cert(serial,reason=nil, revoke_time=Time.now.to_i, write=true) if not reason.nil? if not reason.kind_of?(Integer) or not reason.between?(0,10) or reason == 7 raise ArgumentError, "Revocation reason must be integer 0-10 (excluding 7) or nil" end end serial = serial.to_i revoke_time = revoke_time.to_i if revoked?(serial) raise R509::R509Error, "Cannot revoke a previously revoked certificate" end @revoked_certs[serial] = {:reason => reason, :revoke_time => revoke_time} if write == true @rw.write_list_entry(serial, revoke_time, reason) end nil end |
- (Boolean) revoked?(serial)
Indicates whether the serial number has been revoked, or not.
41 42 43 |
# File 'lib/r509/crl/administrator.rb', line 41 def revoked?(serial) @revoked_certs.has_key?(serial.to_i) end |
- (Array) revoked_cert(serial)
Serial, reason, revoke_time tuple
46 47 48 |
# File 'lib/r509/crl/administrator.rb', line 46 def revoked_cert(serial) @revoked_certs[serial] end |
- (Array<Array>) revoked_certs
Returns an array of serial, reason, revoke_time tuples.
127 128 129 130 131 132 133 |
# File 'lib/r509/crl/administrator.rb', line 127 def revoked_certs ret = [] @revoked_certs.keys.sort.each do |serial| ret << [serial, @revoked_certs[serial][:reason], @revoked_certs[serial][:revoke_time]] end ret end |
- (Object) unrevoke_cert(serial)
Remove serial from revocation list. After unrevoking you must call generate_crl to sign a new CRL
92 93 94 95 96 |
# File 'lib/r509/crl/administrator.rb', line 92 def unrevoke_cert(serial) @revoked_certs.delete(serial) @rw.remove_list_entry(serial) nil end |