private void IBackgroundWorkerC_DoWork(object sender, DoWorkEventArgs e)
        {
            string LStrServerHost      = string.Empty;
            bool   LBoolDownloaded     = false;
            bool   LBoolInstalled      = false;
            string LStrCertificateFile = string.Empty;
            string LStrCallReturn      = string.Empty;

            try
            {
                LBoolDownloaded = CertificateOperations.DownloadCertificate(IListConnectInfo[0], IListConnectInfo[1], "UMP.S." + IListConnectInfo[0] + ".pfx", ref LStrCallReturn);
                if (!LBoolDownloaded)
                {
                    I00003OperationReturn.BoolReturn   = false;
                    I00003OperationReturn.StringReturn = LStrCallReturn;
                    return;
                }
                LStrCertificateFile = LStrCallReturn;
                e.Result            = LStrCertificateFile;

                if (!IBoolInRoot)
                {
                    LBoolInstalled = CertificateOperations.InstallCertificate(LStrCertificateFile, "VoiceCyber,123", StoreName.Root, StoreLocation.LocalMachine, ref LStrCallReturn);
                    if (!LBoolInstalled)
                    {
                        I00003OperationReturn.BoolReturn   = false;
                        I00003OperationReturn.StringReturn = LStrCallReturn;
                        return;
                    }
                }

                if (!IBoolInTrustedPublisher)
                {
                    LBoolInstalled = CertificateOperations.InstallCertificate(LStrCertificateFile, "VoiceCyber,123", StoreName.TrustedPublisher, StoreLocation.LocalMachine, ref LStrCallReturn);
                    if (!LBoolInstalled)
                    {
                        I00003OperationReturn.BoolReturn   = false;
                        I00003OperationReturn.StringReturn = LStrCallReturn;
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                I00003OperationReturn.BoolReturn   = false;
                I00003OperationReturn.StringReturn = "UMP001E003" + App.GStrSpliterChar + ex.Message;
            }
        }
Exemple #2
0
        //设置站点绑定的协议、端口
        private bool SetSiteProtolPort(List <string> AListStrSetting, ref string AStrReturn)
        {
            bool   LBoolReturn               = true;
            string LStrCallReturn            = string.Empty;
            Site   LSiteUMPPF                = null;
            int    LIntHttpBindingPort       = 0;
            int    LintHttpsBindingPort      = 0;
            int    LIntNetTcpBindingPort     = 0;
            string LStrCertificateFile       = string.Empty;
            string LStrCertificateHashString = string.Empty;

            byte[] LByteCertificateHash = null;

            try
            {
                App.GStrCatchException = string.Empty;
                AStrReturn             = "006";
                ServerManager LServerManager = new ServerManager();
                foreach (Site LSiteSingle in LServerManager.Sites)
                {
                    if (LSiteSingle.Name.Equals("UMP.PF"))
                    {
                        LSiteUMPPF = LSiteSingle; AStrReturn = string.Empty; break;
                    }
                }
                if (AStrReturn == "006")
                {
                    return(false);
                }

                App.WriteLog("SetBinding", string.Format("UMPSite getted."));

                LSiteUMPPF.Bindings.Clear();
                LServerManager.CommitChanges();
                LServerManager.Dispose();
                LServerManager = null;

                LBoolReturn = CertificateOperations.UninstallCertificate(AListStrSetting[0], StoreName.My, StoreLocation.CurrentUser, ref LStrCallReturn);
                LBoolReturn = CertificateOperations.UninstallCertificate(AListStrSetting[0], StoreName.My, StoreLocation.LocalMachine, ref LStrCallReturn);
                LBoolReturn = CertificateOperations.UninstallCertificate(AListStrSetting[0], StoreName.Root, StoreLocation.LocalMachine, ref LStrCallReturn);

                LStrCertificateFile = System.IO.Path.Combine(App.GStrSiteRootFolder, @"Components\Certificates", "UMP.S." + AListStrSetting[0] + ".pfx");
                if (File.Exists(LStrCertificateFile))
                {
                    File.Delete(LStrCertificateFile);
                }
                LBoolReturn = CertificateOperations.CreateCertificate(AListStrSetting[0], ref LStrCallReturn);
                if (!LBoolReturn)
                {
                    AStrReturn             = "013"; //在当前用户的 My 区域中创建证书失败
                    App.GStrCatchException = LStrCallReturn;
                    return(LBoolReturn);
                }

                App.WriteLog("SetBinding", string.Format("Server certificate created.\t{0}", LStrCallReturn));

                LStrCertificateHashString = LStrCallReturn;
                IStrBindHashString        = LStrCertificateHashString;
                LBoolReturn = CertificateOperations.ExportCertificate(LStrCertificateHashString, "VoiceCyber,123", LStrCertificateFile, ref LStrCallReturn);
                if (!LBoolReturn)
                {
                    AStrReturn             = "014"; //从当前用户的 My 区域中导出证书失败
                    App.GStrCatchException = LStrCallReturn;
                    return(LBoolReturn);
                }

                App.WriteLog("SetBinding", string.Format("Server certificate exported.\t{0}", LStrCertificateFile));

                LBoolReturn = CertificateOperations.CertificateIsExist(LStrCertificateHashString, StoreName.My, StoreLocation.LocalMachine, ref LStrCallReturn);
                if (!LBoolReturn)
                {
                    if (!string.IsNullOrEmpty(LStrCallReturn))
                    {
                        AStrReturn             = "018"; //检测本计算机的 My 区域中是否安装证书失败
                        App.GStrCatchException = LStrCallReturn;
                        return(LBoolReturn);
                    }
                    LBoolReturn = CertificateOperations.InstallCertificate(LStrCertificateFile, "VoiceCyber,123", StoreName.My, StoreLocation.LocalMachine, ref LStrCallReturn);
                    if (!LBoolReturn)
                    {
                        AStrReturn             = "015"; //向本计算机的 My 区域中安装证书失败
                        App.GStrCatchException = LStrCallReturn;
                        return(LBoolReturn);
                    }

                    App.WriteLog("SetBinding", string.Format("Install server certificate end.\t{0}", "My"));
                }

                LByteCertificateHash = CertificateOperations.ObtainCertificateCertHash(LStrCertificateHashString, StoreName.My, StoreLocation.LocalMachine, ref LStrCallReturn);
                if (LByteCertificateHash == null)
                {
                    LBoolReturn            = false;
                    AStrReturn             = "016"; //从本计算机的 My 区域中获取证书的哈希值数组失败
                    App.GStrCatchException = LStrCallReturn;
                    return(LBoolReturn);
                }

                App.WriteLog("SetBinding", string.Format("ObtainCertificateCertHash end."));

                LBoolReturn = CertificateOperations.CertificateIsExist(LStrCertificateHashString, StoreName.Root, StoreLocation.LocalMachine, ref LStrCallReturn);
                if (!LBoolReturn)
                {
                    if (!string.IsNullOrEmpty(LStrCallReturn))
                    {
                        AStrReturn             = "019"; //检测本计算机的 Root 区域中是否安装证书失败
                        App.GStrCatchException = LStrCallReturn;
                        return(LBoolReturn);
                    }
                    LBoolReturn = CertificateOperations.InstallCertificate(LStrCertificateFile, "VoiceCyber,123", StoreName.Root, StoreLocation.LocalMachine, ref LStrCallReturn);
                    if (!LBoolReturn)
                    {
                        AStrReturn             = "017"; //向本计算机的 Root 区域中安装证书失败
                        App.GStrCatchException = LStrCallReturn;
                        return(LBoolReturn);
                    }

                    App.WriteLog("SetBinding", string.Format("Install server certificate end.\t{0}", "Root"));
                }

                LServerManager = new ServerManager();
                foreach (Site LSiteSingle in LServerManager.Sites)
                {
                    if (LSiteSingle.Name.Equals("UMP.PF"))
                    {
                        LSiteUMPPF = LSiteSingle; AStrReturn = string.Empty; break;
                    }
                }
                LIntHttpBindingPort  = int.Parse(AListStrSetting[1]);
                LintHttpsBindingPort = LIntHttpBindingPort + 1;

                LSiteUMPPF.Bindings.Add("*:" + AListStrSetting[1] + ":", "http");
                LSiteUMPPF.Bindings.Add("*:" + LintHttpsBindingPort.ToString() + ":", LByteCertificateHash, "MY");
                LSiteUMPPF.Bindings.Add(AListStrSetting[2] + ":*", "net.tcp");

                App.WriteLog("SetBinding", string.Format("Add binding end."));

                //LSiteUMPPF.ApplicationDefaults.EnabledProtocols
                var app = LSiteUMPPF.Applications["/WCF1600"];
                if (app != null)
                {
                    app.EnabledProtocols = "http,net.tcp";

                    App.WriteLog("SetBinding", string.Format("Set protocol for WCF1600 end."));
                }
                LServerManager.CommitChanges();
                LServerManager.Dispose();
                LServerManager = null;
            }
            catch (Exception ex)
            {
                LBoolReturn            = false;
                AStrReturn             = "010";
                App.GStrCatchException = "SetSiteProtolPort()" + ex.ToString();
            }

            return(LBoolReturn);
        }