@@ -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'
@@ -187,6 +194,26 @@ def submit_request(ssl_context)
187
194
raise Puppet ::Error . new ( _ ( "Failed to submit certificate request: %{message}" ) % { message : e . message } , e )
188
195
end
189
196
197
+ def generate_request ( certname )
198
+ key = @cert_provider . load_private_key ( certname )
199
+ unless key
200
+ if Puppet [ :key_type ] == 'ec'
201
+ Puppet . info _ ( "Creating a new EC SSL key for %{name} using curve %{curve}" ) % { name : certname , curve : Puppet [ :named_curve ] }
202
+ key = OpenSSL ::PKey ::EC . generate ( Puppet [ :named_curve ] )
203
+ else
204
+ Puppet . info _ ( "Creating a new SSL key for %{name}" ) % { name : certname }
205
+ key = OpenSSL ::PKey ::RSA . new ( Puppet [ :keylength ] . to_i )
206
+ end
207
+ @cert_provider . save_private_key ( certname , key )
208
+ end
209
+
210
+ csr = @cert_provider . create_request ( certname , key )
211
+ @cert_provider . save_request ( certname , csr )
212
+ Puppet . notice _ ( "Generated certificate request for '%{name}' at %{requestdir}" ) % { name : certname , requestdir : Puppet [ :requestdir ] }
213
+ rescue => e
214
+ raise Puppet ::Error . new ( _ ( "Failed to generate certificate request: %{message}" ) % { message : e . message } , e )
215
+ end
216
+
190
217
def download_cert ( ssl_context )
191
218
key = @cert_provider . load_private_key ( Puppet [ :certname ] )
192
219
0 commit comments