public void ExportPrivateKey_InPemFormat()
        {
            // Arrange
            var certificateGenerator = new CertificateGenerator();
            var keyPair = certificateGenerator.GetKeyPair();

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

            //Assert
            Assert.True(privateKeyText.StartsWith("-----BEGIN RSA PRIVATE KEY-----\r\n"));
            Assert.True(privateKeyText.EndsWith("\r\n-----END RSA PRIVATE KEY-----\r\n"));
        }
        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 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);
        }