Inštalácia Shibboleth SP

Návod je písaný tak, že služba(web), ktorá má využívať overovanie cez Shibboleth beží na doméne MOJA_DOMENA. Vy si túto doménu zamente za doménu Vašej služby.

Pridať repoziár Shiboleth. Obsah konfiguráku sa dá vygenerovať na stránke: https://shibboleth.net/downloads/service-provider/RPMS/

vim /etc/yum.repos.d/shibboleth.repo
[shibboleth]
name=Shibboleth (CentOS_7)
# Please report any problems to https://issues.shibboleth.net
type=rpm-md
mirrorlist=https://shibboleth.net/cgi-bin/mirrorlist.cgi/CentOS_7
gpgcheck=1
gpgkey=https://shibboleth.net/downloads/service-provider/RPMS/repomd.xml.key
enabled=1
yum install shibboleth.x86_64

Keďže Centos obsahuje Curl skompilované s NSS a nie OpenSSl (viac tu https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPLinuxRH6) je nutné pred spustením nasledovného príkazu doinštalovať potrebné knižnice a nastaviť ku nim cestu aby sme mohli používať dodané nástroje z CLI:

cd /etc/yum.repos.d/
wget https://download.opensuse.org/repositories/security:shibboleth/CentOS_7/security:shibboleth.repo
yum install curl-openssl
export LD_LIBRARY_PATH=/opt/shibboleth/lib64

Po inštalácii sa nachádza konfigurácia v adresári:

/etc/shibboleth/

a konfiguracia Apache v subore:

/etc/httpd/conf.d/shib.conf

Do adresára /usr/sbin sa nainštaluje shibd, ktorý je možné manažovať cez systemctl.

Modul mod_shib.so bude nainštalovaný do /usr/lib64/shibboleth.

Pre službu je potrebné zvoliť jednoznačný identifikátor. Odporúčaný postup je taký, že ak sa služba nachádza napríklad na doméne https://www.mojweb.sk tak identifikátor bude https://www.mojweb.sk/shibboleth. Pre účely tohto návodu sa bude používať názov domény MOJA_DOMENA aby bolo ľahko identifikovateľné, čo treba nahradiť.

Je možné, že certifikát vygeneroval inšalátor, tak to len skontrolujeme.

Keď máme zvolený identifkátor, vygenerujeme SSL certifikát, ktorý bude využívať Shibboleth pre komunikáciu s IdP. Odporúča sa vytvoriť nový certifikát a nepoužíť SSL certifikát webu pretože ten má krátku dobu platnosti. Nevadí ak bude vytvorený certifikát self signed:

Certifikát vytvoríme pomocou nástroja, ktorý sa nainštaloval spolu so Shibboleth SP:

/etc/shibboleth/keygen.sh -h MOJA_DOMENA -e https://MOJA_DOMENA/shibboleth -f -y 10

Certifikát vygenerovaý týmto príkazom bude mať platnosť 10 rokov.

Vygenerovanné súbory budú uložené v adresári /etc/shibboleth a ich názvy budú sp-encrypt-cert.pem, sp-encrypt-key.pem, sp-signing-cert.pem, sp-signing-key.pem.

Vygenerovaným súborom treba zmeniť vlastníka na používateľa, pod ktorým beží služba shibd:

chown shibd:shibd sp-encrypt-cert.pem
chown shibd:shibd sp-encrypt-key.pem
chown shibd:shibd sp-signing-cert.pem
chown shibd:shibd sp-signing-key.pem

Do adresára s certifikátmi stiahneme aj certifikát, ktorý používa federácia:

wget https://www.safeid.sk/metadata/cert/SAFEID_metadata_signer.pem

Podľa potreby upravíme metadata uložené v súbore /etc/shibboleth/metadata-template.xml:

<?xml version="1.0" encoding="utf-8" ?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata">
  <md:SPSSODescriptor>
    <md:Extensions>
      <mdui:UIInfo xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui">
        <mdui:DisplayName xml:lang="en">Nazov mojej sluzby</mdui:DisplayName>
        <mdui:DisplayName xml:lang="sk">My service name</mdui:DisplayName>
        <mdui:Description xml:lang="en">Opis mojej sluzby.</mdui:Description>
        <mdui:Description xml:lang="sk">My service description.</mdui:Description>
        <mdui:InformationURL xml:lang="en">https://MOJA_DOMENA/</mdui:InformationURL>
        <mdui:InformationURL xml:lang="sk">https://MOJA_DOMENA/</mdui:InformationURL>
        <mdui:Logo height="81" width="99">https://MOJA_DOMENA/images/mojelogo.gif</mdui:Logo>
      </mdui:UIInfo>
    </md:Extensions>
    <!-- V prípade, že požadujete od IdP ďalšie atribúty používateľa, špecifikujete ich v tejto sekcii (nepovinné) -->
    <md:AttributeConsumingService index="0">
      <md:ServiceName xml:lang="en">Nazov mojej sluzby</md:ServiceName>
      <md:ServiceName xml:lang="sk">My service name</md:ServiceName>
      <md:ServiceDescription xml:lang="en">Opis mojej sluzby.</md:ServiceDescription>
      <md:ServiceDescription xml:lang="sk">My service description.</md:ServiceDescription>
      <md:RequestedAttribute FriendlyName="eppn" Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
      <md:RequestedAttribute FriendlyName="givenName" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
      <md:RequestedAttribute FriendlyName="mail" Name="urn:oid:0.9.2342.19200300.100.1.3" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
      <md:RequestedAttribute FriendlyName="sn" Name="urn:oid:2.5.4.4" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
    </md:AttributeConsumingService>
 
 
  </md:SPSSODescriptor>
  <md:Organization>
    <md:OrganizationName xml:lang="en">My organisation name</md:OrganizationName>
    <md:OrganizationName xml:lang="sk">Nazov mojej organizacie</md:OrganizationName>
    <md:OrganizationDisplayName xml:lang="en">MOJAORG</md:OrganizationDisplayName>
    <md:OrganizationDisplayName xml:lang="sk">MOJAORG</md:OrganizationDisplayName>
    <md:OrganizationURL xml:lang="en">http://WEB_MOJEJ_ORG/en</md:OrganizationURL>
    <md:OrganizationURL xml:lang="sk">http://WEB_MOJEJ_ORG/</md:OrganizationURL>
  </md:Organization>
  <md:ContactPerson contactType="technical">
    <md:GivenName>Meno kontaktu</md:GivenName>
    <md:SurName>Priezvisko kontaktu</md:SurName>
    <md:EmailAddress>mailto:mailova_adresa_kontaktu</md:EmailAddress>
  </md:ContactPerson>
</md:EntityDescriptor>

Ak sme v metadatach služby definovali aj ďalšie atribúty musíme skontrolovať, či sú uvedené v mapovaní, teda v súbore attribute-map.xml. Pri ich identifikácii sa riadime podľa OID.

Napríklad:

    ...
    <Attribute name="urn:oid:0.9.2342.19200300.100.1.3" id="mail"/>
    <Attribute name="urn:oid:2.5.4.42" id="givenName"/>
    <Attribute name="urn:oid:2.5.4.4" id="sn"/>
    <Attribute name="urn:oid:2.5.4.3" id="cn"/>
    <Attribute name="urn:oid:1.3.6.1.4.1.25178.1.2.9" id="schacHomeOrganization"/>
    ...

Atribúty, ktoré IdP poslal službe si bude možné prezrieť na adrese: https://MOJA_DOMENA/Shibboleth.sso/Session

Treba to ale nastaviť v konfigurácii Shibboleth service, ktorá teraz nasleduje.

Konfiguráciu Shibboleth SP service urobíme v súbore shibboleth2.xml:

 <SPConfig xmlns="urn:mace:shibboleth:3.0:native:sp:config"
    xmlns:conf="urn:mace:shibboleth:3.0:native:sp:config"
    clockSkew="180">
    <OutOfProcess tranLogFormat="%u|%s|%IDP|%i|%ac|%t|%attr|%n|%b|%E|%S|%SS|%L|%UA|%a" />   
    <!-- Doplníme ID služby -->
    <ApplicationDefaults entityID="https://MOJA_DOMENA/shibboleth"
        REMOTE_USER="eppn subject-id pairwise-id persistent-id"
        cipherSuites="DEFAULT:!EXP:!LOW:!aNULL:!eNULL:!DES:!IDEA:!SEED:!RC4:!3DES:!kRSA:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1">
        <!-- Upravíme vlastnosti session -->
        <Sessions lifetime="28800" timeout="3600" relayState="ss:mem"
                  checkAddress="false" handlerSSL="true" cookieProps="https">
    	    <!-- Zadáme URL discovery servisu -->	
            <SSO discoveryProtocol="SAMLDS" discoveryURL="https://wayf.safeid.sk/">
              SAML2
            </SSO>
            <Logout>SAML2 Local</Logout>	    
            <LogoutInitiator type="Admin" Location="/Logout/Admin" acl="127.0.0.1 194.160.39.60 194.160.44.13" />          
            <!-- "Približné" metadata bude vytvárať MetadataGenerator na základe súboru metadata-template.xml -->
            <Handler type="MetadataGenerator" Location="/Metadata" signing="false" template="metadata-template.xml"/>
	    <!-- URL pre zobrazeni stavu klienta vratane ACL -->	
            <Handler type="Status" Location="/Status" acl="127.0.0.1 194.160.39.60 194.160.44.13"/>
	    <!-- URL pre zobraznie info o session (volitelne je mozne zobrazovat aj hodnoty atributov) -->	
            <Handler type="Session" Location="/Session" showAttributeValues="false"/>          
            <Handler type="DiscoveryFeed" Location="/DiscoFeed"/>
        </Sessions>
        <!-- Kontaktne informacie -->
        <Errors supportContact="mailova_adresa_kontaktu"
            helpLocation="/about.html"
            styleSheet="/shibboleth-sp/main.css"/>
        <!-- Informácia o umiestnení metadát federácie a jej podpisového certifikátu (súbor, ktorý sme stiahli) -->
        <MetadataProvider type="XML" validate="true"
              url="https://www.safeid.sk/metadata/metadata.safeid.sk.idp.xml"
              backingFilePath="safeid-idp.xml" maxRefreshDelay="600">
            <MetadataFilter type="Signature" certificate="SAFEID_metadata_signer.pem" verifyBackup="false"/>
        </MetadataProvider>
        <AttributeExtractor type="XML" validate="true" reloadChanges="false" path="attribute-map.xml"/>
        <AttributeFilter type="XML" validate="true" path="attribute-policy.xml"/>	
      	<!-- Názvy súborov s vygenenerovanými certifikátmi -->
        <CredentialResolver type="File" use="signing" key="sp-signing-key.pem" certificate="sp-signing-cert.pem"/>
        <CredentialResolver type="File" use="encryption" key="sp-encrypt-key.pem" certificate="sp-encrypt-cert.pem"/>
    </ApplicationDefaults>
    <SecurityPolicyProvider type="XML" validate="true" path="security-policy.xml"/>
    <ProtocolProvider type="XML" validate="true" reloadChanges="false" path="protocols.xml"/>
</SPConfig>

Konfiguráciu je možné skontrolovať nasledujúcim príkazom (pozor na nastavenie curl pre CLI):

shibd -tc /etc/shibboleth/shibboleth2.xml

Spustíme Shibboleth service a reštartujeme Apache.

Následne je treba zabezpečiť aby požadovaný web vyžadoval zabezpečenie cez Shibboleth (v konfigurácii Apache):

<Directory "/var/www/html/">
  ....
  AuthType shibboleth
  require shibboleth
</Directory>

Ak je všetko v poriadku spustíme službu shibd a reštartujeme apache:

systemctl enable shibd
systemctl start shibd
apachectl graceful

Pokiaľ všetko prebehlo správne na adrese https://MOJA_DOMENA/Shibboleth.sso/Metadata je možné vidieť vygenrované metadata služby podľa požiadaviek.

Napriek tomu, že sa na začiatku píše, že sa jedná len o “example metadata” je ich po prekontrolovaní prípadne ich doplnení možné použiť pre registráciu služby.

Súbor s metadatami je potrebné elektronicky podpísať a zaslať mailom na adresu safeid-admin@sanet.sk. Podis musí byť overitelný, napríklad od CA DigiCert. Alternatívne je možné podpísať odosielaný mail (potom nie je potrebné podpisovať metadata v prílohe).

  • install/sp/shibboleth
  • Posledná úprava: 11. 03. 2021 12:01