2

我使用 Citrix 的示例代码作为基础,并试图让它生成指示客户端使用其安全网关 (CSG) 提供程序的 ICA 文件。我的配置是,将 ICA 文件的服务器地址替换为 CSG 票证,并强制流量流向 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 论坛上找到的代码;但是,它破坏了我与 Farm 连接并获取我的应用程序列表的能力!

有人可以指出一个有效的代码示例吗?还是参考文件?

4

3 回答 3

1

问题中的代码基本上是正确的,但我太努力将配置注入启动的 ICA 生成器。

注意:使用WebInterface.conf文件作为指导是确定正确配置设置的好方法。即使代码是对的,配置也很敏感!

大多数 Citrix Secure Gateway (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 启用为红鲱鱼。

于 2009-03-30T21:08:17.680 回答
0

还有另一种更清洁、更可配置的方法。可以将代码设置为使用默认 Citrix Web Interface 使用的webinterface.conf文件。

以下代码应替换上述示例中的所有 farmConfig、STAGroup、ConnectionRoutinePolcy 和混乱。

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;
于 2009-04-03T18:19:04.193 回答
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 

我会让你用谷歌搜索密码,因为你应该改变它[原文如此]。

于 2009-04-09T16:19:36.743 回答