@@ -59,6 +59,11 @@ def help
59
59
the CSR. Otherwise a new key pair will be generated. If a CSR has already
60
60
been submitted with the given `certname`, then the operation will fail.
61
61
62
+ * generate_request:
63
+ Generate a certificate signing request (CSR). If
64
+ a private and public key pair already exist, they will be used to generate
65
+ the CSR. Otherwise a new key pair will be generated.
66
+
62
67
* download_cert:
63
68
Download a certificate for this host. If the current private key matches
64
69
the downloaded certificate, then the certificate will be saved and used
@@ -136,6 +141,8 @@ def main
136
141
unless cert
137
142
raise Puppet ::Error , _ ( "The certificate for '%{name}' has not yet been signed" ) % { name : certname }
138
143
end
144
+ when 'generate_request'
145
+ generate_request ( certname )
139
146
when 'verify'
140
147
verify ( certname )
141
148
when 'clean'
@@ -162,13 +169,7 @@ def show(certname)
162
169
def submit_request ( ssl_context )
163
170
key = @cert_provider . load_private_key ( Puppet [ :certname ] )
164
171
unless key
165
- if Puppet [ :key_type ] == 'ec'
166
- Puppet . info _ ( "Creating a new EC SSL key for %{name} using curve %{curve}" ) % { name : Puppet [ :certname ] , curve : Puppet [ :named_curve ] }
167
- key = OpenSSL ::PKey ::EC . generate ( Puppet [ :named_curve ] )
168
- else
169
- Puppet . info _ ( "Creating a new SSL key for %{name}" ) % { name : Puppet [ :certname ] }
170
- key = OpenSSL ::PKey ::RSA . new ( Puppet [ :keylength ] . to_i )
171
- end
172
+ key = create_key ( Puppet [ :certname ] )
172
173
@cert_provider . save_private_key ( Puppet [ :certname ] , key )
173
174
end
174
175
@@ -187,6 +188,20 @@ def submit_request(ssl_context)
187
188
raise Puppet ::Error . new ( _ ( "Failed to submit certificate request: %{message}" ) % { message : e . message } , e )
188
189
end
189
190
191
+ def generate_request ( certname )
192
+ key = @cert_provider . load_private_key ( certname )
193
+ unless key
194
+ key = create_key ( certname )
195
+ @cert_provider . save_private_key ( certname , key )
196
+ end
197
+
198
+ csr = @cert_provider . create_request ( certname , key )
199
+ @cert_provider . save_request ( certname , csr )
200
+ Puppet . notice _ ( "Generated certificate request in '%{path}'" ) % { path : @cert_provider . to_path ( Puppet [ :requestdir ] , certname ) }
201
+ rescue => e
202
+ raise Puppet ::Error . new ( _ ( "Failed to generate certificate request: %{message}" ) % { message : e . message } , e )
203
+ end
204
+
190
205
def download_cert ( ssl_context )
191
206
key = @cert_provider . load_private_key ( Puppet [ :certname ] )
192
207
@@ -285,4 +300,14 @@ def fingerprint(cert)
285
300
def create_route ( ssl_context )
286
301
@session . route_to ( :ca , ssl_context : ssl_context )
287
302
end
303
+
304
+ def create_key ( certname )
305
+ if Puppet [ :key_type ] == 'ec'
306
+ Puppet . info _ ( "Creating a new EC SSL key for %{name} using curve %{curve}" ) % { name : certname , curve : Puppet [ :named_curve ] }
307
+ OpenSSL ::PKey ::EC . generate ( Puppet [ :named_curve ] )
308
+ else
309
+ Puppet . info _ ( "Creating a new SSL key for %{name}" ) % { name : certname }
310
+ OpenSSL ::PKey ::RSA . new ( Puppet [ :keylength ] . to_i )
311
+ end
312
+ end
288
313
end
0 commit comments