private void RequestNewButton_Click(object sender, EventArgs e) { try { NodeId requestId = null; bool newPrivateKeyRequired = false; if (!String.IsNullOrEmpty(m_application.CertificatePrivateKeyPath)) { string path = Utils.GetAbsoluteFilePath(m_application.CertificatePrivateKeyPath, true, false, false); newPrivateKeyRequired = path == null; } else if (!String.IsNullOrEmpty(m_application.CertificateStorePath)) { CertificateIdentifier id = new CertificateIdentifier(); id.StoreType = CertificateStoreIdentifier.DetermineStoreType(m_application.CertificateStorePath); id.StorePath = m_application.CertificateStorePath; id.SubjectName = m_application.CertificateSubjectName.Replace("localhost", System.Net.Dns.GetHostName()); newPrivateKeyRequired = id.Find(true) == null; } else if (!String.IsNullOrEmpty(m_application.ServerUrl)) { newPrivateKeyRequired = true; } byte[] certificateRequest = null; if (m_application.RegistrationType == RegistrationType.ServerPush) { byte[] nonce = new byte[32]; System.Security.Cryptography.RandomNumberGenerator.Create().GetBytes(nonce); certificateRequest = m_server.CreateCertificateRequest(null, null, null, false, nonce); newPrivateKeyRequired = false; if (m_server.Endpoint != null && m_server.Endpoint.Description.ServerCertificate != null) { m_certificate = new X509Certificate2(m_server.Endpoint.Description.ServerCertificate); } } if (newPrivateKeyRequired || RequestNewPrivateKey || m_certificate == null) { m_certificatePassword = null; // Guid.NewGuid().ToString(); string privateKeyFormat = GetPrivateKeyFormat(); string[] domainNames = GetDomainNames(); string subjectName = GetSubjectName(domainNames); requestId = m_gds.StartNewKeyPairRequest( m_application.ApplicationId, null, null, subjectName, domainNames, privateKeyFormat, m_certificatePassword); } else { if (certificateRequest == null) { var certificate = m_certificate; byte[] privateKey = null; bool isPemKey = false; if (!certificate.HasPrivateKey) { if (!String.IsNullOrEmpty(m_application.CertificatePrivateKeyPath)) { string path = Utils.GetAbsoluteFilePath(m_application.CertificatePrivateKeyPath, true, false, false); if (path != null) { privateKey = File.ReadAllBytes(path); isPemKey = path.EndsWith("PEM", StringComparison.OrdinalIgnoreCase); } } } certificateRequest = CertificateAuthority.CreateRequest( certificate, privateKey, isPemKey, null, null, null, null, 256); } requestId = m_gds.StartSigningRequest(m_application.ApplicationId, null, null, certificateRequest); } m_application.CertificateRequestId = requestId.ToString(); CertificateRequestTimer.Enabled = true; RequestProgressLabel.Visible = true; WarningLabel.Visible = false; } catch (Exception exception) { MessageBox.Show(Parent.Text + ": " + exception.Message); } }