# File lib/smart_proxy_abrt/abrt_lib.rb, line 77
  def self.cert_names(request)
    client_cert = request.env['SSL_CLIENT_CERT']
    raise AbrtProxy::Error::Unauthorized, "Client certificate required" if client_cert.to_s.empty?

    begin
      client_cert = OpenSSL::X509::Certificate.new(client_cert)
    rescue OpenSSL::OpenSSLError => e
      raise AbrtProxy::Error::CertificateError, e.message
    end

    begin
      cn = client_cert.subject.to_a.find { |name, value| name == 'CN' }
      names = [cn[1]]
    rescue NoMethodError
      raise AbrtProxy::Error::CertificateError, "Common Name not found in the certificate"
    end

    alt_name_ext = client_cert.extensions.find { |ext| ext.oid == 'subjectAltName' }
    if alt_name_ext
      names += alt_name_ext.value.
                            split(/, ?/).
                            select { |s| s.start_with? 'URI:CN=' }.
                            map { |s| s.sub(/^URI:CN=/, '') }
    end

    return names
  end