public async Task <IHttpActionResult> GenerateAndInstall(DnsAzureInstallModel model, [FromUri(Name = "api-version")] string apiversion = null) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var mgr = CertificateManager.CreateAzureDnsWebAppCertificateManager(model.AzureWebAppEnvironment, model.AcmeConfig, model.CertificateSettings, model); return(Ok(await mgr.AddCertificate())); }
private static async Task RenewCore(RenewalParameters renewalParams) { Trace.TraceInformation("Generating SSL certificate with parameters: {0}", renewalParams); var acmeConfig = GetAcmeConfig(renewalParams); var webAppEnvironment = GetWebAppEnvironment(renewalParams); var certificateServiceSettings = new CertificateServiceSettings { UseIPBasedSSL = renewalParams.UseIpBasedSsl }; var azureDnsEnvironment = GetAzureDnsEnvironment(renewalParams); var manager = azureDnsEnvironment == null ? CertificateManager.CreateKuduWebAppCertificateManager(webAppEnvironment, acmeConfig, certificateServiceSettings, new AuthProviderConfig()) : CertificateManager.CreateAzureDnsWebAppCertificateManager(webAppEnvironment, acmeConfig, certificateServiceSettings, azureDnsEnvironment); Trace.TraceInformation("Adding SSL cert for '{0}'...", GetWebAppFullName(renewalParams)); bool addNewCert = true; if (renewalParams.RenewXNumberOfDaysBeforeExpiration > 0) { var staging = acmeConfig.BaseUri.Contains("staging", StringComparison.OrdinalIgnoreCase); var letsEncryptHostNames = await CertificateHelper.GetLetsEncryptHostNames(webAppEnvironment, staging); Trace.TraceInformation("Let's Encrypt host names (staging: {0}): {1}", staging, String.Join(", ", letsEncryptHostNames)); ICollection <string> missingHostNames = acmeConfig.Hostnames.Except(letsEncryptHostNames, StringComparer.OrdinalIgnoreCase).ToArray(); if (missingHostNames.Count > 0) { Trace.TraceInformation( "Detected host name(s) with no associated Let's Encrypt certificates, will add a new certificate: {0}", String.Join(", ", missingHostNames)); } else { Trace.TraceInformation("All host names associated with Let's Encrypt certificates, will perform cert renewal"); addNewCert = false; } } if (addNewCert) { await manager.AddCertificate(); } else { await manager.RenewCertificate(false, renewalParams.RenewXNumberOfDaysBeforeExpiration); } Trace.TraceInformation("Let's Encrypt SSL certs & bindings renewed for '{0}'", renewalParams.WebApp); }