/// <summary>
        /// Creates certificate authority certificate if required.
        /// </summary>
        /// <param name="proxyServerConfiguration"></param>
        /// <param name="certificateGenerator"></param>
        /// <param name="certificateCache"></param>
        /// <returns></returns>
        private static CertificateManager GetCertificateManager(ProxyServerConfiguration proxyServerConfiguration, CertificateGenerator certificateGenerator, CertificateCache certificateCache)
        {
            var caCertificateFileName = Path.Combine(proxyServerConfiguration.CertificatePath, proxyServerConfiguration.CaCertificateFileName);
            if (!File.Exists(caCertificateFileName))
            {
                CreateCaCertificate(certificateGenerator, proxyServerConfiguration);
            }

            AsymmetricCipherKeyPair caKeyPair = null;
            try
            {
                var caKeyPairText = File.ReadAllText(Path.Combine(proxyServerConfiguration.CertificatePath, proxyServerConfiguration.CaKeyPairFileName));
                caKeyPair = certificateGenerator.ImportKeyPair(caKeyPairText);
            }
            catch (Exception ex)
            {
                throw new ConfigurationErrorsException(string.Format("Could not read the ca private key from file from {0}", proxyServerConfiguration.CaKeyPairFileName), ex);
            }

            X509Certificate caCertificate = null;
            try
            {
                var caCertificateText = File.ReadAllText(Path.Combine(proxyServerConfiguration.CertificatePath, proxyServerConfiguration.CaCertificateFileName));
                caCertificate = certificateGenerator.ImportCertificate(caCertificateText);
            }
            catch (Exception ex)
            {
                throw new ConfigurationErrorsException(string.Format("Could not read the ca certificate from file from {0}", proxyServerConfiguration.CaCertificateFileName), ex);
            }

            var certificateManager = new CertificateManager(certificateCache, caKeyPair, caCertificate);
            return certificateManager;
        }
        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());
        }