Jabber and Group Configuration Files

Jabber 10.6 is bringing a wealth of new features and functionality to the desktop. However we’re getting to a point you might not want to enable all of these slick features for your entire enterprise. So I’ve recently fielded a question how to ‘group’ enable features.

Let’s get a little context with configuration files so you’ll understand when and when not to have group configuration files. If you’d like to spend time reading the deployment and installation guide you can get more details.

Global configuration files applies to all users. This file (jabber-config.xml) is downloaded by the client from your TFTP nodes. (cough.. UDS via HTTPS). Group configuration files applies to subset of users and take priority over global configuration files.

The ‘take priority’ piece is what you need to logically plan for. You may even think of the global configuration file as a baseline for the environment and have features added by a group configuration file only. This may get to be a lot of work so don’t go overboard with group configuration files. You’ll end up creating a lot of work maintaining the CSF devices.

The group configuration file is uploaded and maintained just like the global one. You can create a group naming convention that suits your needs. Some have used something similar such as ‘jabber-config-group1.xml’ or feature specific as ‘jabber-config-hunt.xml’ that takes the global config and adds in the hunt group tab.

So where do you specify this group configuration file? On the CSF, BOT, TCT, or TAB “Cisco Support Field”. Yes I know this isn’t the greatest place to maintain this and it’s already been suggested to break this out into another field but that isn’t the direction we’re going. This is really only a stop gap or you have a specific group of people you need to add a feature or turn off a feature. Executives and Contact Centers come to mind.

So scroll down to “Cisco Support Field” and put in something like this.
configurationfile=jabber-config-group1.xml

You can even get creative with TFTP directories if you already have this going on CUCM. So configurationfile=/folder/jabber-config-group1.xml

If you’re uploading the file for the first time you’ll need to restart your TFTP service. If the file already exists and you’re simply making changes you do not need to restart the TFTP service. Send me a note on Twitter if you’d like me to post an explanation of this.

Another thing to note is that the Jabber client will be notified of this change and if it determines it needs a restart it will prompt the user to log out and sign back in.

I’d recommend creating a test XML file for your deployment so you can test the enabling and disabling of features without affecting the enterprise population. Once you get the hang of policies and working with different files you’ll be able to test and roll out new features very quickly.

Thanks and happy Jabbering!

Advertisements

Unity Connection 10.5 SAML SSO with ADFS

Having a functional SAML SSO product in place is important before attempting to connect any Cisco collaboration applications to it. I’m focusing on Microsoft ADFS because it seems to be the current go-to product for Microsoft centric organizations.

You need to collect and check your federation metadata file before starting any Unity Connection configuration. This file gives you the value you need to configure the custom claim rule on ADFS. You can download the file from https://adfs.domain.com/FederationMetadata/2007-06/FederationMetadata.xml

Open this file and get your entityID and in my configuration this looks like https://adfs.domain.com/adfs/services/trust

Go ahead and collect the file from Unity Connection on the SAML SSO configuration page by clicking “Export All Metadata”. You’ll need this file available to your ADFS management application so copy it to your server.

Now we have everything we need and it’s time to configure ADFS and Unity Connection.

  1. Open the ADFS Management application
  2. Select Add Relying Party Trust.
  3. From Add Relying Party Trust Wizard Welcome page, click Start.
  4. From the Select Data Source screen, click the Import data about the relying party from a file radio button and browse to the Fedlet metadata XML file which you downloaded from the SAML Single Sign-on configuration pages. Click Next.
  5. From the Specify Display Name screen, enter a name in the Display name field. Click Next.
  6. From the Choose Issuance Authorization Rules screen, choose Permit All Users to access this relying party. Click Next.
  7. Review the settings on the Ready to Add trust screen. Click Next.
  8. To add the Claim Rules, from the Finish screen, check the Open the Edit Claim Rules dialog for this relying party trust when the wizard closes check box. Click Close.
  9. From the Edit Claim Rules screen, click Add Rule.
  10. Select the default Claim Rule template Send LDAP Attributes as Claims. Click Next.
  11. From the Configure Claim Rule screen, enter a claim rule name (Example: “Send uid attribute”) in the Configure rule name field.
  12. From the Attribute store drop-down list, choose Active Directory.
  13. From the LDAP Attribute drop-down list, choose the attribute in the directory that the Cisco Unified Communications application end users are synchronized with (typically “sAMAccountName” or “userPrincipalName”).
  14. From the Outgoing Claim Type drop-down list, enter “uid”. Note: “uid” will not appear in the list of drop-down items, you must manually enter it.
  15. Click Finish.
  16. To add a second rule, click Add Rule.
  17. From the Claim rule template drop-down list, select Send Claims Using a Custom Rule.
  18. In Claim rule name field, enter a name (Example: “Send additional attributes”).
  19. See the next paragraph and code and after pasting click OK and Apply.

So now you can paste your custom claim rule to this ADFS text input box. There is a bit of an issue copy and pasting this correctly from the Cisco documentation and the fact it’s plain wrong in Cisco documentation. Note the two modifications below for entityID and FQDN for Unity Connection on the last line. You should be able to copy below, modify two lines and be able to paste into ADFS management.

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]

=> issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer =

c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType,

Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] =

"urn:oasis:names:tc:SAML:2.0:nameid-format:transient",

Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/namequalifier"] =

"https://adfs.domain.com/adfs/services/trust",

Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/spnamequalifier"] =

"unityconnection.domain.com");

Now that all of this has been done you can configure Unity Connection by clicking Enable SAML SSO and following the dialogs. Once you enable SAML SSO obviously you’ll need LDAP users synchronized with administrative privileges on the Unity Connection server. The recovery URL will be available on the start web page just in case ADFS is not functioning.

If everything is working click “Run SSO Test…” and select your administrator account that is synchronized via LDAP. If the redirect works and your browser automatically signs into ADFS you’ll get the wonderful pop-up below.

SSOWorks

Configuring Cisco Jabber Problem Reporting

Cisco Jabber has an administrative feature allowing users to submit problem reports directly from the user interface. When troubleshooting issues with Jabber this is usually one of the first steps. I consider this a better method instead of having the user save the PRT zip file, subsequently lose it on their computer, and then clogging your inbox.

The nuts and bolts of how this works is briefly described in the Cisco Jabber installation and configuration guide. You need a method to submit the problem report and a method to retrieve the problem report. This post is purely focusing on how to submit the problem report to a server and it’s up to you on how to retrieve it. If you’re anticipating using this frequently or in an enterprise you’re going to need to do some light file handling on the server side. The Cisco problem reporting upload mechanism doesn’t randomize file names during the upload.

I’m working with my FreeBSD server specialized for Jabber functions so underneath I have Apache and PHP. The disclaimer I’m going to insert is that is up to YOU to secure your installation. Creating a free-for-all upload location on your network poses a big security risk. My goal here is to give you the basics with Jabber and what it is doing.

Cisco Jabber does an HTTP POST directly to the URL you specified in your jabber-config.xml. This HTTP POST contains the following information so this is merely informational if you would like use a different upload method. The “ciscoID” portion of the POST is generated by the Cisco JID.

POST /uploadprt.php HTTP/1.1
Request Method: POST
Host: yuengling.brewery.com
Full request URI: http://yuengling.brewery.com/uploadprt.php
Type: multipart/form-data
Content-Disposition: form-data; name="zipFileName"; filename="PROBLEM_FEEDBACK_Cisco_Jabber_ciscoID.zip"

Now that you know how Cisco Jabber uploads to your server you need a corresponding catch-all script to accept the upload. Cisco gives you an example HTML form that you can put on your server. This form is optional and not necessary to have Cisco Jabber automatically upload PRTs. The goal was to provide you an example of how you need to accept the ‘zipFileName’ form data.

uploadprt.html

<form name="uploadPrt" action="http://yuengling.brewery.com/uploadprt.php" method="post" enctype="multipart/form-data">
 <input type="file" name="zipFileName" id="zipFileName" />

 <input type="submit" name="submitBtn" id="submitBtn" value="Upload File" />
</form>

The next piece of the puzzle is the uploadprt.php file and how it interacts with the incoming HTTP POST from Jabber. Jabber uploads a file name that is exactly “PROBLEM_FEEDBACK_Cisco_Jabber_ciscoID.zip” and if you do nothing else to the file name the user will continually overwrite the same file. So I decided to go ahead and add a time-stamp which you can see below in the $uploadfile variable.

I do not recommend you use this code without adding in proper file handling controls. I’m working in a sealed environment so this is the bare essential method to accept the upload. Obviously the $uploaddir needs to be set to your server location you want to store the files.

uploadprt.php

<?php
$uploaddir = '/usr/local/www/apache22/data/uploads/';
$uploadfile = $uploaddir . date('Y_m_d_H_i_s') . basename($_FILES['zipFileName']['name']);
move_uploaded_file($_FILES['zipFileName']['tmp_name'], $uploadfile);
?>

So you’ve put all this together and as always I’m ready to tell Jabber via the jabber-config.xml file where to upload problem reports. It’s important to note that the PrtLogServerUrl parameter points to your upload PHP script and not the HTML form provided in the documentation.

jabber-config.xml

<?xml version="1.0" encoding="utf-8"?>
<config version="1.0">
	<Client>
		<PrtLogServerUrl>http://yuengling.brewery.com/uploadprt.php</PrtLogServerUrl>
	</Client>
</config>

The end result is I have a directory on the server that houses the Jabber problem reports as “2014_12_10_20_19_50PROBLEM_FEEDBACK_Cisco_Jabber_ciscoID.zip”. From here you can work this into any further automation methods such as e-mailing or FTP. The first goal has been met to get the file from the client to the server and from there further automate.

If everything is working you’ll end up with a little window that looks like this. Happy Jabber-ing!

Jabber_PRT_success

Configuring Cisco Jabber Automatic Updates

With Jabber releases coming from Cisco on a near monthly basis there is a way to keep everyone updated. You can find a section in the installation guide about automatic updates, but it isn’t super clear. I’ll show you from a live installation how it is put together. You’ll want to only do this starting with version 10.5.

First of all you’re going to need a place to host an XML file and the installation files that will be downloaded by the clients. Some may choose Windows/IIS because of familiarity, but I’m a #FreeBSD fan. It’s also something to notice that some of the other application servers from Cisco like Jabber Guest are built on CentOS Linux so you may want to go that route.

Once you’ve found a suitable location you need to create the update.xml file which Jabber checks for changes. If you have thousands of clients in your environment be prepared for that.

<?xml version="1.0" encoding="utf-8"?>
<JabberUpdate>
        <App name="JabberMac">
                <LatestBuildNum>191164</LatestBuildNum>
                <LatestVersion>10.5.0</LatestVersion>
                <DownloadURL>http://yuengling.brewery.com/jabber/Cisco-Jabber-Mac-10.5.0.191164-56574006-MCwCFF7lmx_A_Q1b6iK97ETn7QBfP_N9AhQOKTx6TgnCyw3Z4NfjVqdactMcgA!!.zip</DownloadURL>
        </App>
        <App name="JabberWin">
                <LatestBuildNum>37889</LatestBuildNum>
                <LatestVersion>10.5.0</LatestVersion>
                <DownloadURL>http://yuengling.brewery.com/jabber/CiscoJabberSetup.msi</DownloadURL>
        </App>
</JabberUpdate>

Now that you’ve prepared your server and update.xml just upload those files to your server. The Jabber for Mac version requires the DSA signature in the file name and you can find that in the release notes from the download. I haven’t tried this on IIS but I do hear it requires a few modifications to host this file on IIS considering the name.

[email protected]:/usr/local/www/apache22/data/jabber # ll
total 56100
-rw-r--r-- 1 upload www 56574006 Sep 22 10:50 Cisco-Jabber-Mac-10.5.0.191164-56574006-MCwCFF7lmx_A_Q1b6iK97ETn7QBfP_N9AhQOKTx6TgnCyw3Z4NfjVqdactMcgA!!.zip
-rw-r--r-- 1 upload www 786432 Nov 1 17:47 CiscoJabberSetup.msi
-rw-r--r-- 1 upload www 557 Sep 25 19:33 update.xml

From here you need to test downloading each of these files and once that works you can proceed updating your jabber-config.xml. Recall that your jabber-config.xml file is hosted on CUCM so be prepared to update that file, upload to CUCM, and restart TFTP services. Please remember to upload to all your TFTP nodes in the cluster.

<config version="1.0">
        <Client>
                <UpdateUrl>http://yuengling.brewery.com/jabber/update.xml</UpdateUrl>
        </Client>
</config>

You can add a piece of code into your jabber-config.xml that will give users a display of information. I haven’t found that really useful at this stage, but I may do it for the Jabber 10.6 update that is coming ‘soon’.

If it displays properly your next task is to load up Jabber, click Help and “Check for Updates”. If everything pieced together properly you should get the following.

Jabber-up-to-date-pic

Skype’s first day on the job?

Is this really the message the Microsoft Skype team is trying to send?  We’re getting marketing showing that Skype is having it’s first run as a business communications platform. Great for the new guy getting a new job, but are you ready to align your business with Skype? I disagree with this approach from Microsoft and say that this may not be the best marketing approach for the future of Skype for Business.

I now have to reach out to some Lync fan-boys and get their reaction.

 

Cisco Collaboration Summit Notes

The new IX5000, Project Squared, Collaboration Cloud, and Box integration.

We’ve seen the new IX5000 revealed which is the next generation experience without the room remediation.

Project Squared bringing #reactjs #angularjs #webrtc development to life by taking the conference room virtual.

Collaboration Cloud ties it all together without additional Outlook plugins to schedule meetings.

Box integration gives real time document previews without downloading on any device.

 

I’ll have additional posts this week as I compile my notes from the #csummit

 

Is Skype for Business WebRTC?

It has been an exciting few days in the WebRTC world. We’re seeing movement from Microsoft, Cisco, WebRTC, and the IETF. If you haven’t heard the IETF released that the “mandatory to implement” codecs include VP8 and H264. While this seemingly kicks the can down the road at least we have a direction. The enterprises I talk to are 99% on the H264 bandwagon. It’s very difficult to displace a codec once it is in the market and we have H264 devices that will be around for at least 6 additional years. So anything we pick moving forward needs the backwards compatibility.

Is Skype for Business WebRTC?

This question is starting to come up because we’ve seen Microsoft announce additional ORTC support and Skype for Business within two weeks of each other. ORTC is seemingly positioning itself as WebRTC 1.1 which may sounds like a fork but I’ve been told it is not. I took a brief look look at the “shim” that the community is pitching showing how ORTC will have WebRTC 1.0 compatibility. I’m not convinced we will see much support for this “shim”.

Yes, Skype for Business is WebRTC albeit the ORTC side of the specification. I will speculate that we’re simply seeing Microsoft flex their muscle. They have Skype in the consumer market and Lync in the enterprise market to push forward ORTC and H264. This feels similar to how Microsoft has handled codec implementation in the Lync product. While everyone was on the H264 AVC bandwagon we saw Lync 2013 show up with H264 SVC.

While Skype has been traditionally a consumer market product we have to acknowledge what enterprises are evaulating. We saw Microsoft announce that Lync as a product name is on the way out so we needed to quickly understand how WebRTC fits into the picture. Let’s not forget that many enterprises use Lync and they all need to know the direction we’re going. Very soon we’ll most likely see a Skype for Business built around Office Web Apps server and the back end will be Lync Server 2015.

Microsoft gives you a new glass of water to drink every 3 years. You’ll get thirsty near the end of that 3 years wondering what is next. Before you know it you have another full glass and Microsoft expecting you to gulp it down as quickly as possible. Personally I’m getting a bit tired of this approach. Come back around every quarter and top off what we have in front of us.