During the past few days I have setup an IdP and an SP running in the aaitest federation of Switch. The federation is based on Shibboleth which is an implementation of SAML 1.1. Switch has nice documents about installing IdPs and SPs on various OS.
My IdP is running Shib 1.3.3 on Solaris 10 in a Tomcat only installation (instructions). For user Authentication/SSO I use CAS2 with esup (instructions) and Windoze 2003R2 with AD. CAS is the Central Authentication System originally developed at the Yale University.
The SP runs on Ubuntu 7.10 with Apache 2.2 and the shibboleth SP that comes with Ubuntu (some of here). Both Server have their own certificate signed by the aaitest CA.
If you’re located in the intranet, you can reach the Service Provider here. On the WAYF choose “HSLU EL Test IdP” and use bilbo/bilbo to login. If it doesn’t work, I’m probably “fixing” things.
An eye for an eye (IdP)
My first approach was to just get a wildcard cert (*.el.hta.fhz.ch), so I could use the same on every host. This was a bad idea! Apparently, this is not supported by Shibboleths SAML-Library, at least according to this message. I found other hints that this star-certs can lead to problems with programs which evaluate certificates. So, this was a no go and I requested two certs, one for each server. And magically, the problems began to disappear or at least leave a *useful* log message.
Next I encountered a nice exception:
javax.servlet.ServletException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] ...
Damn! Deeper in the stacktrace it became evident that tomcat had a problem with verifying the certificate of my cas server (in this case himself). To resolve this I just had to make tomcat use a truststore containing the aaitest certificate (truststore.jks used by the Shib IdP is just fine). I did this by adding the following right below the comments of $TOMCAT_HOME/bin/catalina.sh (see also here under CAS):
CATALINA_OPTS="-Djavax.net.ssl.trustStore= /etc/tomcat/truststore.jks -Djavax.net.ssl.trustStorePassword=changeit"
Strong progress, now I already received a Shibboleth error page
: org.opensaml.SAMLException: Invalid assertion consumer service URL
This exception was caused by crap metadata about my SP I hacked into metadata.aaitest.xml because I thought it was necessary. Just don’t enter metadata about your SP on your own, use the AAI Resource Registry instead. I deleted this erroneous entry and inserted an entry into the IdPs ARP (Attribute Release Policy) to release attributes to AnyTarget.
At the topic of Metadata: I already figured that the metadata for IdP could be important and hacked it in early enough (before I got an exception for not doing it; if you didn’t you may receive something like “Unauthorized Identity Provider”). I copied the entry of some aai-test IdP and changed some fields, hostnames and keynames. The proper way to do this would be to use the AAI resource registry.
A tooth for a tooth (SP)
The SP was much simpler to setup, at least on Linux (even compiling the whole shit has been a walk in the park). On Ubuntu Server, you don’t even need to do this compiling thingy, just aptitude install libapache2-mod-shib and you are done. Internet2 also provided RPMs and other package formats (look here).
After the SP was installed, the configuration part had to be done. I followed another nice Switch HOWTO, which also explains how you’d have to compile the SP. If you don’t follow the complete guide (e.g. because you skip the compiling part), pay attention to the various paths inside the config files.
So far, I didn’t have success on Solaris 10, but I only tried with the packages provided for Solaris 8 by the shib-guys. I think I had some missmatch with compiler/compiled against versions. At least the apache thread exited with SIGSEGV or something, every single time I requested a shib-protected page.