226: def sign(hostname, cert_type = :server, self_signing_csr = nil)
227:
228: if self_signing_csr
229: csr = self_signing_csr
230: issuer = csr.content
231: else
232: unless csr = Puppet::SSL::CertificateRequest.find(hostname)
233: raise ArgumentError, "Could not find certificate request for #{hostname}"
234: end
235: issuer = host.certificate.content
236: end
237:
238: cert = Puppet::SSL::Certificate.new(hostname)
239: cert.content = Puppet::SSL::CertificateFactory.new(cert_type, csr.content, issuer, next_serial).result
240: cert.content.sign(host.key.content, OpenSSL::Digest::SHA1.new)
241:
242: Puppet.notice "Signed certificate request for #{hostname}"
243:
244:
245:
246:
247: inventory.add(cert)
248:
249:
250:
251: cert.save
252:
253:
254: Puppet::SSL::CertificateRequest.destroy(csr.name) unless self_signing_csr
255:
256: cert
257: end