Monthly archives: mars, 2017

Att styra Java inställningar i en Windows miljö

I Windows miljöer där man använder Java finns det oftast ett behov av att styra vissa inställningar för samtliga klienter. Nedan följer en guide på hur man specifikt styr säkerhetsinställnigar och sätter webbplatsundantag via konfigurationsfiler och en GPO.

Grundkonfiguration består av tre filer som sedan kopieras över via GPO till varje klient. Java läser sedan in konfigurationen från filerna och sätter de specificerade inställningar på klienten.


1. Skapa konfigurationsfiler

Man behöver skapa upp tre olika konfigurationsfiler enligt nedan. Dessa måste ligga på ett nätverksshare som klienterna har tillgång till.

  • Deployment.config
  • Deployment.properties
  • Exception.sites
  • 2. Filernas innehåll

    Lägg till nedan konfiguration i respektive konfigurationsfil. Tänk på att anpassningar kan krävas så att det passar just din miljö.

    Deployment.config
    Vi börjar med deployment.config där vi pekar ut vilka filer som innehåller konfigurationen och säger att den är obligatorisk.

    Deployment.properties
    Nästa fil är deployment.properties och här sätter vi att Java-innehåll ska vara aktiverat i webbläsaren, att säkerhetsinställningar ska vara låsta för förändringar, att säkerthetsnivån ska vara hög och vi definierar även en lista för webbplatsundantag.

    Exception.sites
    Exception.sites innehåller de sidor som man vill ha med i listan över webbplatsundantag.

    Viktigt att tänka på när man lägger till webbplatsundantag:

  • Ett protokoll krävs – FILE, HTTP och HTTPS är supporterade (HTTPS rekommenderas)
  • En domän krävs – Wildcards är inte supporterat
  • Enbart webbsidor som man litar på
  • 3. Skapa GPO

    Här sätter vi inställningar som gör att konfigurationsfilerna kopieras över från nätverkssharet till klienten. Notera att filerna kopieras till mappen C:/WINDOWS/Sun/Java/Deployment vilket innebär att inställningarna kommer slå för samtliga användare på klienten.

    4. Resultat på klient
    Efter en omstart av klienten så ska GPO:n ha kopierat över filerna och Java kommer då kunna läsa konfigurationsfilerna som nu finns lokalt på klienten. Vi kan kontrollera att säkerthetsinställningarna och webbplatsundantagen har fått genomslag genom att öppna Java-kontrollpanelen. På bilden nedan kan vi se att inställingarna har ändrats enligt våra konfiurationsfiler ovan.

    Notera att det går att anpassa och lägga till fler inställningar i konfigurationsfilen deployment.properties. Jag hänvisar därför till Oracles dokumentation för mer information här.



    StoreFront for Web med Firefox 52

    NPAPI är ett API som används för att identifiera plugin för webbläsare och tillåta dem att köras när man går in på sidor som kräver dem. API:et är väldigt gammalt och det finns många mer moderna och smidiga lösningar än att använda just NPAPI. För att få webutvecklare att gå över till nya teknologier och modernare lösningar har bland annat Google Chrome sedan en tid tillbaka slagit av stödet för API:et. The Mozilla Foundation har även dem meddelat sedan en tid tillbaka att det skulle slås av för Firefox – från version 53.

    I Citrix fall har NPAPI använts för att identifiera, aktivera och använda Citrix Receiver när man startar sessioner från Citrix StoreFront for Web, det vill säga när man loggar in i en webbläsare för att starta skrivbord eller publicerade applikationer.

    Det verkar som att Mozilla har ändrat sig och helt enkelt slagit av stödet en version tidigare än kommunicerat, vilket förmodligen kan ställa till det för en hel del mjukvaruutvecklare och systemleverantörer – där ibland Citrix. Som tur är så är Citrix väl förberedda och har redan släppt en lösning!

    Som nämnt var Citrix sett till att vara förberedda på NPAPI förändringen, från version 3.8 av Citrix StoreFront var allt förberett och planerat för att använda den nya tekniken så fort version 53 skulle komma. I och med att förändringen kom en version tidigare behöver administratörer gå in och manuellt ändra konfigurationen – det är väldigt enkelt!

    Det man behvöer göra är att modifiera sin *web.config* för de StoreFront Stores som används för StoreFront for Web (C:\inetpub\wwwroot\Citrix\StoreWeb, där StoreWeb är namnetpåstore+Web).

    Leta där i upp följande rad:

    Och ändra till:

    Som den uppmärksamme läsaren möjligen noterar så uppdaterar man den regexp som definierar vilka versioner av Firefox den så kallade protocolHandlern skall användas istället för native NPAPI från version 5[3-9] till 5[2-9] – helt enkelt från 53-59 till 52-59.

    Efter en replikering av inställningarna, vid högt tillgänglig StoreFront, och en iisreset så skall Firefox åter fungera perfekt med Citrix StoreFront for Web.

    Lycka till!

    Källa: https://www.citrix.com/blogs/2017/03/15/firefox-52-and-citrix-receiver-for-web/



    NetScaler expression for matching paths

    I’ve been using a few different ways of matching paths in pattern sets, and in the beginning I used two different (one for equals and one for starts with) – but after a few rounds with both customers and Citrix we’ve come up with a really simple way of matching paths in a way that makes it easy to work with. Let’s call it more future proof than other ways I’ve done it before.

    The main issue was before that if I created an expression to match a path that starts with for example ”/api/v1/resources/” it didn’t match ”/api/v1/resources?query=value” and if I used start with ”/api/v1/resources” it would also match ”/api/v1/resources-dynamic”. I started out using two different pattern sets and expressions (one for equals and one for starts with) but that became a hassle when it started growing. After bouncing this with Citrix we came up with the following which works like a charm:

    In this case, it was the AFTER_STR_ANY(”PATSET_IC_WEBAPP”).STARTSWITH(”/”) that actually appends a / to the end when matching the startswith – making sure that we never check /api/v1/resources with starts with but instead using /api/v1/resources/ but not having to write the last slash in the pattern set.

    The above example is used with integrated caching to match specific resources to cache, but this can be used together with responders to allow or deny traffic to paths as well – your imagination is the limit.

    Do you know of any other ways of solving this? Please share!



    Using NetScaler and MaxMind API to insert GeoIP headers to backend

    There are some really great blog posts out there regarding GeoIP and NetScaler (Neil Spellings for example). In this case, I need to insert City, Country and Continent into headers to the backend.

    My first thought was to use the internal GeoIP (location) database in NetScaler, but it isn’t supported yet to print information from it (send me an email if you want the RFE ID). The next step was to start working with the latest MaxMind API which supports all three data sets. Unfortunately, there’s a bug in the XPATH_JSON parser in NetScaler that can’t handle 3-byte UTF-8 characters (Japanese characters for example). This is something being fixed and will be released later (same here, send me an email if you want the BUG ID). Since NetScaler is the best product out there, and the NetScaler team is the greatest ever, they made a policy exentsion to fix the issue until it’s fixed in the code.

    Until the bug is fixed, the following policy extension is needed:

    Now, let’s take a look at how we can utilize MaxMinds API to create these headers.

    First off, create a load balancing vserver for MaxMind:

    Next step, create the callout (and use the policy extension until the bug is fixed):

    Please note: Change the authorization header to your own.

    This will now cache the following (if IC is licensed and enabled): ”City;Country;Continent”

    Now, let’s create the rewrites and add them to a vserver:

    See below for how it’s cached:

    I just tried it out with NGINX as backend with the following configuration:

    And we get a nice and clean response:

    Feel free to leave a comment if you have issues with anything or if you know better ways of doing it!