public static void Main(string[] args) { var settings = new AcmeSettings() { EmailAddress = "*****@*****.**", StorageLocation = LagoVista.Net.LetsEncrypt.Interfaces.StorageLocation.FileSystem, //StorageLocation = LagoVista.Net.LetsEncrypt.Interfaces.StorageLocation.BlobStorage, StorageAccountName = "nuviotdev", StorageContainerName = "tempcert", StorageKey = "Za6PpxUbXjXic8rhK3lbcWyUQyVY2NVsgXRRD1rVj2LAjXUnji5/ooJx7u0ob9cPKTkPu/woa74DBE6IVKsLQA==", Development = true, Diagnostics = true, PfxPassword = "******", StoragePath = @"L:\Certs" }; var acmeHost = new WebHostBuilder() .ConfigureLogging((factory) => { factory.AddConsole(); }) .ConfigureServices(services => services.AddAcmeCertificateManager(settings)) // .UseUrls("http://*:8008/.well-known/acme-challenge/") .UseUrls("http://*:8008") .Configure(app => app.UseAcmeResponse()) .UseKestrel() .Build(); acmeHost.Start(); var host = new WebHostBuilder() .ConfigureLogging((factory) => { factory.AddConsole(); }) .UseStartup <Startup>() .ConfigureServices(services => services.AddAcmeCertificateManager(settings)) .UseKestrel(async(options) => { // Request a new certificate with Let's Encrypt and store it for next time var certificateManager = options.ApplicationServices.GetService(typeof(ICertificateManager)) as ICertificateManager; var instanceLogger = new InstanceLogger(new LogWriter(), "host", "1.0", "instance"); var certificate = await certificateManager.GetCertificate(instanceLogger, URI); if (certificate != null) { options.Listen(IPAddress.Loopback, 443, listenOptions => { listenOptions.UseHttps(certificate); }); } }) .UseContentRoot(Directory.GetCurrentDirectory()) //.UseUrls($"https://{URI}:9001") .UseApplicationInsights() .Build(); host.Run(); }
public static void Main(string[] args) { var settings = new AcmeSettings() { EmailAddress = "*****@*****.**", StorageLocation = LagoVista.Net.LetsEncrypt.Interfaces.StorageLocation.FileSystem, Development = true, Diagnostics = true, PfxPassword = "******", StoragePath = @"L:\Certs" }; var acmeHost = new WebHostBuilder() .ConfigureLogging((factory) => { factory.AddConsole(); }) .ConfigureServices(services => services.AddAcmeCertificateManager(settings)) // .UseUrls("http://*:8008/.well-known/acme-challenge/") .UseUrls("http://*:8008") .Configure(app => app.UseAcmeResponse()) .UseKestrel() .Build(); acmeHost.Start(); var host = new WebHostBuilder() .ConfigureLogging((factory) => { factory.AddConsole(); }) .UseStartup <Startup>() .ConfigureServices(services => services.AddAcmeCertificateManager(settings)) .UseKestrel(async(options) => { // Request a new certificate with Let's Encrypt and store it for next time var certificateManager = options.ApplicationServices.GetService(typeof(ICertificateManager)) as ICertificateManager; var certificate = await certificateManager.GetCertificate(URI); if (certificate != null) { options.Listen(IPAddress.Loopback, 443, listenOptions => { listenOptions.UseHttps(certificate); }); } }) .UseContentRoot(Directory.GetCurrentDirectory()) //.UseUrls($"https://{URI}:9001") .UseApplicationInsights() .Build(); host.Run(); }
private void Settings_Load(object sender, EventArgs e) { if (!PointHelper.PointIsEmpty(TopLeft)) { Left = (int)TopLeft.X; Top = (int)TopLeft.Y; } _acmeSettings = new AcmeSettings(); _acmeSettings.AcmeOptions = EditorOptions; _acmeSettings.Telemetry = Telemetry; _acmeSettings.TopLeft = TopLeft; _acmeSettings.OnButtonClick += UsOnOnButtonClick; elementHost1.Child = _acmeSettings; MinimumSize = Size; }
static async Task <byte[]> RequestNewCertificate(string[] domainNames, AcmeSettings acmeSettings, Func <string, string, Task> challengeResponseReceiver) { using (var client = new AcmeClient(new Uri(acmeSettings.AcmeUri))) { // Create new registration var account = await client.NewRegistraton($"mailto:{acmeSettings.EmailAddress}"); // Accept terms of services account.Data.Agreement = account.GetTermsOfServiceUri(); account = await client.UpdateRegistration(account); bool unauthorizedDomain = false; // optimization: paralellize this // var result = Parallel.ForEach(domainNames, async (domaiName, state) => { state.Break(); }); // await Task.WhenAll(domainNames.Select(async (domainName) => { await Task.FromResult(0); })); foreach (var domainName in domainNames) { // Initialize authorization var authz = await client.NewAuthorization(new AuthorizationIdentifier { Type = AuthorizationIdentifierTypes.Dns, Value = domainName }); // Comptue key authorization for http-01 var httpChallengeInfo = authz.Data.Challenges.Where(c => c.Type == ChallengeTypes.Http01).First(); var keyAuthString = client.ComputeKeyAuthorization(httpChallengeInfo); // Do something to fullfill the challenge, // e.g. upload key auth string to well known path, or make changes to DNS // var cacheGrain = base.GrainFactory.GetGrain<ICacheGrain<string>>($"challenge:{httpChallengeInfo}"); // await cacheGrain.Set(new Immutable<string>(keyAuthString), TimeSpan.FromHours(2)); await challengeResponseReceiver(httpChallengeInfo.Token, keyAuthString); // Info ACME server to validate the identifier var httpChallenge = await client.CompleteChallenge(httpChallengeInfo); // Check authorization status int tryCount = 1; do { // Wait for ACME server to validate the identifier await Task.Delay(5000); authz = await client.GetAuthorization(httpChallenge.Location); }while (authz.Data.Status == EntityStatus.Pending && ++tryCount <= 10); if (authz.Data.Status != EntityStatus.Valid) { unauthorizedDomain = true; break; } } if (!unauthorizedDomain) { // Create certificate var csr = new CertificationRequestBuilder(); csr.AddName("CN", domainNames.First()); // "www.my_domain.com"; foreach (var alternativeName in domainNames.Skip(1)) { csr.SubjectAlternativeNames.Add(alternativeName); } var cert = await client.NewCertificate(csr); // Export Pfx var pfxBuilder = cert.ToPfx(); var pfx = pfxBuilder.Build(domainNames.First(), acmeSettings.PfxPassword); return(pfx); } else { return(null); } } }
public AcmeOptionsSetup(IServiceProvider services, IOptions <AcmeSettings> acmeSettings) { // _services = services; _acmeSettings = acmeSettings.Value; }
public SettingsController(ILogger <SettingsController> logger, IConfigurationValidator configValidator, IOptionsSnapshot <AcmeSettings> options) { _logger = logger; _configValidator = configValidator; _acmeSettings = options?.Value; }
public OrmSettings(AcmeSettings settings) { _settings = settings; }
public ConfigController(IOptions <AcmeSettings> settings) { _acmeSettings = settings.Value; }