2009-03-02 72 views
2

我使用Citrix的示例代碼作爲基礎,並試圖讓它生成引導客戶端使用其安全網關(CSG)提供程序的ICA文件。我的配置是將ICA文件的服務器地址替換爲CSG票據,並且流量被強制轉至CSG。如何將Citrix網站編碼爲使用安全網關(CSG)?

挑戰在於Citrix App Server(即在1494上提供ICA會話)和CSG都必須通過Secure Ticket Authority(STA)進行協調。這意味着我的代碼在創建ICA文件時需要與STA交談,因爲STA擁有CSG需要嵌入到ICA文件中的憑單。混亂?當然!但它更安全。

預CSG代碼如下所示:

AppLaunchInfo launchInfo = (AppLaunchInfo)userContext.launchApp(appID, new AppLaunchParams(ClientType.ICA_30)); 
ICAFile icaFile = userContext.convertToICAFile(launchInfo, null, null); 

我試圖SSLEnabled信息到ICA一代,但它是不夠的。下面是代碼:

launchInfo.setSSLEnabled(true); 
launchInfo.setSSLAddress(new ServiceAddress("CSG URL", 443)); 

現在,它看起來像我需要的時候配置我的農場註冊的STA:

ConnectionRoutingPolicy policy = config.getDMZRoutingPolicy(); 
policy.getRules().clear(); 

//Set the Secure Ticketing Authorities (STAs). 
STAGroup STAgr = new STAGroup(); 
STAgr.addSTAURL(@"http://CitrixAppServerURL/scripts/ctxsta.dll"); 

//creat Secure Gateway conenction 
SGConnectionRoute SGRoute = new SGConnectionRoute(@"https://CSGURL"); 
SGRoute.setUseSessionReliability(false); 
SGRoute.setGatewayPort(80); 
SGRoute.setTicketAuthorities(STAgr); 
// add the SGRoute to the policy 
policy.setDefault(SGRoute); 

這是基於代碼我在Citrix Forums發現;然而,它打破了我與農場連接並獲得我的應用程序列表的能力!

有人能告訴我一個有用的代碼示例嗎?還是參考文件?

回答

1

問題中的代碼基本上是正確的,但我努力將配置注入啓動ICA生成器。

注意:使用WebInterface.conf文件進行指導是確定正確配置設置的好方法。即使代碼是正確的,配置也非常敏感!

當初始連接到服務器場的策略建立時,大多數Citrix安全網關(CSG)/ Secure Ticket Authority(STA)魔術都會發生。具體而言,在Global.asax.cs中,必須具有下面的代碼塊:

1)必須有一個有效的STAGroup:

//Set the Secure Ticketing Authorities (STAs). 
STAGroup STAgr = new STAGroup(); 
STAgr.addSTAURL(@"http://[STA URL]/scripts/ctxsta.dll"); 

2)必須創建一個CSG連接(與映射的STA):

//create Secure Gateway conenction 
SGConnectionRoute SGRoute = new SGConnectionRoute(@"[CSG FQDN without HTTPS]"); 
SGRoute.setUseSessionReliability(false); 
SGRoute.setGatewayPort(443); 
SGRoute.setTicketAuthorities(STAgr); 

3)您需要設置策略缺省

// Create a DMZ routing policy 
ConnectionRoutingPolicy policy = config.getDMZRoutingPolicy(); 
policy.getRules().clear(); 
policy.setDefault(SGRoute); 

4),你需要告訴launchInfo你要啓用CGP:

launchInfo.setCGPEnabled(true); 

警告:爲紅鯡魚啓用SSL。

0

還有另一種方法可以做到這一點,它更乾淨,更易於配置。可以將代碼設置爲使用默認Citrix Web Interface使用的webinterface.conf文件。

以下代碼應取代上述示例中的所有farmConfig,STAGroup,ConnectionRoutinePolcy,mess。

InputStream inputStream = new FileInputStream(@"C:\temp\WebInterface.conf"); 
CtxConfig configInput = new CtxConfig(inputStream); 
Map settingsMap = configInput.getSettingsMap(); 
WIConfiguration wiConfiguration = ConfigurationParser.buildWIConfiguration(settingsMap); 

com.citrix.wing.config.Configuration config = new com.citrix.wing.config.Configuration(); 
config.setGlobalConfig(wiConfiguration.getGlobalConfig()); 
config.setMPSFarmConfigs(wiConfiguration.getMPSFarmConfigs()); 
config.setDMZRoutingPolicy(wiConfiguration.getDMZRoutingPolicy()); 
config.setClientProxyPolicy(wiConfiguration.getClientProxyPolicy()); 

// Create a StaticEnvironmentAdaptor instance. 
WIASPNetStaticAdaptor staticEnvAdaptor = new WIASPNetStaticAdaptor(this); 

// Create a WebPNBuilder instance. 
WebPNBuilder builder = WebPNBuilder.getInstance(); 
Application["WebPNBuilder"] = builder; 

// Create a WebPN instance from the configuration. 
WebPN webPN = builder.createWebPN(config, staticEnvAdaptor); 
Application["WebPN"] = webPN; 
0

關於使用帶有內部證書(非可信根)的JICA客戶端的此問題的另一個註釋。

JICA客戶端不允許您接受來自不可信根的證書,因此需要將證書添加到Java CA存儲。將它添加到Windows商店並沒有什麼好處!

獲取你的開發根CA,然後導航到最新的Java的bin目錄安裝(通常,在C:\ Program Files文件\的Java \ jre的***)

執行以下命令:

keytool -import -trustcacerts -keystore "..\lib\security\cacerts" -file "c:\temp\root.cer" -alias myroot 

我會讓你的谷歌密碼,因爲你應該改變[sic]。