puppetserver-ca 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7cdc97b5346544e3f5eaa1b6e8258e7f8ad6356d
|
4
|
+
data.tar.gz: fa5cafd9e26a01d03a0f9ffd73169b4ea98c77f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96260c55c8b9a1499ce112e20300801306ab9e7ce7ebdaf2a8a0cff5cffb9f692e5b266dccdf1a2df14bb3ff4f6a57dc2b4bb17dc93ce9a2f092b57e6f61a002
|
7
|
+
data.tar.gz: b9ffc226ca976e0359530d89a5c449f1ec089c9e75b560aa0dbb5b5db133900ebbd657d14a96884d55f9d098b963f207f57f5249c3df257e7715ad14ba55e4c2
|
@@ -44,8 +44,8 @@ module Puppetserver
|
|
44
44
|
BANNER = <<-BANNER
|
45
45
|
Usage:
|
46
46
|
puppetserver ca generate [--help]
|
47
|
-
puppetserver ca generate [--config PATH]
|
48
|
-
|
47
|
+
puppetserver ca generate [--config PATH] [--subject-alt-names ALTNAME1[,ALTNAME2...]]
|
48
|
+
[--certname NAME] [--ca-name NAME]
|
49
49
|
|
50
50
|
Description:
|
51
51
|
Generate a root and intermediate signing CA for Puppet Server
|
@@ -77,31 +77,34 @@ BANNER
|
|
77
77
|
end
|
78
78
|
|
79
79
|
# Load, resolve, and validate puppet config settings
|
80
|
-
|
80
|
+
settings_overrides = {}
|
81
|
+
settings_overrides[:certname] = input['certname'] unless input['certname'].empty?
|
82
|
+
settings_overrides[:ca_name] = input['ca_name'] unless input['ca_name'].empty?
|
83
|
+
# Since puppet expects the key to be called 'dns_alt_names', we need to use that here
|
84
|
+
# to ensure that the overriding works correctly.
|
85
|
+
settings_overrides[:dns_alt_names] = input['subject_alt_names'] unless input['subject_alt_names'].empty?
|
86
|
+
|
87
|
+
puppet = Config::Puppet.new(config_path)
|
88
|
+
puppet.load(settings_overrides)
|
81
89
|
return 1 if CliParsing.handle_errors(@logger, puppet.errors)
|
82
90
|
|
83
91
|
# Load most secure signing digest we can for cers/crl/csr signing.
|
84
92
|
signer = SigningDigest.new
|
85
93
|
return 1 if CliParsing.handle_errors(@logger, signer.errors)
|
86
94
|
|
87
|
-
if input['subject_alt_names'].empty?
|
88
|
-
subject_alt_names = munge_alt_names(puppet.settings[:subject_alt_names])
|
89
|
-
else
|
90
|
-
subject_alt_names = munge_alt_names(input['subject_alt_names'])
|
91
|
-
end
|
92
|
-
|
93
95
|
# Generate root and intermediate ca and put all the certificates, crls,
|
94
96
|
# and keys where they should go.
|
95
|
-
errors = generate_pki(puppet.settings, signer.digest
|
97
|
+
errors = generate_pki(puppet.settings, signer.digest)
|
96
98
|
return 1 if CliParsing.handle_errors(@logger, errors)
|
97
99
|
|
98
100
|
@logger.inform "Generation succeeded. Find your files in #{puppet.settings[:cadir]}"
|
99
101
|
return 0
|
100
102
|
end
|
101
103
|
|
102
|
-
def generate_pki(settings, signing_digest
|
104
|
+
def generate_pki(settings, signing_digest)
|
103
105
|
valid_until = Time.now + settings[:ca_ttl]
|
104
106
|
host = Puppetserver::Ca::Host.new(signing_digest)
|
107
|
+
subject_alt_names = munge_alt_names(settings[:subject_alt_names])
|
105
108
|
|
106
109
|
root_key = host.create_private_key(settings[:keylength])
|
107
110
|
root_cert = self_signed_ca(root_key, settings[:root_ca_name], valid_until, signing_digest)
|
@@ -115,12 +118,14 @@ BANNER
|
|
115
118
|
master_key = host.create_private_key(settings[:keylength])
|
116
119
|
master_csr = host.create_csr(settings[:certname], master_key)
|
117
120
|
master_cert = sign_master_cert(int_key, int_cert, master_csr,
|
118
|
-
|
121
|
+
valid_until, signing_digest,
|
122
|
+
subject_alt_names)
|
119
123
|
|
120
124
|
FileSystem.ensure_dir(settings[:cadir])
|
121
125
|
FileSystem.ensure_dir(settings[:certdir])
|
122
126
|
FileSystem.ensure_dir(settings[:privatekeydir])
|
123
127
|
FileSystem.ensure_dir(settings[:publickeydir])
|
128
|
+
FileSystem.ensure_dir(settings[:signeddir])
|
124
129
|
|
125
130
|
public_files = [
|
126
131
|
[settings[:cacert], [int_cert, root_cert]],
|
@@ -131,7 +136,8 @@ BANNER
|
|
131
136
|
[settings[:hostpubkey], master_key.public_key],
|
132
137
|
[settings[:capub], int_key.public_key],
|
133
138
|
[settings[:cert_inventory], inventory_entry(master_cert)],
|
134
|
-
[settings[:serial], "
|
139
|
+
[settings[:serial], "002"],
|
140
|
+
[File.join(settings[:signeddir], "#{settings[:certname]}.pem"), master_cert],
|
135
141
|
]
|
136
142
|
|
137
143
|
private_files = [
|
@@ -293,6 +299,8 @@ ERR
|
|
293
299
|
|
294
300
|
def self.parser(parsed = {})
|
295
301
|
parsed['subject_alt_names'] = ''
|
302
|
+
parsed['ca_name'] = ''
|
303
|
+
parsed['certname'] = ''
|
296
304
|
OptionParser.new do |opts|
|
297
305
|
opts.banner = BANNER
|
298
306
|
opts.on('--help', 'Display this generate specific help output') do |help|
|
@@ -302,9 +310,17 @@ ERR
|
|
302
310
|
parsed['config'] = conf
|
303
311
|
end
|
304
312
|
opts.on('--subject-alt-names NAME1[,NAME2]',
|
305
|
-
'Subject alternative names for the
|
313
|
+
'Subject alternative names for the master cert') do |sans|
|
306
314
|
parsed['subject_alt_names'] = sans
|
307
315
|
end
|
316
|
+
opts.on('--ca-name NAME',
|
317
|
+
'Common name to use for the CA signing cert') do |name|
|
318
|
+
parsed['ca_name'] = name
|
319
|
+
end
|
320
|
+
opts.on('--certname NAME',
|
321
|
+
'Common name to use for the master cert') do |name|
|
322
|
+
parsed['certname'] = name
|
323
|
+
end
|
308
324
|
end
|
309
325
|
end
|
310
326
|
end
|
@@ -14,7 +14,7 @@ module Puppetserver
|
|
14
14
|
BANNER = <<-BANNER
|
15
15
|
Usage:
|
16
16
|
puppetserver ca import [--help]
|
17
|
-
puppetserver ca import [--config PATH]
|
17
|
+
puppetserver ca import [--config PATH] [--certname NAME]
|
18
18
|
--private-key PATH --cert-bundle PATH --crl-chain PATH
|
19
19
|
|
20
20
|
Description:
|
@@ -46,7 +46,10 @@ BANNER
|
|
46
46
|
loader = X509Loader.new(bundle_path, key_path, chain_path)
|
47
47
|
return 1 if CliParsing.handle_errors(@logger, loader.errors)
|
48
48
|
|
49
|
-
|
49
|
+
settings_overrides = {}
|
50
|
+
settings_overrides[:certname] = input['certname'] unless input['certname'].empty?
|
51
|
+
puppet = Config::Puppet.new(config_path)
|
52
|
+
puppet.load(settings_overrides)
|
50
53
|
return 1 if CliParsing.handle_errors(@logger, puppet.errors)
|
51
54
|
|
52
55
|
target_locations = [puppet.settings[:cacert],
|
@@ -75,7 +78,7 @@ ERR
|
|
75
78
|
FileSystem.write_file(puppet.settings[:cacrl], loader.crls, 0640)
|
76
79
|
|
77
80
|
# Puppet's internal CA expects these file to exist.
|
78
|
-
FileSystem.ensure_file(puppet.settings[:serial], "
|
81
|
+
FileSystem.ensure_file(puppet.settings[:serial], "001", 0640)
|
79
82
|
FileSystem.ensure_file(puppet.settings[:cert_inventory], "", 0640)
|
80
83
|
|
81
84
|
@logger.inform "Import succeeded. Find your files in #{puppet.settings[:cadir]}"
|
@@ -124,6 +127,10 @@ ERR
|
|
124
127
|
opts.on('--crl-chain CHAIN', 'Path to PEM encoded chain') do |chain|
|
125
128
|
parsed['crl-chain'] = chain
|
126
129
|
end
|
130
|
+
opts.on('--certname NAME',
|
131
|
+
'Common name to use for the master cert') do |name|
|
132
|
+
parsed['certname'] = name
|
133
|
+
end
|
127
134
|
end
|
128
135
|
end
|
129
136
|
end
|
@@ -24,7 +24,7 @@ module Puppetserver
|
|
24
24
|
|
25
25
|
include Puppetserver::Ca::Utils::Config
|
26
26
|
|
27
|
-
def self.parse(config_path
|
27
|
+
def self.parse(config_path)
|
28
28
|
instance = new(config_path)
|
29
29
|
instance.load
|
30
30
|
|
@@ -60,7 +60,7 @@ module Puppetserver
|
|
60
60
|
user_specific_conf_dir + '/puppet.conf'
|
61
61
|
end
|
62
62
|
|
63
|
-
def load
|
63
|
+
def load(cli_overrides = {})
|
64
64
|
if explicitly_given_config_file_or_default_config_exists?
|
65
65
|
results = parse_text(File.read(@config_path))
|
66
66
|
end
|
@@ -70,6 +70,7 @@ module Puppetserver
|
|
70
70
|
results[:master] ||= {}
|
71
71
|
|
72
72
|
overrides = results[:main].merge(results[:master])
|
73
|
+
overrides.merge!(cli_overrides)
|
73
74
|
|
74
75
|
@settings = resolve_settings(overrides).freeze
|
75
76
|
end
|
@@ -133,6 +134,7 @@ module Puppetserver
|
|
133
134
|
:publickeydir => '$ssldir/public_keys',
|
134
135
|
:ca_ttl => '15y',
|
135
136
|
:certificate_revocation => 'true',
|
137
|
+
:signeddir => '$cadir/signed',
|
136
138
|
}
|
137
139
|
|
138
140
|
# This loops through the base defaults and gives each setting a
|
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.1
|
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-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: facter
|