示例#1
0
        public void CheckIfCertificateIsprivate(TEntity item, string certificateName, IntegrationAccountDetails iaDetails)
        {
            try
            {
                string filepath    = FileOperations.GetCertificateJsonFilePath(certificateName);
                string content     = File.ReadAllText(filepath);
                var    certificate = JsonConvert.DeserializeObject <JsonCertificate.Rootobject>(content);
                if (certificate.properties.key != null)
                {
                    string keyvaultname = iaDetails.KeyVaultName;
                    if (string.IsNullOrEmpty(keyvaultname))
                    {
                        throw new Exception("Couldn't find the name of the Key Vault to upload the Private key for the Private Certificate. Make sure you selected a Key Vault at the Integration Account Details Screen");
                    }
                    string certName                      = FileOperations.GetFileName(certificateName);
                    string keyvaultfilepath              = FileOperations.GetKeyVaultJsonFilePath(certName + "Privatekey");
                    IntegrationAccountContext sclient    = new IntegrationAccountContext();
                    AuthenticationResult      authresult = thisApplicationContext.GetProperty("KeyVaultAuthorization") as AuthenticationResult;
                    string kid = sclient.UploadCertificatePrivateKeyToKeyVault(StringOperations.RemoveAllSpecialCharacters(certName) + "Privatekey", keyvaultname, keyvaultfilepath, authresult);
                    certificate.properties.key.keyName     = StringOperations.RemoveAllSpecialCharacters(certName) + "Privatekey";
                    certificate.properties.key.keyVersion  = kid;
                    certificate.properties.key.keyVault.id = string.Format(ConfigurationManager.AppSettings["KeyVaultResourceIdTemplate"], iaDetails.SubscriptionId, iaDetails.ResourceGroupName, keyvaultname);
                    //certificate.properties.key.keyVault.name = certName + "Privatekey";

                    string fileName = FileOperations.GetCertificateJsonFilePath(certName);
                    string partnerJsonFileContent = JsonConvert.SerializeObject(certificate);
                    File.WriteAllText(fileName, partnerJsonFileContent);
                }
            }
            catch (Exception ex)
            {
                SetStatus(item, MigrationStatus.Failed, string.Format("Certificate Migration Failed. Reason:{0}", ExceptionHelper.GetExceptionMessage(ex)));
                TraceProvider.WriteLine(string.Format("Certificate Migration Failed. Reason:{0}", ExceptionHelper.GetExceptionMessage(ex)));
                TraceProvider.WriteLine();
                throw ex;
            }
        }
示例#2
0
        public void CreateCertificates(string certName, string certThumbprint)
        {
            try
            {
                X509Certificate2           partnerCert;
                string                     partnerCertBase64String;
                bool                       certFound  = false;
                X509Certificate2Collection collection = new X509Certificate2Collection();
                //BiztalkServerDetails BizTalkServerDetails = this.thisApplicationContext.GetService<BiztalkServerDetails>();
                //string serverName = BizTalkServerDetails.RemoteServerName;
                //if (BizTalkServerDetails.UseDifferentAccount)
                //{
                //    string domain = BizTalkServerDetails.RemoteDomainName;
                //    string username = BizTalkServerDetails.RemoteUserName;
                //    string password = BizTalkServerDetails.RemoteUserPassword;
                //    using (UserImpersonation user = new UserImpersonation(username, domain, password))
                //    {
                //        if (user.ImpersonateValidUser())
                //        {
                //collection = GetCertificate(certThumbprint, serverName);
                //if (collection.Count == 0)
                //{
                //    certFound = false;
                //}
                //else
                //{
                //    certFound = true;
                //}
                //}
                //else
                //{
                //    throw new Exception(string.Format(@"Failed to read Certificates from the Server {0}\{1}. Invalid Credentails used to read Certificates.", domain, username));
                //}
                // }
                // }
                //else
                //{
                string serverName = System.Environment.MachineName;
                collection = GetCertificate(certThumbprint, serverName);
                if (collection.Count == 0)
                {
                    certFound = false;
                }
                else
                {
                    certFound = true;
                }
                // }
                if (certFound)
                {
                    partnerCert             = collection[0];
                    partnerCertBase64String = Convert.ToBase64String(partnerCert.GetRawCertData());
                    JsonCertificate.Rootobject certificateRootObject = new JsonCertificate.Rootobject()
                    {
                        name       = FileOperations.GetFileName(certName),
                        properties = new JsonCertificate.Properties()
                        {
                            publicCertificate = partnerCertBase64String,
                            metadata          = GenerateMetadata(certName)
                        }
                    };

                    if (partnerCert.HasPrivateKey)
                    {
                        //CHECK IF IT's EXPORTABLE, and ensure you write traces
                        certificateRootObject.properties.key = new JsonCertificate.Key()
                        {
                            keyName    = "<KeyNameHere>",
                            keyVersion = "<KeyVersionHere>",
                            keyVault   = new JsonCertificate.KeyVault()
                            {
                                id = "<ResourceUriHere>"
                            }
                        };

                        //TODO: Create KeyVault Secret JSON.
                        string keyvaultjson     = this.GetKeyVaultSecretJsonForPrivateKey(partnerCert);
                        string keyvaultfilename = FileOperations.GetKeyVaultJsonFilePath(certName + "Privatekey");
                        FileOperations.CreateFolder(keyvaultfilename);
                        System.IO.File.WriteAllText(keyvaultfilename, keyvaultjson);
                    }
                    string fileName = FileOperations.GetCertificateJsonFilePath(certName);
                    string partnerJsonFileContent = Newtonsoft.Json.JsonConvert.SerializeObject(certificateRootObject);
                    FileOperations.CreateFolder(fileName);
                    System.IO.File.WriteAllText(fileName, partnerJsonFileContent);
                    TraceProvider.WriteLine(string.Format("Certificate {0} for partner has been succesfully exported to Json with Name {1}", certName, FileOperations.GetFileName(certName)));
                }
                else
                {
                    TraceProvider.WriteLine(string.Format("Certificate Export to Json Failed. Reason : Certificate {0} Not Found in LocalCertificate store in Server {1}", certName, serverName));
                    throw new Exception(string.Format("Certificate {0} Not Found in LocalCertificate store in Server {1}", certName, serverName));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }