Upgrade SP z 1.3.1 na 2.0

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.

Upgrade pomocí RPMS

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)

Migrace konfigurace

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ě.

Konfigurace Apache

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>

shibboleth2.xml

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

  • zakomentovat první <SessionInitiator>:
  • nastavit URL pro WAYF server
  • pokud existující aplikace používají lazy sessions a aktivují autentizaci odkazem /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>

Více virtuálních serverů

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>

attribute-map.xml

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();

SAML dokumenty

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

SAML dokumenty a více virtuálních webserverů

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>

cztestfed/howto/sp2/upgrade/index.txt · Poslední úprava: 2008-08-11 12:05 (upraveno mimo DokuWiki)
CESNET2 powered
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0