Class: Dap::Filter::FilterDecodeX509

Inherits:
Object
  • Object
show all
Includes:
BaseDecoder
Defined in:
lib/dap/filter/openssl.rb

Instance Attribute Summary

Attributes included from Base

#name, #opts

Instance Method Summary collapse

Methods included from BaseDecoder

#process

Methods included from Base

#initialize, #process

Instance Method Details

#decode(data) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/dap/filter/openssl.rb', line 9

def decode(data)
  save = {}
  cert = OpenSSL::X509::Certificate.new(data) rescue nil
  return unless cert 

  dnames = []
  cert.subject.to_s.split("/").each do |bit|
    var,val = bit.split("=", 2)
    next unless (var and val)
    var = var.to_s.downcase.strip
    save["s_#{var}"] = val 
    if var == "cn"
      dnames << val
    end
  end

  cert.issuer.to_s.split("/").each do |bit|
    var,val = bit.split("=", 2)
    next unless (var and val)
    var = var.to_s.downcase.strip
    save["i_#{var}"] = val 
  end

  cert.extensions.each do |e|
    next unless e.to_s =~ /^([^\s]+)\s*=\s*(.*)/
    var,val = $1,$2
    var = var.to_s.downcase.strip
    save["e_#{var}"] = val.strip

    if var == "subjectaltname"
      val.split(",").map{|x| x.gsub("DNS:", "").gsub("IP:", "").gsub("email:", "").strip }.each do |name|
        dnames << name
      end
    end

  end

  save["names"] = dnames
  save
end