Ejemplo n.º 1
0
        public async Task <IActionResult> OnPostAsync(long id, string action, string key)
        {
            AcmeCertificate = await _context.AcmeCertificates
                              .Include(a => a.AcmeAccount)
                              .ThenInclude(a => a.Key)
                              .Include(a => a.AcmeOrders)
                              .ThenInclude(o => o.DomainCertificate)
                              .FirstOrDefaultAsync(m => m.AcmeCertificateId == id);

            if (AcmeCertificate == null)
            {
                return(NotFound());
            }

            switch (action.ToLower())
            {
            case "keychange":
                switch (key)
                {
                case "apikey1":
                    AcmeCertificate.ApiKey1 = ApiKeyGenerator.CreateApiKey();
                    break;

                case "apikey2":
                    AcmeCertificate.ApiKey2 = ApiKeyGenerator.CreateApiKey();
                    break;
                }

                await _context.SaveChangesAsync();

                break;

            case "ocspcheck":
                try
                {
                    var order = AcmeCertificate.GetLatestValidAcmeOrder();
                    if (order?.Certificate != null)
                    {
                        var client = new OcspClient();
                        var status = client.GetOcspStatus(order.Certificate);
                        OcspStatus = status.ToString();
                    }
                    else
                    {
                        OcspStatus = "No certificate";
                    }
                }
                catch (Exception e)
                {
                    _logger.LogWarning($"Error obtaining OCSP status:{e.Message}");
                    OcspStatus = "Error";
                }
                break;

            case "revoke":
            {
                var order = AcmeCertificate.GetLatestValidAcmeOrder();
                if (order?.RawDataPem != null)
                {
                    _certesAcmeProvider.Initialize(AcmeCertificate);

                    var cert   = new Certes.Acme.CertificateChain(order.RawDataPem);
                    var reason = (RevocationReason)Enum.Parse(typeof(RevocationReason), RevocationReason, true);
                    await _certesAcmeProvider.Revoke(cert.Certificate.ToDer(), reason);

                    StatusMessage = "Certificate revocation submitted";
                }
                break;
            }
            }

            return(Page());
        }