private void GenerateSiteCertificate(CertificateGenerator certificateGenerator, string certificatePath, string host, string password)
        {
            var keyPair = _caKeyPair;

            IDictionary certificateDetails = new Hashtable();
            certificateDetails[X509Name.CN] = host;

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

            var certificate = certificateGenerator.GenerateCertificateSignedWithCaCertificate(_caKeyPair, _caCertificate, keyPair, certificateDetails, certificateDetailsOrder);
            var certificateData = certificateGenerator.ExportPfxCertificateWithPrivateKey(certificate, keyPair, password);
            var certificateFileName = Path.Combine(certificatePath, host + ".pfx");

            File.WriteAllBytes(certificateFileName, certificateData);

            Logger.InfoFormat("Create certificate for host: {0}", host);
        }
        public void GenerateCertificateSignedWithCaCertificate_SignedWithCaCertificate_ValidCertificate()
        {
            // 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 keyPair = certificateGenerator.GetKeyPair();
            const string subjectName = "www.google.com";

            IDictionary certificateDetails = new Hashtable();
            certificateDetails[X509Name.CN] = subjectName;

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

            // Act
            var certificate = certificateGenerator.GenerateCertificateSignedWithCaCertificate(caKeyPair, caCertificate, keyPair, certificateDetails, certificateDetailsOrder);

            // Assert
            Assert.AreEqual("CN=" + caSubjectName, certificate.IssuerDN.ToString()); //Signed with CA
        }