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!


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!

Redirect users with mailboxes in Office 365 from Exchange using NetScaler

I wrote a blog post about smart links to Office 365, but there’s also a way to make sure users with their mailboxes in Office 365 automatically are redirected to their Outlook Web Access there (with SSO). They key lies in using a 307 redirect instead of 301 or 302, where the post is sent to ADFS – and the username and password field (luckily) are the same in Exchange (tried it with 2013). I haven’t tried this with Windows Integrated Authentication internally, but should work just fine – but maybe needs some tweaking.

First off, as always, create the pattern sets and expressions (if not already created for your Exchange load balancing):

Next step, create the rewrite to actually redirect the user from Exchange to ADFS:

Remember to replace (it’s in a few different places) as well as the ADFS FQDN.

Now, create the rewrite policies and policy labels- and don’t forget to replace OFFICE365TENANT with your tenant name:

And as a last step, bind them to the vservers – in my case the load balancing vservers:

Leave a comment if you have any questions or if it doesn’t work – or if you have any better ways of doing this! I’ve tried it with Exchange 2013 and ADFS on 2012 R2.

Office 365 smart links with NetScaler and ADFS

A common issue in organizations moving to Office 365 is the different URLs the users have to remember. This can be made easier by for example smart links, where the users only have to remember something like ”” or ””.

This is something we can easily do with NetScaler and ADFS. See below for a few examples.

First, create a few pattern sets and expressions to reflect the different host headers:

In this case, they will do the following:

  • will point to but not use SSO in ADFS (internally), but rather allow the user to enter username and password.
  • will point to and use SSO in ADFS (internally)
  • will point to
  • will point to

Next step, create the responder actions. Different for internal and external usage:

In my case, I’ve added the ability to enter add a query string to onedrive, which forwards it to ADFS. For example, you’ll be able to go to and it will be entered in ADFS for you. Great to use in combination with other tools that already knows you username. Don’t forget to change and OFFICE365TENANT to your own.

Now we’ll create the responder policies and policy labels:


And as a last step, bind these policy labels to vserver, in my example to content switching vservers:

Please leave a comment if something doesn’t work as expected or you have some enhancements that can make this work even better! I’ve tried it with ADFS on Windows Server 2012 R2.

AAA form fill not working with Secure Web and CSRF token

One of the best things about XenMobile and Secure Web is the SSO integration with NetScaler. It usually ”just works”, but I actually got into an issue this time that was kind of interesting.

AAA form fill SSO using a web browser and AAA traffic policies worked without a problem, but when using the VPN traffic policies for Secure Web – the form fill only worked after manually refreshing the page.

After doing some initial troubleshooting and realizing it may be something deeper than just a misconfigured SSO, I decided to do a workaround – which actually works quite well until the problem is solved.

For those interested, it does seem like the NetScaler finds the CSRF token and inserts it – just that it doesn’t work the first time:

My solution was inserting a JavaScript into the page and forcing Secure Web to refresh once – which magically gets the form fill to work:


(tech preview) Using multiple IPs on one NIC with NetScaler in Azure

Microsoft has released a tech preview to support multiple IPs on the same NIC in Azure. I’ve tried it with NetScaler and seems to be working like expected!

More info about it can be found here: Assign multiple IP addresses to virtual machines using PowerShell

As always, logon and select your subscription using PowerShell:

FYI: This may take a few minutes. Even after registring the features (and seeing them being registered), I received the following error message when trying to assign multiple IP configurations to one NIC: Subscription <ID> is not registered for feature Microsoft.Network/AllowMultipleIpConfigurationsPerNic required to carry out the requested operation.

It started working for me after running Register-AzureRmResourceProvider, but maybe I just didn’t wait long enough.

Verify that they have the state ”Registered”:

You can now go to the portal and assign new IP configurations, or do it from PowerShell. See below for how I added new IPs to an already existing NetScaler:

Now, just add a SNIP and then start working with your VIP or VIPs in NetScaler. Remember, this is still a Tech preview and shouldn’t be used in production – you may not get support from Microsoft or Citrix if something stops working.

Uppdatering till Skype for Business on Mac, version

Microsoft släppte nu i veckan en uppdatering till Skype for Business on Mac, version

Den senaste versionen innehåller en del rättningar på kända fel och buggar, bland de som ska vara åtgärdade finns:

  • Multiple prompts to leave meeting when pressing the hang-up button on a UC USB device.
    This is a known issue due to signaling with some USB devices.
  • Hold or resume the current call
    The hardware hold button works for the following devices for Lync for Mac while it doesn’t work on Skype for Business on Mac.

    • Polycom CX300 Desk phone
    • Jabra Bis 2400 II CC, headphone
    • Jabra Evolve 65 (Bluetooth dongle)
    • Jabra Evolve 65 (USB cable)
  • Skype for Business hangs after clicking on a meeting in the calendar
  • If the meeting invitation contains a specific text pattern like <<>>, it might cause Skype for Business on Mac to hang.
  • Menu to add/rename/delete contact group are disabled right after adding a new group
  • Expand/Collapse Group Chevron icon is out of sync with the list of contacts after minimize/maximize Skype for Business
  • When user tries to restart a video from the chat list, the user cannot see the remote user’s video

En fullständig lista över kända fel och buggar har Microsoft dokumenterat här:
Known issues – Skype for Business on Mac

För att hämta hem den senaste versionen, bege dig till nedanstående länk:

För att Outlook-integration med Skype for Business on Mac ska fungera optimalt, säkerställ att du har senaste versionen av Outlook 2016 for Mac. Minimum kravet är Outlook Mac build 15.27 (161010).


Uppdatering av Citrix XenApp 7.6 LTSR

I dagarna släpptes den senaste uppdateringen för XenApp 7.6 LTSR, Cumulative Update 3. Uppdateringen är släppt för samtliga licensnivåer av XenApp. Versioner för CU3 av de olika komponenterna är följande:

  • VDA för Klient OS* 7.6.3000
  • VDA för Server OS 7.6.3000
  • Delivery Controller 7.6.3000
  • Citrix Studio 7.6.3000
  • Citrix Director 7.6.3000
  • Group Policy Management Experience 2.5.3000
  • StoreFront 7.6.4
  • Provisioning Services* 7.6.4
  • Universal Print Server** 7.6.3000
  • Session Recording*** 7.6.3000


I och med att det är Citrix Long Term Service Release så är det inga större nyheter i de nya versionerna, utan främsta fokus har varit på att förbättra stabilitet och säkerhet ytterligare.

Om det är så att ni själva driftar en Citrix XenApp LTSR-plattform så skulle jag vilja rekommendera nedan verktyg från Citrix, deras LTSR Assistant. Verktyget kontrollerar att rätt versioner är installerade och att allt ser rätt ut utifrån ett versionsperspektiv.

Citrix LTSR Assistant:

Just nu fungerar verktyget endast upp till CU2, men jag är övertygad om att en uppdaterad version kommer inom närmsta dagar eller veckorna.

Används assistenten tillsammans med Citrix Scout kommer du få en riktigt bra överblick över din plattform!


*: Speciella villkor för Windows 10

**: Endast Windows Server 2008R2 SP1, Windows Server 2012, Windows Server 2012R2 som är supporterade OS

***: Endast med Citrix XenApp/XenDesktop Platinum-licens

Skype Room Systems v2 – enklare Skypemöten

Äntligen finns det användarvänliga videkonferenslösningar för Skype for Business som funkar till en rimlig kostnad – Skype Room Systems v2 med hårdvara från Logitech (tidigare kallat Project Rigel).

Kom in i konferensrummet och starta mötet på en gång med ett enda klick och koppla upp alla via video, ljud eller telefon på bara ett par sekund. Behöver du dela din skärm kopplar du in den och den delas i mötet och på skärm i konferensrummet automatiskt. Lättare kan det inte bli!

För bästa upplevelse, kontakta oss för ett demo i vårt Showroom och konferensrum i Göteborg, men för ett snabbt intro vad man kan göra, se följande video:

Även teknikern kommer uppskatta systemet då det bygger på en vanlig Windows 10 Enterprise med en speciellt utformat applikation av Microsoft.