private static void CreateCaCertificate(CertificateGenerator certificateGenerator, IProxyServerConfiguration proxyServerConfiguration)
        {
            var caKeyPair = certificateGenerator.GetKeyPair();

            IDictionary caCertificateDetails = new Hashtable();
            caCertificateDetails[X509Name.C] = "UK";
            caCertificateDetails[X509Name.O] = "Acceptance Test Proxy Organization";
            caCertificateDetails[X509Name.OU] = "Testing Department";
            //caCertificateDetails[X509Name.DnQualifier]; //populatated automatically from CN
            caCertificateDetails[X509Name.ST] = "London";
            caCertificateDetails[X509Name.CN] = "AcceptanceTestProxy CA";
            //caCertificateDetails[X509Name.SerialNumber] = CaCertificateName;  //populatated automatically

            //RFC 5208
            IList caCertificateDetailsOrder = new ArrayList();
            caCertificateDetailsOrder.Add(X509Name.C);
            caCertificateDetailsOrder.Add(X509Name.O);
            caCertificateDetailsOrder.Add(X509Name.OU);
            //caCertificateDetailsOrder.Add(X509Name.DnQualifier);
            caCertificateDetailsOrder.Add(X509Name.ST);
            caCertificateDetailsOrder.Add(X509Name.CN);
            //caCertificateDetailsOrder.Add(X509Name.SerialNumber);

            var caCertificate = certificateGenerator.GenerateCaCertificate(caKeyPair, caCertificateDetails, caCertificateDetailsOrder);

            var caKeyPairFileName = Path.Combine(proxyServerConfiguration.CertificatePath, proxyServerConfiguration.CaKeyPairFileName);
            if (File.Exists(caKeyPairFileName))
            {
                File.Delete(caKeyPairFileName);
            }
            var privateKeyText = certificateGenerator.ExportKeyPair(caKeyPair);
            File.WriteAllText(caKeyPairFileName, privateKeyText);

            var caCertificateFileName = Path.Combine(proxyServerConfiguration.CertificatePath, proxyServerConfiguration.CaCertificateFileName);
            if (File.Exists(caCertificateFileName))
            {
                File.Delete(caCertificateFileName);
            }
            var certificateText = certificateGenerator.ExportCertificate(caCertificate);
            File.WriteAllText(caCertificateFileName, certificateText);
        }
        public void ExportCertificate_InPemFormat()
        {
            // Arrange
            var certificateGenerator = new CertificateGenerator();
            var caKeyPair = certificateGenerator.GetKeyPair();
            const string caSubjectName = "Test CA";

            IDictionary caCertificateDetails = new Hashtable();
            caCertificateDetails[X509Name.CN] = caSubjectName;

            IList caCertificateDetailsOrder = new ArrayList();
            caCertificateDetailsOrder.Add(X509Name.CN);

            var caCertificate = certificateGenerator.GenerateCaCertificate(caKeyPair, caCertificateDetails, caCertificateDetailsOrder);

            //Act
            var certificateText = certificateGenerator.ExportCertificate(caCertificate);

            //Assert
            Assert.True(certificateText.StartsWith("-----BEGIN CERTIFICATE-----\r\n"));
            Assert.True(certificateText.EndsWith("\r\n-----END CERTIFICATE-----\r\n"));
        }
        public void ImportCertificate_InPemFormat()
        {
            // Arrange
            var certificateGenerator = new CertificateGenerator();
            var caKeyPair = certificateGenerator.GetKeyPair();
            const string caSubjectName = "Test CA";

            IDictionary caCertificateDetails = new Hashtable();
            caCertificateDetails[X509Name.CN] = caSubjectName;

            IList caCertificateDetailsOrder = new ArrayList();
            caCertificateDetailsOrder.Add(X509Name.CN);

            var caCertificate = certificateGenerator.GenerateCaCertificate(caKeyPair, caCertificateDetails, caCertificateDetailsOrder);
            var certificateText = certificateGenerator.ExportCertificate(caCertificate);

            //Act
            var certificate = certificateGenerator.ImportCertificate(certificateText);

            //Assert
            Assert.AreEqual(caCertificate.GetPublicKey(), certificate.GetPublicKey());
        }