Shib2IdpInstall

Innen: KIFÜ Wiki
A lap korábbi változatát látod, amilyen Sitya(AT)niif.hu (vitalap | szerkesztései) 2009. szeptember 29., 08:16-kor történt szerkesztése után volt. (Befejezés)

Előkészületek

entityID

Fontos, hogy az entityID egyedi és állandó legyen. Javasolt forma: https://idp.intezmenyneve.hu/idp/shibboleth.

Tűzfal

Be kell engedni a 443-as és a 8443-as portokat. Ha nagyon szigorúan vesszük, akkor a 8443-as portot elegendő csak a szóbajöhető SP-kről beengedni, de ezzel általában nem vagyunk tisztában, ezért célszerű a "nagyvilágból" beengedni. Biztonsági szempontból nem sok különbség van a 443-as és a 8443-as porton elérhető alkalmazások között.

JDK

Debian Lenny alatt a openjdk-6-jdk csomagot kell feltelepíteni. Telepítés előtt érdemes az aptitude-ban kikapcsolni az opcionális függőségek telepítését.

aptitude install openjdk-6-jdk

Állítsuk be, a JAVA_HOME környezeti változót!

export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

Shibboleth security provider


Be kell másolni a lib/shib-jce-1.0.jar állományt a $JAVA_HOME/jre/lib/ext könyvtárba. Ha az ext/ könyvtár nem létezik, akkor hozzuk létre.

cp lib/shib-jce-1.0.jar $JAVA_HOME/jre/lib/ext

Ezek után be kell állítani, hogy a JRE használni is tudja ezt a providert. Ehhez a $JAVA_HOME/jre/lib/security/java.security fájlban keressük meg az ún. "security provider"-eket, és írjuk hozzá a következő sort:

security.provider.7=edu.internet2.middleware.shibboleth.DelegateToApplicationProvider
Megj.: a "security.provider." után következő szám mindig a megelőzőnél legyen eggyel nagyobb!

Bouncy Castle JCE


A JVM-mel jövő Java Cryptography Engine (JCE) nem támogatja az összes kriptográfiai algoritmust, amelyre az Identity Providernek szüksége lehet (pl. XML Digital Signature, XML Encryption). A Bouncy Castle JCE ezek mellett még olyan algoritmusokat is tartalmaz (általában hatékonyabb és szabványosabb formában), amelyek benne vannak a Java JCE-ben.

Ehhez először le kell tölteni a Bouncy Castle JCE-t. A JCE állományok a Provider oszlopban, a "Signed Jar Files" részben találhatók. (A nevük bcprov-jdk-VERZIO.jar.) Letöltés után a .jar fájlokat a $JAVA_HOME/jre/lib/ext könyvtárba kell tenni.

wget http://www.bouncycastle.org/download/bcprov-jdk15-141.jar
cp bcprov-jdk15-141.jar $JAVA_HOME/jre/lib/ext

Ezek után be kell állítani, hogy a JRE használni is tudja ezt a providert. Ehhez a $JAVA_HOME/jre/lib/security/java.security fájlban keressük meg az ún. "security provider"-eket, és írjuk hozzá a következő sort:

security.provider.8=org.bouncycastle.jce.provider.BouncyCastleProvider
Megj.: a "security.provider." után következő szám mindig a megelőzőnél legyen eggyel nagyobb!

Tomcat 6

Telepítés

Ha minden rendben meg, akkor elegendő egy

aptitude install tomcat6

Ez felpakolja a tomcat különböző függőségeit is, ám nem biztos, hogy a debian stabil kiadásában már szerepel. Az ajánlott függőségek (tomcat6-admin, -docs, stb.) feltelepítése nem szükséges.

Ne felejtsük el, hogy a Tomcat szerver "tomcat6" user nevében fog futni! Mivel a Shibboleth servletnek szüksége van arra, hogy hozzáférjen a filerendszerhez, a Java Security Manager-t ki kell kapcsolni a /etc/default/tomcat6 fájlban:

TOMCAT6_SECURITY=no

Ahhoz, hogy a Tomcat számára üzembiztosan elegendő memóriát biztosítsunk, ugyanebbe a fájlba ( /etc/default/tomcat6 ) adjuk meg:

JAVA_OPTS="-Xms256M -Xmx512M -XX:-DisableExplicitGC "

Beállítás

A /etc/tomcat6/server.xml fájlt kell szerkesztenünk

Ha a Tomcat Apache mögött fut

A 8009-es porton figyelő Connector elem konfigurációjához hozzá kell adni, hogy a tomcatAuthentication értéke "false" legyen, ezen kívül a hozzáférést korlátozhatjuk a localhost-ra is (hiszen a Connector-t csak a helyben futó Apache mod_proxy_ajp konnektora érheti el).

<Connector port="8009" address="127.0.0.1" tomcatAuthentication="false"
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

Ha a Tomcat önállóan, Apache nélkül fut

Ha a Tomcat Apache nélkül fut, akkor be kell állítani, hogy az SP-vel való kommunikációra fenntartott 8443-as porton egyből a Tomcat figyeljen.

<Connector port="8443"
           maxHttpHeaderSize="8192"
           maxSpareThreads="75"
           scheme="https"
           secure="true"
           clientAuth="want"
           SSLEnabled="true"
           sslProtocol="TLS"
           keystoreFile="IDP_HOME/credentials/idp.jks"
           keystorePass="PASSWORD"
           truststoreFile="IDP_HOME/credentials/idp.jks"
           truststorePass="PASSWORD"
           truststoreAlgorithm="DelegateToApplication"/>

Ahol az IDP_HOME az IdP alapkönyvtára, a PASSWORD pedig az IdP telepítésekor megadandó jelszó lesz.


További információ angolul

Apache beállítás

Tanusítványok beszerzése és bemásolása /etc/ssl vonatkozó alkönyvtárai alá.

Meg kell adni, hogy az apache figylejen a 443-as és 8443-as portokon. Az alábbiak kerüljenek a /etc/apache2/ports.conf fájlba

Listen 443 
Listen 8443

Be kell állítani a virtuális hosztot, amelyhez az IdP-t rendeltük. Először a 443-as portot konfiguráljuk.

 <VirtualHost _default_:443> 
  ServerName aai-logon.example.org 
  SSLEngine On 
  SSLCertificateFile /etc/ssl/certs/aai-logon.example.org.crt 
  SSLCertificateKeyFile /etc/ssl/private/aai-logon.example.org.key 
  SSLCertificateChainFile /etc/ssl/certs/aai-logon.example.org.crt 
 ProxyRequests Off 
 <Proxy ajp://localhost:8009>  
  Allow from all 
 </Proxy>  
 ProxyPass /idp ajp://localhost:8009/idp retry=5 
 </VirtualHost> 


Majd a 8443-as portot is beállítjuk

  <VirtualHost _default_:8443>
  ServerName aai-logon.example.org 
  SSLEngine On 
  SSLCipherSuite ALL:!ADH:!EXPORT56:!EXPORT40:RC4+RSA:!SSLv2:+HIGH:+MEDIUM:+LOW:+EXP
  SSLCertificateFile /etc/ssl/certs/aai-aa.example.org.crt 
  SSLCertificateKeyFile /etc/ssl/private/aai-aa.example.org.key 
  SSLCertificateChainFile /etc/ssl/certs/aai-aa.example.org.crt 
  SSLCACertificateFile /etc/ssl/ca-bundle.switchaai.crt 
  SSLVerifyDepth 10 
  SSLVerifyClient optional_no_ca 
  SSLOptions -StdEnvVars +ExportCertData 
  ProxyRequests Off
  <Proxy ajp://localhost:8009>
   Allow from all 
  </Proxy>
  ProxyPass /idp ajp://localhost:8009/idp retry=5 
 </VirtualHost> 


Ezek után engedélyezni kell a virtuális hosztokat

a2ensite aai-logon 
a2ensite aai-aa 
apache2ctl -t 
Syntax OK

Majd az ssl modult

a2enmod ssl 
Module ssl installed; run /etc/init.d/apache2 force-reload to enable.

Végül a proxy_ajp modult

a2enmod proxy_ajp 
Enabling proxy as a dependency Module proxy installed; run /etc/init.d/apache2 force-reload to enable. 
Module proxy_ajp installed; run /etc/init.d/apache2 force-reload to enable. 

Végezetül újra kell indítani az apache-ot

apache2ctl -k restart

Shibboleth 2.x IdP servlet telepítés

Letöltés

A hivatalos IdP kiadás innen innen tölthető le

Alternatívaként az NIIF által patchelt, ezáltal SLO képes IdP kiadást ajánljuk, ami a NIIF AAI oldalról érhető el. A Single Logout-képes IdP-ről további információ itt.

Kicsomagolás

A shibboleth-idp-2.x.x-bin.zip fájl tartalma kicsomagolás után a /usr/local/shibboleth-idp könyvtár alákerül

cd /usr/local 
jar -xf shibboleth-idp-2.x.x-bin.zip 

Endorsed jar állományok

Sajnos - legalábbis a cikk írásakor - a "kincstári" Sun-os Tomcat (Java?) JAXP parser egy ismert memóriaszivárgást tartalmaz, ezért a disztribúcióban az endorsed/ könyvtárban található .jar file-okat kézzel be kell másolni a Tomcat endorsed/ könyvtárába.

A Debian alatti tomcat6 csomag használatakor a /usr/share/tomcat6/common/endorsed könyvtárba kell tenni a jar file-okat (ezt a könyvtárt létre is kell hozni).
mkdir /usr/share/tomcat6/endorsed
cp endorsed/*.jar /usr/share/tomcat6/endorsed/

Installer

export JAVA_HOME=/usr/jdk
cd /usr/local/shibboleth-idp
chmod 755 ant.sh 
./ant.sh

A telepítés során az alábbi kérdésekre kell választ adnunk:

Is this a new installation? Answering yes will overwrite your current configurat ion. [yes|no] 
yes

Új telepítés, vagy sem.

Where should the Shibboleth Identity Provider software be installed? [default: / opt/shibboleth-idp-2.0.0] 
/usr/local/shobboleth-idp

Itt található a letöltött és kicsomagolt shibboleth programcsomag

What is the hostname of the Shibboleth Identity Provider server? [default: idp.example.org] 
idp.example.org 

Shibboleth IdP alkalmazás URI alapú azonosítója.

A keystore is about to be generated for you. Please enter a password that will be used to protect it. 
changeme

Feljegyzendő jelszó :)

Befejezés

Környezeti változó beállítása

IDP_HOME=/usr/local/shibboleth-idp 
export IDP_HOME 

Szimbolikus linkek megadása - az egyértelműség és konvenció kedvéért...

mv $IDP_HOME/conf /etc/`basename $IDP_HOME`
ln -s /etc/`basename $IDP_HOME` $IDP_HOME/conf
mv $IDP_HOME/logs /var/log/`basename $IDP_HOME`
ln -s /var/log/`basename $IDP_HOME` $IDP_HOME/logs
mkdir /var/run/`basename $IDP_HOME`
mv $IDP_HOME/metadata /var/run/`basename $IDP_HOME`/metadata
ln -s /var/run/`basename $IDP_HOME`/metadata $IDP_HOME/metadata

Jogosultságok beállítása - hogy a tomcat6 felhasználó hozzáférhessen az alábbi könyvtárakhoz

chown -R tomcat6 /var/log/`basename $IDP_HOME` /var/run/`basename $IDP_HOME` 

További, már telepített IdP-től függő tomcat beállítás

cd /var/lib/tomcat6/
mkdir -p conf/Catalina/localhost

Az így létrehozott könyvtárban készítsünk egy idp.xml nevű (a név legyen azonos a idp webalkalmazás nevével) fájlt az alábbi tartalommal:

<Context 
        docBase="/usr/local/shibboleth-idp/war/idp.war" 
        privileged="true" 
        antiResourceLocking="false" 
        antiJARLocking="false" 
        unpackWAR="false" />

Teszt

Ahhoz, hogy kiderítsük, működik-e (ill. fut-e :) ) az IdP webalkalmazásunk, ahhoz böngészőben hívjuk meg az alábbi urlt: https://idp.example.org/idp/profile/Status, amennyiben az oldalon egy ok-t látunk, akkor az alkalmazásunk fut, és elkezdhetjük beállítani az attribútumok feloldását és kiadását.


Ha nem működik a webalkalmazás, akkor az alábbi naplófájlokban kezdjünk el keresgélni:

  • /var/log/shibboleth/idp-error.log
  • /var/log/shibboleth/idp-process.log

A naplózás mélységét a /etc/shibboleth/logging.xml fájlban állíthatjuk be. Hibakereséshez érdemes a <ErrorLog> értékét DEBUG-ra állítani.

Shibboleth 2.0 IdP beállítás

Metadaták beállítása

Metadata aláírás ellenőrzés beállítása

Az IdP-be beállított metaadatok valódiságának ellenőrzéséhez szükséges egy ún. TrustEngine beállítása. Ezt a relying-party.xml -ben kell megtenni a Security Configurations részben:

<security:TrustEngine 
   id="shibboleth.MetadataTrustEngine" xsi:type="security:StaticExplicitKeySignature">
 <security:Credential id="HREFSigner" xsi:type="security:X509Filesystem">
  <security:Certificate>/path/to/idp/credentials/href_signer.crt</security:Certificate>
 </security:Credential>
</security:TrustEngine>

A konfigurációban hivatkozott href_signer.crt elérhető innen: https://idp.niif.hu/href_signer.crt, SHA-1 lenyomata a következő: DF:4F:7F:B2:C8:3E:D9:D8:33:38:79:C7:2B:27:FB:55:42:97:36:74

HREF föderációs metadata beállítása az IdP-ben

A HREF SP metadata állományok elérhetőségei a következők:

A Shibboleth IdP relying-party.xml konfigurációban a következőképpen lehet beállítani a HREF SP metaadatokat (fontos hogy az előző pontban leírt TrustEngine is be legyen állítva):

<MetadataProvider id="HREF-SP-Metadata"  
     xsi:type="FileBackedHTTPMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata"
     metadataURL="http://idp.niif.hu/href-sp-metadata.xml"
     backingFile="/path/to/idp/metadata/href-sp-metadata.xml" >
  <MetadataFilter xsi:type="SignatureValidation" trustEngineRef="shibboleth.MetadataTrustEngine" />
</MetadataProvider>
<MetadataProvider id="HREF-Test-SP-Metadata"
     xsi:type="FileBackedHTTPMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata"
     metadataURL="http://idp.niif.hu/href-test-sp-metadata.xml"
     backingFile="/path/to/idp/metadata/href-test-sp-metadata.xml" >
  <MetadataFilter xsi:type="SignatureValidation" trustEngineRef="shibboleth.MetadataTrustEngine" />
</MetadataProvider>

Autentikáció beállítása

Attribútum feloldás beállítása

Attribútum kiadás beállítása