-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcreate_x509cert.rb
45 lines (35 loc) · 1.18 KB
/
create_x509cert.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
require 'openssl'
require 'base64'
include OpenSSL
include X509
include PKey
#p x509 = Certificate.new(File.read("./Server.cer"))
p key = RSA.new(1024)
p new = Certificate.new
name = [['O','Test AG'],['OU','EZ SW'],['CN','Roland Schmitt'],['C','DE']]
new.subject = Name.new(name)
new.issuer = Name.new(name)
new.not_before = Time.now
new.not_after = Time.now + (60*60*24*365)
new.public_key = key #x509.public_key
new.serial = 999999999
new.version = 2
maker = ExtensionFactory.new(nil, new) #only subject
ext1 = maker.create_extension(["basicConstraints","CA:FALSE,pathlen:5"])
ext2 = maker.create_extension(["nsComment","Generated by OpenSSL for Ruby."])
ext3 = maker.create_extension(["subjectKeyIdentifier", "hash"])
new.extensions = [ext1, ext2, ext3]
maker.issuer_certificate = new # we needed subjectKeyInfo inside, now we have it
ext4 = maker.create_extension(["authorityKeyIdentifier", "keyid:always,issuer:always"])
new.add_extension(ext4)
new.sign(key, Digest::MD5.new)
puts "===TEXT==="
puts new.to_text
puts "===PEM==="
puts new.to_pem
f = File.new("test.cer","wb")
f.write(new.to_pem)
f.close()
puts "===DER==="
p new.to_der
#puts x.to_der