/** * Request a new certificate for the given configuration. * * @param DomainConfiguration $configuration * * @return Certificate */ public function requestCertificate(DomainConfiguration $configuration) { $domains = array_merge([$configuration->getDomain()], (array) $configuration->getCSR()->getSubjectAlternativeNames()); $challengedDomains = []; if ($this->certificateRepository->hasCertificate($configuration)) { $metadata = $this->certificateRepository->loadCertificate($configuration); $challengedDomains = array_merge([$configuration->getDomain()], $metadata->getSubjectAlternativeNames()); } $unchallengedDomains = array_values(array_diff($domains, $challengedDomains)); if (count($unchallengedDomains)) { $this->challenger->challengeDomains($unchallengedDomains); } $domain = $configuration->getDomain(); $domainKeyPair = $this->keyPairFactory->createKeyPairProvider($domain)->getOrCreateKeyPair(); $certificate = $this->client->requestCertificate($domain, $domainKeyPair, $configuration->getCSR()); $this->dispatcher->dispatch(AcmePhpBundleEvents::CERTIFICATE_REQUESTED, new CertificateEvent($configuration, $certificate, $domainKeyPair)); $this->logger->notice('Certificate for domain {domain} requested', ['domain' => $configuration->getDomain()]); return $certificate; }
/** * Return certificate's data. * * @param DomainConfiguration $configuration * * @return CertificateMetadata */ public function loadCertificate(DomainConfiguration $configuration) { $storage = $this->storageFactory->createCertificateStorage($configuration->getDomain()); return $this->certificateParser->parse($storage->loadCertificateFile($this->certificateFormatter->getName())); }