/// <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 ImportKeyPair_InPemFormat()
        {
            // Arrange
            var certificateGenerator = new CertificateGenerator();
            var caKeyPair = certificateGenerator.GetKeyPair();

            var privateKeyText = certificateGenerator.ExportKeyPair(caKeyPair);

            //Act
            var keyPair = certificateGenerator.ImportKeyPair(privateKeyText);

            //Assert
            Assert.AreEqual(caKeyPair.Private, keyPair.Private);
            Assert.AreEqual(caKeyPair.Public, keyPair.Public);
        }