class Middleman::PreviewServer

def create_self_signed_cert(bits, cn, aliases, comment)

avoid errors in Firefox. Also doesn't print out stuff to $stderr unnecessarily.
that uses a different serial number each time the cert is generated in order to
Copy of https://github.com/nahi/ruby/blob/webrick_trunk/lib/webrick/ssl.rb#L39
def create_self_signed_cert(bits, cn, aliases, comment)
  rsa = OpenSSL::PKey::RSA.new(bits)
  cert = OpenSSL::X509::Certificate.new
  cert.version = 2
  cert.serial = Time.now.to_i % (1 << 20)
  name = OpenSSL::X509::Name.new(cn)
  cert.subject = name
  cert.issuer = name
  cert.not_before = Time.now
  cert.not_after = Time.now + (365 * 24 * 60 * 60)
  cert.public_key = rsa.public_key
  ef = OpenSSL::X509::ExtensionFactory.new(nil, cert)
  ef.issuer_certificate = cert
  cert.extensions = [
    ef.create_extension('basicConstraints', 'CA:FALSE'),
    ef.create_extension('keyUsage', 'keyEncipherment'),
    ef.create_extension('subjectKeyIdentifier', 'hash'),
    ef.create_extension('extendedKeyUsage', 'serverAuth'),
    ef.create_extension('nsComment', comment)
  ]
  aki = ef.create_extension('authorityKeyIdentifier',
                            'keyid:always,issuer:always')
  cert.add_extension(aki)
  cert.add_extension ef.create_extension('subjectAltName', aliases.map { |d| "DNS: #{d}" }.join(','))
  cert.sign(rsa, OpenSSL::Digest::SHA1.new)
  [cert, rsa]
end