2009-03-02 7 views
2

Ich verwende den Beispielcode von Citrix als Basis und versuche, ICA-Dateien zu generieren, die den Client anweisen, seinen Secure Gateway (CSG) -Anbieter zu verwenden. Meine Konfiguration ist, dass die Serveradresse der ICA-Datei durch ein CSG-Ticket ersetzt wird und der Datenverkehr gezwungen ist, zum CSG zu gehen.Wie kann ich Citrix Websites so codieren, dass sie ein Secure Gateway (CSG) verwenden?

Die Herausforderung besteht darin, dass sowohl der Citrix App Server (der die ICA-Sitzung auf 1494 bereitstellt) als auch die CSG über eine Secure Ticket Authority (STA) koordiniert werden müssen. Das bedeutet, dass mein Code beim Erstellen der ICA-Datei mit der STA kommunizieren muss, da die STA ein Ticket enthält, das die CSG in die ICA-Datei einbinden muss. Verwirrend? Sicher! Aber es ist viel sicherer.

Die Pre-CSG-Code sieht wie folgt aus:

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

ich in die ICA Generation zur SSLEnabled Informationen versucht, aber es war nicht genug. hier ist der Code:

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

Jetzt sieht es aus wie ich die STA registrieren müssen, wenn ich meine Farm konfigurieren:

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); 

Dies basiert auf Code, den ich auf dem Citrix Forums gefunden; Es bricht jedoch meine Fähigkeit, sich mit der Farm zu verbinden und meine Anwendungsliste zu bekommen!

Kann mir jemand auf ein Beispiel von Code hinweisen, der funktioniert? Oder ein Referenzdokument?

Antwort

1

Der Code in der Frage ist grundsätzlich richtig, aber ich habe zu viel versucht, Konfiguration in den startenden ICA-Generator zu injizieren.

Hinweis: Die Verwendung der Datei WebInterface.conf für Anleitungen ist eine gute Möglichkeit, die richtigen Konfigurationseinstellungen zu bestimmen. Auch wenn der Code stimmt, ist die Konfiguration sehr empfindlich!

Die meisten Secure Magic Gateway (CSG)/Secure Ticket Authority (STA) Magie passiert, wenn die Richtlinie für die erste Verbindung mit der Farm eingerichtet ist. Insbesondere in Global.asax.cs, müssen Sie die folgenden Code-Blöcke haben:

1) Sie eine gültige STAGroup haben muss:

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

2) Sie eine CSG-Verbindung erstellen müssen (mit der STA abgebildet):

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

3) müssen Sie die Richtlinie Standard festlegen

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

4) müssen Sie die launchInfo sagen, dass Sie CGP sein wollen aktiviert:

launchInfo.setCGPEnabled(true); 

ACHTUNG: Die SSL als roter Hering aktiviert.

0

Es gibt eine andere Möglichkeit, dies zu tun, die sauberer und konfigurierbarer ist. Der Code kann so eingerichtet werden, dass die Datei webinterface.conf verwendet wird, die vom Citrix Webinterface verwendet wird.

Der folgende Code sollte alle farmConfig, STAGroup, ConnectionRoutinePolcy, Chaos im obigen Beispiel ersetzen.

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

Ein weiterer Hinweis auf dieses Problem bei der Verwendung des JICA-Clients mit einem internen Zertifikat (nicht vertrauenswürdigen Stamm).

Der JICA-Client lässt Sie kein Zertifikat von einem nicht vertrauenswürdigen Stammverzeichnis annehmen, daher war es erforderlich, das Zertifikat dem Java CA-Speicher hinzuzufügen. Das Hinzufügen zum Windows Store bringt nichts!

Ihre dev Root-CA holen navigieren dann bin Verzeichnis der neuesten Java installieren (in der Regel unter C: \ Programme \ Java \ jre ***)

Führen Sie den folgenden Befehl ein:

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

Ich lasse Sie Google für das Passwort, weil Sie angeblich ändern [sic].