class Middleman::PreviewServer
def create_self_signed_cert(bits, cn, aliases, comment)
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