Upgrade SP z verze 1.3.1 na verzi 2.0 je relativně jednoduchý. Pokud máte Shibboleth nainstalovaný z RPM, stačí upgradovat RPM a přemigrovat konfiguraci editací tří konfiguračních souborů. Existující webové aplikace není nutné měnit, pokud nepoužívají čtení SAML dokumentů z hlavičky Shib-Attributes, která v nové verzi byla nahrazena více hlavičkami.
Pokud máte nainstalovanou verzi 1.3.1 z balíků RPM, stačí překompilovat RPM balíky pro novější verzi Shibbolethu a upgradovat balíky standardním způsobem.
Balíky log4shib-1.0-1, xerces-c-2.8.0-1 a xml-security-c-1.4.0-1 už máte nainstalované z verze 1.3.1, stačí tedy upgradovat balíky opensaml-2.0-6, shibboleth-2.0-6 a xmltooling-1.0-6.
Nejsnadněji to uděláte touto sekvencí příkazů:
cd /usr/src/packages/SRPMS wget http://shibboleth.internet2.edu/downloads/shibboleth/cppsp/2.0/SRPMS/opensaml-2.0-6.src.rpm wget http://shibboleth.internet2.edu/downloads/shibboleth/cppsp/2.0/SRPMS/shibboleth-2.0-6.src.rpm wget http://shibboleth.internet2.edu/downloads/shibboleth/cppsp/2.0/SRPMS/xmltooling-1.0-6.src.rpm rpmbuild --rebuild xmltooling-1.0-6.src.rpm rpm -Uvh /usr/src/packages/RPMS/x86_64/xmltooling-* rpmbuild --rebuild opensaml-2.0-6.src.rpm #nelze zkompilovat shibboleth, dokud se nenainstaluje novejsi opensaml, #ale nelze nainstalovat novejsi opensaml, dokud se neodinstaluje stary shibboleth rpm -e shibboleth-1.3.1-2 opensaml-1.1.1-2 opensaml-devel-1.1.1-2 rpm -Uvh /usr/src/packages/RPMS/x86_64/opensaml-* rpmbuild --rebuild shibboleth-2.0-6.src.rpm rpm -Uvh /usr/src/packages/RPMS/x86_64/shibboleth-2.0-6.x86_64.rpm
Ještě zkontrolujte, že soubor /etc/apache2/conf.d/shib.conf je shodný se souborem
/etc/shibboleth/apache22.config (podle toho, jakou verzi Apache používáte), a pokud
není, zkopírujte
cp /etc/shibboleth/apache22.config /etc/apache2/conf.d/shib.conf
V mém případě odinstalace shibboleth 1.3.1 a následná instalace 2.0 soubor shib.conf správně nahradila,
ale při pouhém upgradu pomocí zkompilovaných balíků na druhém stroji již k tomu nedošlo.
A je hotovo.
(Postup ověřen na 64-bitovém SUSE 10.1)
Shibboleth verze 2.0 nepoužívá konfigurační soubory shibboleth.xml a AAP.xml, ale soubory shibboleth2.xml a attribute-map.xml, které mají jinou syntaxi. V konfiguraci samotného webserveru Apache je potřeba jen drobná změna kvůli zpětné kompatibilitě.
Podstatná změna je, že Shibboleth SP 2.0 už normálně neposkytuje atributy aplikacím jako HTTP hlavičky, ale jako proměnné prostředí. Abyste nemuseli měnit stávající aplikace, přidejte do konfigurace Apache na potřebná místa direktivu ShibUseHeaders on, tj. např.:
<Location "/test/*">
AuthType shibboleth
ShibRequireSession On
ShibUseHeaders on
require valid-user
</Location>
Vezměte soubor /etc/shibboleth/shibbboleth2.xml tak jak ho vytvořila instalace, a proveďte následující změny:
V tagu <ApplicationDefaults> nastavte atributy entityID a homeURL na hodnoty, které byly v shibboleth.xml v tagu <Applications> v atributech providerId a homeURL:
<ApplicationDefaults id="default" policyId="default"
entityID="https://muj.stroj.nekde.cz/shibboleth/cztestfed/sp"
homeURL="https://muj.stroj.nekde.cz/"
Nastavte mapování requestů stejně jako bylo v shibboleth.xml, tedy hlavně jméno stroje. Položky <Path> není nutné uvádět, stejnou konfiguraci můžete provést v konfiguráku Apache pomocí direktiv, viz předchozí část o Apache.
<RequestMapper type="Native">
<RequestMap applicationId="default">
<Host name="muj.stroj.nekde.cz" >
<Path name="necovurl" authType="shibboleth" requireSession="true" exportAssertion="true" />
</Host>
</RequestMap>
</RequestMapper>
Nastavte zdroj metadat. Shibboleth 2.0 podporuje jejich stahování z URL. Uvedené nastavení nekontroluje XML-podpisy v metadatech, ale v tomto okamžiku v metadatech stejně žádné nejsou. Více viz dokumentace Shibboleth 2.0.
<MetadataProvider type="XML" uri="http://www.eduid.cz/docs/cztestfed/metadata/cztestfed-metadata.xml"
backingFilePath="/etc/shibboleth/cztestfed-metadata.xml" reloadInterval="7200">
</MetadataProvider>
Nastavte cestu ke klíči a certifikátu:
<CredentialResolver type="File" key="/etc/apache2/ssl/key.pem" certificate="/etc/apache2/ssl/cert.pem"/>
A ještě je potřeba upravit část konfigurující vyvolání autentizace. Této části úplně nerozumím, ale je potřeba
<SessionInitiator>:/Shibboleth.sso/WAYF/czTestFed, je potřeba doplnit další <SessionInitiator> s atributem defaultACSIndex=„5“, který odkazuje na <AssertionConsumerService> níže, a ten určuje jakým způsobem má IdP předat infomace na SP, přičemž správné předávací URL musí být uvedeno v metadatech
<!--
<SessionInitiator type="Chaining" Location="/Login" isDefault="true" id="Intranet"
relayState="cookie" entityID="https://idp.example.org/shibboleth">
<SessionInitiator type="SAML2" defaultACSIndex="1" template="bindingTemplate.html"/>
<SessionInitiator type="Shib1" defaultACSIndex="5"/>
</SessionInitiator>
-->
<SessionInitiator type="Chaining" Location="/WAYF" id="WAYF" relayState="cookie">
<SessionInitiator type="SAML2" defaultACSIndex="1" template="bindingTemplate.html"/>
<SessionInitiator type="Shib1" defaultACSIndex="5"/>
<SessionInitiator type="WAYF" defaultACSIndex="5" URL="https://www.eduid.cz/cztestfed/wayf/"/>
</SessionInitiator>
<SessionInitiator type="WAYF" Location="/WAYF/czTestFed" id="WAYFcz" relayState="cookie" URL="https://www.eduid.cz/cztestfed/wayf/" defaultACSIndex="5">
</SessionInitiator>
Pokud potřebujete mít na jednom Apache více virtuálních webserverů a na nich používat Shibboleth, zaregistrujte každý zvlášt do federace, tj. mějte pro něj samostatný certifikát a přidejte ho do metadat federace.
V souboru shibboleth2.xml pak vytvořte další aplikaci. Nejdřív v RequestMap přidejte další server, např.:
<RequestMap applicationId="default">
<Host name="muj.stroj.nekde.cz">
</Host>
<Host name="www.druhy.cz" applicationId="druhy">
</Host>
</RequestMap>
a pak na konci tagu ApplicationDefaults vytvořte druhou aplikaci definováním rozdílů oproti první:
<ApplicationOverride id="druhy" entityID="https://www.druhy.cz/shibboleth/cztestfed/sp" homeURL="http://www.druhy.cz/">
<CredentialResolver type="File" key="/etc/apache2/ssl/druhykey.pem" certificate="/etc/apache2/ssl/druhycert.pem"/>
</ApplicationOverride>
Tento soubor nahrazuje AAP.xml ze Shibboleth 1.0. Má skoro stejnou syntaxi, ale rozdíl je v tom, že neexitují atributy Header a Alias, místo nich jsou id a aliases. Abyste nemuseli měnit existující aplikace, je důležité definovat takové aliasy, jaké aplikace očekávají. Můj soubor tedy vypadá takto:
<Attributes xmlns="urn:mace:shibboleth:2.0:attribute-map" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AnyAttribute />
<!-- scoped affiliation tj. student@muni.cz-->
<Attribute name="urn:mace:dir:attribute-def:eduPersonScopedAffiliation" id="affiliation" aliases="Shib-EP-Affiliation">
<AttributeDecoder xsi:type="ScopedAttributeDecoder" caseSensitive="false"/>
</Attribute>
<!-- principal name tj. 3988@muni.cz -->
<Attribute name="urn:mace:dir:attribute-def:eduPersonPrincipalName" id="eppn" aliases="Shib-EP-PrincipalName">
<AttributeDecoder xsi:type="ScopedAttributeDecoder"/>
</Attribute>
<Attribute name="urn:mace:dir:attribute-def:eduPersonEntitlement" id="entitlement" aliases="Shib-EP-Entitlement"/>
<Attribute name="urn:mace:dir:attribute-def:cn" id="cn" aliases="Shib-Person-commonName"/>
<Attribute name="urn:mace:dir:attribute-def:displayName" id="displayName" aliases="Shib-Person-displayName"/>
<Attribute name="urn:mace:dir:attribute-def:mail" id="mail" aliases="Shib-InetOrgPerson-mail"/>
<Attribute name="urn:mace:dir:attribute-def:o" id="o" aliases="Shib-Person-o"/>
<!-- A persistent id attribute that supports personalized anonymous access. -->
<!-- First, the deprecated version: -->
<Attribute name="urn:mace:dir:attribute-def:eduPersonTargetedID" id="targeted-id">
<AttributeDecoder xsi:type="ScopedAttributeDecoder"/>
</Attribute>
<!-- Second, the new version (note the OID-style name): -->
<Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" id="persistent-id">
<AttributeDecoder xsi:type="NameIDAttributeDecoder" formatter="$NameQualifier!$SPNameQualifier!$Name"/>
</Attribute>
<!-- Third, the SAML 2.0 NameID Format: -->
<Attribute name="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" id="persistent-id">
<AttributeDecoder xsi:type="NameIDAttributeDecoder" formatter="$NameQualifier!$SPNameQualifier!$Name"/>
</Attribute>
</Attributes>
Kombinace direcktivy ShibUseHeaders on v konfiguráku Apache a nastavení atributů aliases v attribute-map.xml
způsobuje, že stávající webové aplikace dostávají stejné HTTP hlavičky jako u verze 1.3.
Jedno varování - možná objevíte, že v shibboleth2.xml má tag <ApplicationDefaults> atribut attributePrefix, kterým můžete před názvy všech uživatelových atributů přidat nějaký prefix. Pokud to uděláte, přestane fungovat nastavování REMOTE_USER, protože to je nastavené na přebírání hodnot z určitých atributů, a přidáním prefixu změníte názvy těchto atributů. Museli byste tudíž změnit i toto nastavení:
<ApplicationDefaults ... REMOTE_USER="eppn persistent-id targeted-id" ...
na
<ApplicationDefaults ... attributePrefix="Shib-" REMOTE_USER="Shib-eppn Shib-persistent-id Shib-targeted-id" ...
A ještě jedna dobrá rada - pokud používáte za Apache ještě Tomcat, nelze už identifikaci uživatele přebírat z jednoho atributu, jako u verze 1, proto v TomCatu nastavte v $CATALINA_BASE/conf/server.xml posílání REMOTE_USER z Apache do Tomcatu:
<Connector port="8009" protocol="AJP/1.3" tomcatAuthentication="false"/>
a v Java kódu můžete uživatele získávat jednoduše pomocí
String user = request.getRemoteUser();
Tohle už bude zajímat jen ty, kdo v aplikacích používají původní SAML dokumenty. Ve verzi Shibboleth 1.3 se po použití Apache direktivy ShibExportAssertion On do HTTP hlavičky Shib-Attributes ukládal původní SAML dokument, ale zakódovaný pomocí BASE64. U Shibboleth 2.0 tato hlavička není, místo ní se objeví tři hlavičky vypadající takto:
Shib-Assertion-Count: 02 Shib-Assertion-01: http://localhost/Shibboleth.sso/GetAssertion?key=_377c2...0e41937f338c9c470505baf Shib-Assertion-02: http://localhost/Shibboleth.sso/GetAssertion?key=_377c7...58dc703b6a4677b84954f14
a SAML dokument s hodnotami atributů lze získat tak, že se z aplikace načte obsah URL v hlavičce Shib-Assertion-02.
Viz https://spaces.internet2.edu/display/SHIB2/NativeSPAssertionExport
Pokud potřebujete získat původní SAML dokumenty i v dalších virtuálních webserverech, je třeba předefinovat ještě URL na kterém se čtou a povolit jeho čtení z jeho IP adresy:
<ApplicationOverride id="druhy"
entityID="https://www.druhy.cz/shibboleth/cztestfed/sp"
homeURL="http://www.druhy.cz/"
>
<Sessions handlerURL="/Shibboleth.sso" handlerSSL="false"
exportLocation="http://www.druhy.cz/Shibboleth.sso/GetAssertion" exportACL="127.0.0.1 195.113.219.7"
>
</Sessions>
<CredentialResolver type="File" key="/ssl/druhykey.pem" certificate="/ssl/druhycert.pem"/>
</ApplicationOverride>