コード例 #1
0
        public async Task <(X509Certificate2 cert, byte[] rawCert)> AcquireNewCertificateForHosts(
            string hostName,
            CsrInfo certificateSigningRequest,
            string certificateFriendlyName,
            string certificatePassword,
            CancellationToken cancellationToken)
        {
            _logger.LogInformation("Ordering LetsEncrypt certificate for hosts {0}.", new object[] { hostName });
            var order = await _acmeContext.NewOrder(new string[] { hostName });

            await ValidateOrderAsync(order, cancellationToken);

            var certificateBytes = await AcquireCertificateBytesFromOrderAsync(
                order,
                certificateSigningRequest,
                certificateFriendlyName,
                certificatePassword,
                cancellationToken);

            if (certificateBytes == null)
            {
                throw new InvalidOperationException("The certificate from the order was null.");
            }

            var certificate = new X509Certificate2(certificateBytes, certificatePassword);

            return(certificate, certificateBytes);
        }
コード例 #2
0
        public async Task <ChallengeOrder> CreateOrder(string domain)
        {
            _logger.LogInformation("New certificate order for {domain}", domain);
            var order = await _acme.NewOrder(new[] { domain });

            return(new ChallengeOrder
            {
                Order = order,
                DnsName = domain
            });
        }
コード例 #3
0
        private async Task AcquireNewCertificateForDomains(string[] domains)
        {
            _logger.LogInformation("Ordering LetsEncrypt certificate for domains {0}.", new object[] { domains });

            var order = await acme.NewOrder(domains);

            await ValidateOrderAsync(domains, order);

            var certificateBytes = await AcquireCertificateBytesFromOrderAsync(order);

            if (certificateBytes == null)
            {
                throw new InvalidOperationException("The certificate from the order was null.");
            }

            await _persistenceService.PersistSiteCertificateAsync(certificateBytes);

            Certificate = new X509Certificate2(certificateBytes, nameof(FluffySpoon));
        }
コード例 #4
0
        public async Task <PlacedOrder> PlaceOrder(string[] domains)
        {
            _logger.LogInformation("Ordering LetsEncrypt certificate for domains {0}.", new object[] { domains });
            var order = await _acme.NewOrder(domains);

            var allAuthorizations = await order.Authorizations();

            var challengeContexts = await Task.WhenAll(allAuthorizations.Select(x => x.Http()));

            var nonNullChallengeContexts = challengeContexts.Where(x => x != null).ToArray();

            var dtos = nonNullChallengeContexts.Select(x => new ChallengeDto
            {
                Token    = x.Type == ChallengeTypes.Dns01 ? _acme.AccountKey.DnsTxt(x.Token) : x.Token,
                Response = x.KeyAuthz,
                Domains  = domains
            }).ToArray();

            return(new PlacedOrder(dtos, order, nonNullChallengeContexts));
        }
コード例 #5
0
        private async Task AcquireNewCertificateForDomains(string[] domains)
        {
            _logger.LogInformation("Ordering LetsEncrypt certificate for domains {0}.", new object[] { domains });

            if (domains.Any(x => x.StartsWith(WildcardPrefix)) && !_persistenceService.HasStrategyForChallengeType(ChallengeType.Dns01))
            {
                throw new InvalidOperationException("A certificate containing a wildcard domain was requested, but no DNS challenge strategies have been registered.");
            }

            var order = await acme.NewOrder(domains);

            await ValidateOrderAsync(domains, order);

            var certificateBytes = await AcquireCertificateBytesFromOrderAsync(order);

            if (certificateBytes == null)
            {
                throw new InvalidOperationException("The certificate from the order was null.");
            }

            await _persistenceService.PersistSiteCertificateAsync(certificateBytes);

            Certificate = new X509Certificate2(certificateBytes, nameof(FluffySpoon));
        }