mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
79 lines
2.7 KiB
Ruby
79 lines
2.7 KiB
Ruby
![]() |
require "bundler/setup"
|
||
|
require "puma"
|
||
|
require "puma/minissl"
|
||
|
|
||
|
case ARGV[0]
|
||
|
|
||
|
when "s"
|
||
|
|
||
|
app = proc {|env|
|
||
|
p env['puma.peercert']
|
||
|
[200, {}, [ env['puma.peercert'] ]]
|
||
|
}
|
||
|
events = Puma::Events.new($stdout, $stderr)
|
||
|
server = Puma::Server.new(app, events)
|
||
|
|
||
|
context = Puma::MiniSSL::Context.new
|
||
|
context.key = "certs/server.key"
|
||
|
context.cert = "certs/server.crt"
|
||
|
context.ca = "certs/ca.crt"
|
||
|
#context.verify_mode = Puma::MiniSSL::VERIFY_NONE
|
||
|
#context.verify_mode = Puma::MiniSSL::VERIFY_PEER
|
||
|
context.verify_mode = Puma::MiniSSL::VERIFY_PEER | Puma::MiniSSL::VERIFY_FAIL_IF_NO_PEER_CERT
|
||
|
|
||
|
server.add_ssl_listener("127.0.0.1", 4000, context)
|
||
|
|
||
|
server.run
|
||
|
sleep
|
||
|
#server.stop(true)
|
||
|
|
||
|
when "g"
|
||
|
|
||
|
def issue_cert(dn, key, serial, not_before, not_after, extensions, issuer, issuer_key, digest)
|
||
|
cert = OpenSSL::X509::Certificate.new
|
||
|
issuer = cert unless issuer
|
||
|
issuer_key = key unless issuer_key
|
||
|
cert.version = 2
|
||
|
cert.serial = serial
|
||
|
cert.subject = dn
|
||
|
cert.issuer = issuer.subject
|
||
|
cert.public_key = key.public_key
|
||
|
cert.not_before = not_before
|
||
|
cert.not_after = not_after
|
||
|
ef = OpenSSL::X509::ExtensionFactory.new
|
||
|
ef.subject_certificate = cert
|
||
|
ef.issuer_certificate = issuer
|
||
|
extensions.each{|oid, value, critical|
|
||
|
cert.add_extension(ef.create_extension(oid, value, critical))
|
||
|
}
|
||
|
cert.sign(issuer_key, digest)
|
||
|
cert
|
||
|
end
|
||
|
|
||
|
@ca_key = OpenSSL::PKey::RSA.generate(2048)
|
||
|
@svr_key = OpenSSL::PKey::RSA.generate(2048)
|
||
|
@cli_key = OpenSSL::PKey::RSA.generate(2048)
|
||
|
@ca = OpenSSL::X509::Name.parse("/DC=net/DC=client-cbhq/CN=CA")
|
||
|
@svr = OpenSSL::X509::Name.parse("/DC=net/DC=client-cbhq/CN=localhost")
|
||
|
@cli = OpenSSL::X509::Name.parse("/DC=net/DC=client-cbhq/CN=localhost")
|
||
|
now = Time.at(Time.now.to_i)
|
||
|
ca_exts = [
|
||
|
["basicConstraints","CA:TRUE",true],
|
||
|
["keyUsage","cRLSign,keyCertSign",true],
|
||
|
]
|
||
|
ee_exts = [
|
||
|
#["keyUsage","keyEncipherment,digitalSignature",true],
|
||
|
["keyUsage","keyEncipherment,dataEncipherment,digitalSignature",true],
|
||
|
]
|
||
|
@ca_cert = issue_cert(@ca, @ca_key, 1, now, now+3600_000, ca_exts, nil, nil, OpenSSL::Digest::SHA1.new)
|
||
|
@svr_cert = issue_cert(@svr, @svr_key, 2, now, now+1800_000, ee_exts, @ca_cert, @ca_key, OpenSSL::Digest::SHA1.new)
|
||
|
@cli_cert = issue_cert(@cli, @cli_key, 3, now, now+1800_000, ee_exts, @ca_cert, @ca_key, OpenSSL::Digest::SHA1.new)
|
||
|
|
||
|
File.open("ca.crt","wb"){|f| f.print @ca_cert.to_pem }
|
||
|
File.open("ca.key","wb"){|f| f.print @ca_key.to_pem }
|
||
|
File.open("server.crt","wb"){|f| f.print @svr_cert.to_pem }
|
||
|
File.open("server.key","wb"){|f| f.print @svr_key.to_pem }
|
||
|
File.open("client1.crt","wb"){|f| f.print @cli_cert.to_pem }
|
||
|
File.open("client1.key","wb"){|f| f.print @cli_key.to_pem }
|
||
|
end
|