misc_rbtools/fake_tunnel_connector/ssl.rb

58 lines
1.3 KiB
Ruby
Raw Normal View History

2020-07-22 01:00:20 -05:00
require 'openssl'
class SSL
def initialize; end
def generate_cert
key = generate_keypair(2048)
name = OpenSSL::X509::Name.parse('/CN=nobody/DC=example')
cert = OpenSSL::X509::Certificate.new
cert.version = 2
cert.serial = 0
cert.not_before = Time.now
cert.not_after = Time.now + 3600
cert.public_key = key.public_key
cert.subject = name
[cert, name, key]
2020-07-22 02:12:48 -05:00
end
def generate_keypair(size)
key = generate_key(size)
open 'private_key.pem', 'w' do |io| io.write key.to_pem end
open 'public_key.pem', 'w' do |io| io.write key.public_key.to_pem end
key
end
2020-07-22 01:00:20 -05:00
def generate_key(size)
OpenSSL::PKey::RSA.new size
end
def load_key(path, passphrase = nil)
if passphrase
OpenSSL::PKey::RSA.new(File.read(path), passphrase)
else
OpenSSL::PKey::RSA.new(File.read(path))
end
end
# sign cert generated from generate_cert method.
# cert, name, key = generate_cert
def self_sign_key(cert, name, key)
cert.issuer = name
cert.sign key, OpenSSL::Digest.new('SHA1')
open 'certificate.pem', 'w' do |io| io.write cert.to_pem end
end
def new_ssl_context(cert, key)
context = OpenSSL::SSL::SSLContext.new
context.cert = cert
context.key = key
context
2020-07-22 02:12:48 -05:00
end
def load_cert(path)
OpenSSL::X509::Certificate.new File.read path
end
2020-07-22 01:00:20 -05:00
end