2009-03-02 147 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]。