Exemple #1
0
        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();
        }
Exemple #2
0
        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;
 }
Exemple #7
0
 public OrmSettings(AcmeSettings settings)
 {
     _settings = settings;
 }
 public ConfigController(IOptions <AcmeSettings> settings)
 {
     _acmeSettings = settings.Value;
 }