Skip to content

Instantly share code, notes, and snippets.

@macros
Created February 26, 2014 20:59

Revisions

  1. macros created this gist Feb 26, 2014.
    31 changes: 31 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,31 @@
    #!/usr/bin/ruby

    require 'openssl'

    cert = OpenSSL::X509::Certificate.new File.read(ARGV[0])
    cn = cert.subject.to_a.select{|oid, value| oid == "CN"}[0][1]

    puts "Cert metadata"
    puts cert.serial
    puts cert.issuer
    puts cert.not_before
    puts cert.not_after
    puts cert.signature_algorithm
    puts cert.to_s
    puts "Public key metadata"
    puts cert.public_key.class
    puts cert.public_key.to_s


    sans = []
    cert.extensions.each do |ext|
    next if ext.oid != "subjectAltName"
    ostr = OpenSSL::ASN1.decode(ext.to_der).value.last
    sequence = OpenSSL::ASN1.decode(ostr.value)
    sequence.value.each do |san|
    sans << san.value
    end
    end

    puts "CN: #{cn}"
    puts "SANS: #{sans.join(', ')}"