varanus 0.2.1 → 0.3.0
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +7 -6
- data/CHANGELOG.md +4 -1
- data/Gemfile.lock +18 -15
- data/docker-compose.yml +1 -1
- data/lib/varanus/ssl.rb +31 -15
- data/lib/varanus/ssl/csr.rb +11 -6
- data/lib/varanus/version.rb +1 -1
- data/varanus.gemspec +1 -3
- metadata +4 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 230026bcb2def2b083ca884cd2302daf51407b6d57aa212c66d208d29a335b11
|
4
|
+
data.tar.gz: 69728f0eb64f2735e32bfa4b1d77e8bd4fde87b47f3f6e029a7ccbe441d85f3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6708842c8291bedf4b3d71d29b7437aba40ea1d1148e090f023eff5ba130abe8e74f278c95a67d39ca8346e37574a576f693e9caee946b02a68f58e4811ac636
|
7
|
+
data.tar.gz: 6db3621c1415feafb91eb3eb46407a240942f142d5b5aea3024bd44c644bf2232d73155c5908da51f7e85f6affc23533626e281d12848c8cd9293b4265517695
|
data/.rubocop.yml
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
AllCops:
|
2
|
-
|
2
|
+
NewCops: disable
|
3
|
+
TargetRubyVersion: 2.5
|
3
4
|
|
4
5
|
Bundler/OrderedGems:
|
5
6
|
AutoCorrect: false
|
6
7
|
|
8
|
+
Layout/LineLength:
|
9
|
+
Max: 90
|
10
|
+
Exclude:
|
11
|
+
- 'test/**/*'
|
12
|
+
|
7
13
|
Metrics/AbcSize:
|
8
14
|
Max: 25
|
9
15
|
Exclude:
|
@@ -14,11 +20,6 @@ Metrics/ClassLength:
|
|
14
20
|
Exclude:
|
15
21
|
- 'test/**/*'
|
16
22
|
|
17
|
-
Metrics/LineLength:
|
18
|
-
Max: 90
|
19
|
-
Exclude:
|
20
|
-
- 'test/**/*'
|
21
|
-
|
22
23
|
Metrics/MethodLength:
|
23
24
|
Max: 20
|
24
25
|
Exclude:
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
varanus (0.
|
4
|
+
varanus (0.3.0)
|
5
5
|
faraday
|
6
6
|
faraday_middleware
|
7
7
|
savon (~> 2.0)
|
@@ -14,7 +14,7 @@ GEM
|
|
14
14
|
akami (1.3.1)
|
15
15
|
gyoku (>= 0.4.0)
|
16
16
|
nokogiri
|
17
|
-
ast (2.4.
|
17
|
+
ast (2.4.1)
|
18
18
|
builder (3.2.3)
|
19
19
|
crack (0.4.3)
|
20
20
|
safe_yaml (~> 1.0.0)
|
@@ -29,7 +29,6 @@ GEM
|
|
29
29
|
httpi (2.4.4)
|
30
30
|
rack
|
31
31
|
socksify
|
32
|
-
jaro_winkler (1.5.1)
|
33
32
|
json (2.1.0)
|
34
33
|
metaclass (0.0.4)
|
35
34
|
mini_portile2 (2.3.0)
|
@@ -42,23 +41,27 @@ GEM
|
|
42
41
|
nokogiri (1.8.5)
|
43
42
|
mini_portile2 (~> 2.3.0)
|
44
43
|
nori (2.6.0)
|
45
|
-
parallel (1.
|
46
|
-
parser (2.
|
47
|
-
ast (~> 2.4.
|
48
|
-
powerpack (0.1.2)
|
44
|
+
parallel (1.19.2)
|
45
|
+
parser (2.7.1.4)
|
46
|
+
ast (~> 2.4.1)
|
49
47
|
public_suffix (3.0.3)
|
50
48
|
rack (2.0.6)
|
51
49
|
rainbow (3.0.0)
|
52
50
|
rake (10.5.0)
|
53
|
-
|
54
|
-
|
51
|
+
regexp_parser (1.7.1)
|
52
|
+
rexml (3.2.4)
|
53
|
+
rubocop (0.89.1)
|
55
54
|
parallel (~> 1.10)
|
56
|
-
parser (>= 2.
|
57
|
-
powerpack (~> 0.1)
|
55
|
+
parser (>= 2.7.1.1)
|
58
56
|
rainbow (>= 2.2.2, < 4.0)
|
57
|
+
regexp_parser (>= 1.7)
|
58
|
+
rexml
|
59
|
+
rubocop-ast (>= 0.3.0, < 1.0)
|
59
60
|
ruby-progressbar (~> 1.7)
|
60
|
-
unicode-display_width (
|
61
|
-
|
61
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
62
|
+
rubocop-ast (0.3.0)
|
63
|
+
parser (>= 2.7.1.4)
|
64
|
+
ruby-progressbar (1.10.1)
|
62
65
|
safe_yaml (1.0.4)
|
63
66
|
savon (2.12.0)
|
64
67
|
akami (~> 1.2)
|
@@ -74,7 +77,7 @@ GEM
|
|
74
77
|
simplecov-html (~> 0.10.0)
|
75
78
|
simplecov-html (0.10.2)
|
76
79
|
socksify (1.7.1)
|
77
|
-
unicode-display_width (1.
|
80
|
+
unicode-display_width (1.7.0)
|
78
81
|
wasabi (3.5.0)
|
79
82
|
httpi (~> 2.0)
|
80
83
|
nokogiri (>= 1.4.2)
|
@@ -100,4 +103,4 @@ DEPENDENCIES
|
|
100
103
|
yard
|
101
104
|
|
102
105
|
BUNDLED WITH
|
103
|
-
1.17.
|
106
|
+
1.17.3
|
data/docker-compose.yml
CHANGED
data/lib/varanus/ssl.rb
CHANGED
@@ -11,19 +11,15 @@ class Varanus::SSL
|
|
11
11
|
# Returns the option from #certificate_types that best matches the csr.
|
12
12
|
# @param csr [Varanus::SSL::CSR]
|
13
13
|
# @return [Hash] The option from {#certificate_types} that best matches the csr
|
14
|
-
def certificate_type_from_csr csr
|
15
|
-
|
16
|
-
types
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
else
|
24
|
-
types.find do |ct|
|
25
|
-
ct['name'] =~ /\bSSL\b/ && ct['name'] !~ /(?:Multi.?Domain|Wildcard)/i
|
26
|
-
end
|
14
|
+
def certificate_type_from_csr csr, days = nil
|
15
|
+
types = certificate_types_standard(days)
|
16
|
+
return types.first if types.length <= 1
|
17
|
+
|
18
|
+
regexp = cert_type_regexp(csr)
|
19
|
+
return types.find { |ct| ct['name'] =~ regexp } if regexp
|
20
|
+
|
21
|
+
types.find do |ct|
|
22
|
+
ct['name'] =~ /\bSSL\b/ && ct['name'] !~ /(?:Multi.?Domain|Wildcard)/i
|
27
23
|
end
|
28
24
|
end
|
29
25
|
|
@@ -33,6 +29,18 @@ class Varanus::SSL
|
|
33
29
|
@certificate_types ||= get('types')
|
34
30
|
end
|
35
31
|
|
32
|
+
# Return Array of certificate types based on standard sorting.
|
33
|
+
# @param days [Integer] if present, only include types that support the given day count
|
34
|
+
# @return [Array<Hash>]
|
35
|
+
def certificate_types_standard days = nil
|
36
|
+
types = certificate_types.reject do |ct|
|
37
|
+
ct['name'] =~ /\b(?:EV|ECC|AMT|Elite)\b/
|
38
|
+
end
|
39
|
+
types = types.select! { |t| t['terms'].include? days } unless days.nil?
|
40
|
+
|
41
|
+
types
|
42
|
+
end
|
43
|
+
|
36
44
|
# Retrieves the cert.
|
37
45
|
# @param id [Integer] As returned by {#sign}
|
38
46
|
# @param type [String]
|
@@ -75,6 +83,7 @@ class Varanus::SSL
|
|
75
83
|
# specified, lowest allowed for the cert type will be used)
|
76
84
|
# @return [Integer] Id of SSL cert.
|
77
85
|
def sign csr, org_id, opts = {}
|
86
|
+
opts[:days] ||= opts[:years] * 365 unless opts[:years].nil?
|
78
87
|
csr = Varanus::SSL::CSR.new(csr) unless csr.is_a?(Varanus::SSL::CSR)
|
79
88
|
cert_type_id = opts_to_cert_type_id opts, csr
|
80
89
|
args = {
|
@@ -92,6 +101,14 @@ class Varanus::SSL
|
|
92
101
|
|
93
102
|
private
|
94
103
|
|
104
|
+
def cert_type_regexp csr
|
105
|
+
return /Wildcard.+SSL/i if csr.all_names.any? { |n| n.start_with?('*.') }
|
106
|
+
|
107
|
+
return /Multi.?Domain.+SSL/i if csr.subject_alt_names.any?
|
108
|
+
|
109
|
+
nil
|
110
|
+
end
|
111
|
+
|
95
112
|
def check_result result
|
96
113
|
body = result.body
|
97
114
|
return unless body.is_a?(Hash)
|
@@ -132,7 +149,7 @@ class Varanus::SSL
|
|
132
149
|
when String
|
133
150
|
certificate_types.find { |ct| ct['name'] == opts[:cert_type] }['id']
|
134
151
|
else
|
135
|
-
certificate_type_from_csr(csr)['id']
|
152
|
+
certificate_type_from_csr(csr, opts[:days])['id']
|
136
153
|
end
|
137
154
|
end
|
138
155
|
|
@@ -144,7 +161,6 @@ class Varanus::SSL
|
|
144
161
|
|
145
162
|
def opts_to_term opts, cert_type_id
|
146
163
|
term = opts[:days]
|
147
|
-
term ||= opts[:years] * 365 unless opts[:years].nil?
|
148
164
|
term ||= certificate_types.find { |ct| ct['id'] == cert_type_id }['terms'].min
|
149
165
|
term
|
150
166
|
end
|
data/lib/varanus/ssl/csr.rb
CHANGED
@@ -25,18 +25,23 @@ class Varanus::SSL::CSR
|
|
25
25
|
request = OpenSSL::X509::Request.new
|
26
26
|
request.version = 0
|
27
27
|
request.subject = OpenSSL::X509::Name.parse subject.map { |k, v| "/#{k}=#{v}" }.join
|
28
|
+
request.add_attribute names_to_san_attribute(names)
|
29
|
+
request.public_key = key.public_key
|
30
|
+
|
31
|
+
request.sign(key, OpenSSL::Digest::SHA256.new)
|
32
|
+
|
33
|
+
[key, Varanus::SSL::CSR.new(request)]
|
34
|
+
end
|
28
35
|
|
29
|
-
|
36
|
+
# :nodoc:
|
37
|
+
# Create a Subject Alternate Names attribute from an Array of dns names
|
38
|
+
def self.names_to_san_attribute names
|
30
39
|
ef = OpenSSL::X509::ExtensionFactory.new
|
31
40
|
name_str = names.map { |n| "DNS:#{n}" }.join(', ')
|
32
41
|
ext = ef.create_extension('subjectAltName', name_str, false)
|
33
42
|
seq = OpenSSL::ASN1::Sequence([ext])
|
34
43
|
ext_req = OpenSSL::ASN1::Set([seq])
|
35
|
-
|
36
|
-
|
37
|
-
request.public_key = key.public_key
|
38
|
-
request.sign(key, OpenSSL::Digest::SHA256.new)
|
39
|
-
[key, Varanus::SSL::CSR.new(request)]
|
44
|
+
OpenSSL::X509::Attribute.new('extReq', ext_req)
|
40
45
|
end
|
41
46
|
|
42
47
|
# Common Name (CN) for cert.
|
data/lib/varanus/version.rb
CHANGED
data/varanus.gemspec
CHANGED
@@ -4,7 +4,6 @@ lib = File.expand_path('lib', __dir__)
|
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
require 'varanus/version'
|
6
6
|
|
7
|
-
# rubocop:disable Metrics/BlockLength
|
8
7
|
Gem::Specification.new do |spec|
|
9
8
|
spec.name = 'varanus'
|
10
9
|
spec.version = Varanus::VERSION
|
@@ -28,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
28
27
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
29
28
|
end
|
30
29
|
spec.require_paths = ['lib']
|
31
|
-
spec.required_ruby_version = '>= 2.
|
30
|
+
spec.required_ruby_version = '>= 2.5.0'
|
32
31
|
|
33
32
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
34
33
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
@@ -44,4 +43,3 @@ Gem::Specification.new do |spec|
|
|
44
43
|
spec.add_runtime_dependency 'faraday_middleware'
|
45
44
|
spec.add_runtime_dependency 'savon', '~> 2.0'
|
46
45
|
end
|
47
|
-
# rubocop:enable Metrics/BlockLength
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: varanus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Dilda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -222,15 +222,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
222
222
|
requirements:
|
223
223
|
- - ">="
|
224
224
|
- !ruby/object:Gem::Version
|
225
|
-
version: 2.
|
225
|
+
version: 2.5.0
|
226
226
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
227
227
|
requirements:
|
228
228
|
- - ">="
|
229
229
|
- !ruby/object:Gem::Version
|
230
230
|
version: '0'
|
231
231
|
requirements: []
|
232
|
-
|
233
|
-
rubygems_version: 2.7.8
|
232
|
+
rubygems_version: 3.0.3
|
234
233
|
signing_key:
|
235
234
|
specification_version: 4
|
236
235
|
summary: Interface for Sectigo's (formerly Comodo CA) API.
|