public async Task <IActionResult> Sign( [FromServices] ICertificateAuthorityService certificateAuthorityService, [FromServices] RootAuthorityAppService rootAuthorityAppService, [FromServices] SystemContext adminDbContext, Guid certSysid) { var deviceCertificate = tenantContext.DeviceCertificates.SingleOrDefault(x => x.Sysid == certSysid); //var CommonName = "AgileLabs Root Certificate Authority"; CertificateAuthority signCa = rootAuthorityAppService.GetDefaultRootCertificate();//agileLabsDbContext.CertificateAuthorities.FirstOrDefault(x => x.CommonName == CommonName); var rootCertificate = CertificateUtil.CreateX509Certificate2(Convert.FromBase64String(signCa.Certificate)); var signCaKeyPair = adminDbContext.KeyPairs.FirstOrDefault(x => x.Sysid == signCa.KeyPairSysid); var rootcaPrivateKey = CertificateUtil.ReadPrivateKey(signCaKeyPair.PrivateKey.ConvertBase64ToUTF8()); var csr = CertificateUtil.PemRead <Pkcs10CertificationRequest>(deviceCertificate.SignRequest.ConvertBase64ToUTF8()); var csrPublicKey = csr.GetPublicKey(); var issuerNameList = rootCertificate.IssuerName.Name.Replace("S=", "ST=").Split(", "); var x509Name = new X509Name(string.Join(", ", issuerNameList.Reverse().ToList())); var certificate = certificateAuthorityService.SignCertificate(csr, x509Name, rootcaPrivateKey.Private); deviceCertificate.Certificate = CertificateUtil.ExportToByte(certificate, X509ContentType.Cert).ConvertToBase64String(); tenantContext.Update(deviceCertificate); await tenantContext.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); }
public IActionResult DownloadRootCertificate([FromServices] RootAuthorityAppService rootAuthorityAppService) { string formatedCertString = rootAuthorityAppService.GetRootCertificate(); Response.Headers.Add("Content-Disposition", $"attachment;filename=agilelabs_root_ca.pem"); return(File(Encoding.UTF8.GetBytes(formatedCertString), "application/x-x509-ca-cert")); }
public async Task <IActionResult> DownnloadCertificatePemFormat(Guid certSysid, [FromServices] SystemContext adminDbContext, [FromServices] RootAuthorityAppService rootAuthorityAppService, [FromServices] DeviceCertificateAppService deviceCertificateAppService) { var deviceCertString = deviceCertificateAppService.GetDeviceCertificate(certSysid); var deviceRootCertString = rootAuthorityAppService.GetRootCertificate(); var pemFormatCertContent = $"{deviceCertString}{Environment.NewLine}{deviceRootCertString}"; Response.Headers.Add("Content-Disposition", $"attachment;filename={certSysid}.pem"); //content type get from: https://www.thoughtco.com/mime-types-by-content-type-3469108 await Task.CompletedTask; return(File(Encoding.UTF8.GetBytes(pemFormatCertContent), "application/x-pem-file")); }
public async Task <IActionResult> CreateRootCa( [Bind] RootCaCreateViewModel model, [FromServices] RootAuthorityAppService rootAuthorityAppService, [FromServices] TenantContext agileLabsDbContext) { if (ModelState.IsValid) { await rootAuthorityAppService.CreateRootCertificationAuthority(model.KeyPairSysid, model.Name); await _adminDbContext.SaveChangesAsync(); await agileLabsDbContext.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(model)); }