puppetserver-ca 0.4.2 → 0.4.3
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/lib/puppetserver/ca/action/create.rb +17 -2
- data/lib/puppetserver/ca/action/import.rb +1 -1
- data/lib/puppetserver/ca/config/puppet.rb +4 -1
- data/lib/puppetserver/ca/host.rb +12 -1
- data/lib/puppetserver/ca/local_certificate_authority.rb +8 -5
- data/lib/puppetserver/ca/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c19462a3167093517421b973f330b005a6776b4
|
4
|
+
data.tar.gz: 5c4dc2716c5063512594005c625ad391ca6ec3f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cac3a5c1d00ddb4e4fc9948fc09c91bc6436e8c245cd17610b971e7dbc74c033ba41c7602d12fdbe11808eb51a0612c5fee71353af4b9956b4ac449fb889ec84
|
7
|
+
data.tar.gz: 8e8ac33850a91d128282572c0ef2f4dd421dd447911e09cc6aa561eae1f6b381c3b06f0e9661581616c2c516da92490ad59d180744737bf6873c049a9d9d673f
|
@@ -21,6 +21,7 @@ module Puppetserver
|
|
21
21
|
Usage:
|
22
22
|
puppetserver ca create [--help]
|
23
23
|
puppetserver ca create [--config PATH] [--certname CERTNAME[,ADDLCERTNAME]]
|
24
|
+
[--subject-alt-names ALTNAME1[,ALTNAME2...]]
|
24
25
|
|
25
26
|
Description:
|
26
27
|
Creates a new certificate signed by the intermediate CA
|
@@ -38,6 +39,7 @@ BANNER
|
|
38
39
|
|
39
40
|
def self.parser(parsed = {})
|
40
41
|
parsed['certnames'] = []
|
42
|
+
parsed['subject-alt-names'] = ''
|
41
43
|
OptionParser.new do |opts|
|
42
44
|
opts.banner = BANNER
|
43
45
|
opts.on('--certname FOO,BAR', Array,
|
@@ -50,6 +52,10 @@ BANNER
|
|
50
52
|
opts.on('--config CONF', 'Path to puppet.conf') do |conf|
|
51
53
|
parsed['config'] = conf
|
52
54
|
end
|
55
|
+
opts.on('--subject-alt-names NAME1[,NAME2]',
|
56
|
+
'Subject alternative names for the generated cert') do |sans|
|
57
|
+
parsed['subject-alt-names'] = sans
|
58
|
+
end
|
53
59
|
end
|
54
60
|
end
|
55
61
|
|
@@ -96,7 +102,12 @@ BANNER
|
|
96
102
|
end
|
97
103
|
|
98
104
|
# Load, resolve, and validate puppet config settings
|
99
|
-
|
105
|
+
settings_overrides = {}
|
106
|
+
# Since puppet expects the key to be called 'dns_alt_names', we need to use that here
|
107
|
+
# to ensure that the overriding works correctly.
|
108
|
+
settings_overrides[:dns_alt_names] = input['subject-alt-names'] unless input['subject-alt-names'].empty?
|
109
|
+
puppet = Config::Puppet.new(config_path)
|
110
|
+
puppet.load(settings_overrides)
|
100
111
|
return 1 if CliParsing.handle_errors(@logger, puppet.errors)
|
101
112
|
|
102
113
|
# Load most secure signing digest we can for csr signing.
|
@@ -139,7 +150,11 @@ BANNER
|
|
139
150
|
def generate_key_csr(certname, settings, digest)
|
140
151
|
host = Puppetserver::Ca::Host.new(digest)
|
141
152
|
private_key = host.create_private_key(settings[:keylength])
|
142
|
-
|
153
|
+
extensions = []
|
154
|
+
if !settings[:subject_alt_names].empty?
|
155
|
+
extensions << host.create_extension("subjectAltName", settings[:subject_alt_names])
|
156
|
+
end
|
157
|
+
csr = host.create_csr(certname, private_key, extensions)
|
143
158
|
|
144
159
|
return private_key, csr
|
145
160
|
end
|
@@ -90,7 +90,7 @@ BANNER
|
|
90
90
|
[settings[:hostpubkey], master_key.public_key],
|
91
91
|
[settings[:hostcert], master_cert],
|
92
92
|
[settings[:cert_inventory], ca.inventory_entry(master_cert)],
|
93
|
-
[settings[:serial], "
|
93
|
+
[settings[:serial], "002"],
|
94
94
|
[File.join(settings[:signeddir], "#{settings[:certname]}.pem"), master_cert]
|
95
95
|
]
|
96
96
|
|
@@ -152,8 +152,11 @@ module Puppetserver
|
|
152
152
|
settings[setting_name] = setting_value
|
153
153
|
end
|
154
154
|
|
155
|
+
# If subject-alt-names are provided, we need to add the certname in addition
|
156
|
+
overrides[:dns_alt_names] << ',$certname' if overrides[:dns_alt_names]
|
157
|
+
|
155
158
|
# rename dns_alt_names to subject_alt_names now that we support IP alt names
|
156
|
-
settings[:subject_alt_names] = overrides.fetch(:dns_alt_names, "
|
159
|
+
settings[:subject_alt_names] = overrides.fetch(:dns_alt_names, "")
|
157
160
|
|
158
161
|
# Some special cases where we need to manipulate config settings:
|
159
162
|
settings[:ca_ttl] = munge_ttl_setting(settings[:ca_ttl])
|
data/lib/puppetserver/ca/host.rb
CHANGED
@@ -12,15 +12,26 @@ module Puppetserver
|
|
12
12
|
OpenSSL::PKey::RSA.new(keylength)
|
13
13
|
end
|
14
14
|
|
15
|
-
def create_csr(name, key)
|
15
|
+
def create_csr(name, key, extensions = [])
|
16
16
|
csr = OpenSSL::X509::Request.new
|
17
17
|
csr.public_key = key.public_key
|
18
18
|
csr.subject = OpenSSL::X509::Name.new([["CN", name]])
|
19
19
|
csr.version = 2
|
20
|
+
add_csr_extension(csr, extensions) unless extensions.empty?
|
20
21
|
csr.sign(key, @digest)
|
21
22
|
|
22
23
|
csr
|
23
24
|
end
|
25
|
+
|
26
|
+
def create_extension(extension_name, extension_value, critical = false)
|
27
|
+
OpenSSL::X509::ExtensionFactory.new.create_extension(extension_name, extension_value, critical)
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_csr_extension(csr, extensions)
|
31
|
+
attribute_values = OpenSSL::ASN1::Set [OpenSSL::ASN1::Sequence(extensions)]
|
32
|
+
att = OpenSSL::X509::Attribute.new('extReq', attribute_values)
|
33
|
+
csr.add_attribute(att)
|
34
|
+
end
|
24
35
|
end
|
25
36
|
end
|
26
37
|
end
|
@@ -82,11 +82,14 @@ module Puppetserver
|
|
82
82
|
extension = ef.create_extension(*ext)
|
83
83
|
cert.add_extension(extension)
|
84
84
|
end
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
85
|
+
sans =
|
86
|
+
if @settings[:subject_alt_names].empty?
|
87
|
+
"DNS:puppet, DNS:#{@settings[:certname]}"
|
88
|
+
else
|
89
|
+
@settings[:subject_alt_names]
|
90
|
+
end
|
91
|
+
alt_names_ext = ef.create_extension("subjectAltName", sans, false)
|
92
|
+
cert.add_extension(alt_names_ext)
|
90
93
|
|
91
94
|
cert.sign(int_key, @digest)
|
92
95
|
cert
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppetserver-ca
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: facter
|