public async Task <X509Certificate2> Enroll(IOrder order, Pkcs10CertificateRequest request) { return(await Task.Run(() => { var caCert = Options.ExtraCertificateStorage[1]; return GenerateCertificate(caCert.Subject, request.Subject, caCert.PrivateKey, request.PublicKey.Key); })); }
/// <inheritdoc/> public IOrder EnrollCertificate(int accountId, int orderId, FinalizeOrder @params) { #region Check arguments if (@params is null) { throw new ArgumentNullException(nameof(@params)); } #endregion var order = GetById(accountId, orderId); // Check status ready if (order.Status != OrderStatus.Ready) { throw new AcmeException(ErrorType.OrderNotReady); } var certificateEnrollParams = new CertificateEnrollParams() { Order = order, Params = @params, }; try { OnEnrollCertificateBefore(certificateEnrollParams); } catch (Exception ex) { // return invalid order CreateOrderError(ex, certificateEnrollParams.Order); return(certificateEnrollParams.Order); } order.Status = OrderStatus.Processing; OrderRepository.Update(order); Logger.Info("Order {id} status updated to {status}", order.Id, order.Status); // check cancel if (!certificateEnrollParams.Cancel) { Task .Run(async() => { var requestRaw = Base64Url.Decode(@params.Csr); var request = new Pkcs10CertificateRequest(requestRaw); var certificate = await CertificateEnrollmentService.Enroll(order, request); // todo ? using certEnrollParams order.Certificate = OrderRepository.CreateCertificate(certificate); OrderRepository.Update(order); OnEnrollCertificateTask(certificateEnrollParams); }) .ContinueWith(t => { if (t.IsFaulted) { // TODO Optimize Error assignment CreateOrderError(t.Exception.InnerException, order); } if (t.IsCompleted) { if (order.Status == OrderStatus.Processing) { order.Status = OrderStatus.Valid; OrderRepository.Update(order); Logger.Info("Certificate {thumbprint} for Order {id} issued successfully", order.Certificate.Thumbprint, order.Id); } } Logger.Info("Order {id} status updated to {status}", order.Id, order.Status); }); } return(order); }
/// <inheritdoc/> public Task <X509Certificate2> Enroll(IOrder order, Pkcs10CertificateRequest request) { throw new MalformedException("Method not implemented"); }