private async void GenerateCertificatesAsync() { try { if (!this.ValidateControls()) { UpdateStatusStrip("Please fill all required fields."); return; } var savePath = this.textBoxSavePath.Text; if (!Directory.Exists(savePath)) { throw new Exception("Destination directory does not exist."); } if (Directory.GetFiles(savePath).Length > 0) { throw new Exception("Destination directory must be empty."); } UpdateStatusStrip("Generating Certificate files..."); ToogleControls(enabled: false); var now = DateTime.UtcNow; var keySize = Convert.ToUInt32(this.comboBoxKeySize.SelectedItem); var validityInMonths = Convert.ToInt32(this.comboBoxValidity.SelectedItem); var serialNumber = Convert.ToInt64(this.numericUpDownSerialNumber.Value); await Task.Run(() => { var certificateBuilderResult = new CACertificateBuilder() .WithSerialNumberConfiguration(this.checkBoxRandomSerialNumber.Checked, serialNumber - 1) .SetKeySize(keySize) .SetSubjectDN(this.textBoxCN.Text + " CA", this.textBoxOU.Text, this.textBoxO.Text, null, this.textBoxC.Text) .SetNotBefore(now) .SetNotAfter(now.AddMonths(validityInMonths)) .Build(); var pkcs12Data = certificateBuilderResult.ExportCertificate(this.textBoxPassword.Text.ToSecureString()); var sslCertificateBuilder = new SSLCertificateBuilder() .WithSerialNumberConfiguration(this.checkBoxRandomSerialNumber.Checked, serialNumber) .SetKeySize(keySize) .SetSubjectDN(this.textBoxCN.Text, this.textBoxOU.Text, this.textBoxO.Text, null, this.textBoxC.Text) .SetNotBefore(now) .SetNotAfter(now.AddMonths(validityInMonths)) .SetIssuerCertificate(pkcs12Data, this.textBoxPassword.Text.ToSecureString()); if (this.checkBoxClientAuthentication.Checked) { sslCertificateBuilder = sslCertificateBuilder.SetClientAuthKeyUsage(); } ; if (this.checkBoxServerAuthentication.Checked) { sslCertificateBuilder = sslCertificateBuilder.SetServerAuthKeyUsage(); } ; if (!this.textBoxSAN.Text.IsNullOrEmpty()) { var sans = this.textBoxSAN.Text.Split(';').Select(x => x.Trim()).ToList(); sslCertificateBuilder = sslCertificateBuilder.SetSubjectAlternativeNames(sans); } ; var sslCertificateBuilderResult = sslCertificateBuilder.Build(); File.WriteAllBytes(Path.Combine(savePath, "caCertificate.p12"), pkcs12Data); if (this.checkBoxCertificateExportCrt.Checked) { var certData = certificateBuilderResult.Certificate.ExportPublicKeyCertificate(); File.WriteAllBytes(Path.Combine(savePath, "caCertificate.crt"), certData); } var sslPkcs12Data = sslCertificateBuilderResult.ExportCertificate(this.textBoxPassword.Text.ToSecureString()); File.WriteAllBytes(Path.Combine(savePath, "sslCertificate.p12"), sslPkcs12Data); if (this.checkBoxCertificateExportCrt.Checked) { var sslCertData = sslCertificateBuilderResult.Certificate.ExportPublicKeyCertificate(); File.WriteAllBytes(Path.Combine(savePath, "sslCertificate.crt"), sslCertData); } }); UpdateStatusStrip("Certificates generated successfully."); } catch (Exception ex) { MessageBox.Show(this, $"Error: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); UpdateStatusStrip(string.Empty); } ToogleControls(enabled: true); }