certie 0.0.2 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/certie.rb +31 -4
  3. metadata +13 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6e1cb8a0e33e9293d80d691f0e8823c67810b388212569e45afcbcd926bfbc9
4
- data.tar.gz: 3efbdc54c10c9f838d62a257d4427813d24f3f6546531e97a88f3c6a52341d20
3
+ metadata.gz: c2db9bf5d411b177f146378f28e2509444c5944dbf27fa1dbc8062cd5b301cfb
4
+ data.tar.gz: 4fe3a8adc909773c1e7507bb4fc6101a6995b3d552f16e4d3edeed75cbea65fe
5
5
  SHA512:
6
- metadata.gz: 2463d49a316393ad773e4101bf8307d9db69783f4efecaacb84568bbc0a2a993c527356cc95991edb2c3f9cd56d56aa2fe0f4608745da6c6a5d0ac0697cf6f32
7
- data.tar.gz: 223456217cfc468be901fe28fb161e09ed923cbfaf76905b3681e5d64c0e7bf8bd30e5753cf57eeeec344ea2fe99ddfb731ae60c4158093c4fcaeb8a8b31e0f8
6
+ metadata.gz: 4182a42d5b81261762c2b8fb03e9d9f5a8739f9b78d12836dda196eefc7c835283e1d3ea70b43183d347c8d897ba52d853ae6801d5c499c655069cc835064910
7
+ data.tar.gz: 4d1cfc800b64721cbb1c080aa142e2647d7301ae6964d8641d9ababc4250607b39d150ac48529ab7680ec5e40115da19bb821d89dfd2ac027364060b4094e394
data/lib/certie.rb CHANGED
@@ -1,9 +1,26 @@
1
-
2
1
  require 'openssl'
3
2
 
4
3
  class CertificateWrapper
5
4
  @@subject_prefix = '/C=AE/ST=Dubai/L=Dubai/O=KNR/OU=Software'
6
5
 
6
+ def self.load_subject_prefix
7
+ filename = "#{Dir.home}/.certie_subjprefix"
8
+ if File.exists?(filename)
9
+ @@subject_prefix = File.read(filename).chomp
10
+ else
11
+ File.write(filename, @@subject_prefix)
12
+ end
13
+ end
14
+
15
+ def self.file_cat(output_file, input_array)
16
+ File.open output_file, 'w' do |outfile|
17
+ input_array.each do |iter_infile|
18
+ outfile.write(File.read(iter_infile))
19
+ outfile.write "\n"
20
+ end
21
+ end
22
+ end
23
+
7
24
  def self.get_counter_next
8
25
  serial = 0
9
26
  if File.exists?('serial.txt')
@@ -50,7 +67,6 @@ class CertificateWrapper
50
67
 
51
68
  ef = OpenSSL::X509::ExtensionFactory.new
52
69
 
53
-
54
70
  if cn == "ca"
55
71
  cert.issuer = OpenSSL::X509::Name.parse subject
56
72
  ef.subject_certificate = cert
@@ -74,6 +90,7 @@ class CertificateWrapper
74
90
  ef.issuer_certificate = rootCert
75
91
  # cert.add_extension ef.create_extension('keyUsage', 'digitalSignature', true) # TODO: check if we can set webServer and webClient
76
92
  cert.add_extension ef.create_extension('subjectKeyIdentifier', 'hash', false )
93
+ cert.add_extension ef.create_extension('subjectAltName', 'DNS:' + cn, false) #This can be CSV of multiple DNS: and IP: entries
77
94
 
78
95
  cert.sign rootKey, OpenSSL::Digest.new('SHA256')
79
96
 
@@ -82,15 +99,25 @@ class CertificateWrapper
82
99
  end
83
100
  end
84
101
 
85
- `openssl pkcs8 -topk8 -inform pem -in "#{cn}.rsa" -out "#{cn}.key" -nocrypt`
86
- `cat "#{cn}.cert" "#{cn}.key" > "#{cn}.pem"`
102
+ # An alternative to invoking OpenSSL and cat - OpenSSL v2.2.0 has private_to_pem in OpenSSL::PKey
103
+ # `openssl pkcs8 -topk8 -inform pem -in "#{cn}.rsa" -out "#{cn}.key" -nocrypt`
104
+ File.open "#{cn}.key", 'wb' do |myfile|
105
+ myfile.print(key.private_to_pem)
106
+ end
107
+
108
+ # Replaced system call cat with file_cat method
109
+ # `cat "#{cn}.cert" "#{cn}.key" > "#{cn}.pem"`
110
+ file_cat "#{cn}.pem", ["#{cn}.cert", "#{cn}.key"]
87
111
  end
88
112
 
89
113
 
90
114
  def self.build(cn)
115
+ load_subject_prefix
116
+
91
117
  doWeHaveARootCertificate = File.exists? 'ca.cert'
92
118
  doWeHaveARootKey = File.exists? 'ca.rsa'
93
119
 
120
+ # TODO: Handle the case where we have only one and not the other (cert and key)
94
121
  if not (doWeHaveARootCertificate and doWeHaveARootKey)
95
122
  create_certificate
96
123
  end
metadata CHANGED
@@ -1,31 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: certie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katkam Nitin Reddy
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-22 00:00:00.000000000 Z
11
+ date: 2021-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: openssl
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 2.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
27
- description:
28
- email:
26
+ version: 2.2.0
27
+ description:
28
+ email:
29
29
  executables:
30
30
  - certie
31
31
  extensions: []
@@ -33,10 +33,10 @@ extra_rdoc_files: []
33
33
  files:
34
34
  - bin/certie
35
35
  - lib/certie.rb
36
- homepage:
36
+ homepage:
37
37
  licenses: []
38
38
  metadata: {}
39
- post_install_message:
39
+ post_install_message:
40
40
  rdoc_options: []
41
41
  require_paths:
42
42
  - lib
@@ -51,8 +51,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
51
51
  - !ruby/object:Gem::Version
52
52
  version: '0'
53
53
  requirements: []
54
- rubygems_version: 3.0.6
55
- signing_key:
54
+ rubygems_version: 3.2.22
55
+ signing_key:
56
56
  specification_version: 4
57
57
  summary: A utility for generating certificates
58
58
  test_files: []