User Tools

Site Tools


Sidebar

cn:ccr:aai:howto:saml-sp-rhel7

This is an old revision of the document!


RHEL 7: Configurare un Service Provider SAML 2.0

La seguente guida illustra come configurare un'applicazione web per agganciarsi all'autenticazione fornita dall'Identity Provider SAML 2.0 dell'INFN (Identity Check) idp.infn.it.

SP generico

Per configurare un Service provider SAML è necessario registrare alcune informazioni relative all'IdP. Per SP basati su simpleSAMLphp o Shibboleth, le istruzioni dettagliate sono rispettivamente in mentre per un SP generico, qui di seguito riportiamo i dati che sono richiesti normalmente

Certificato dell'IdP

E' il certificato che l'IdP usa per firmare e cifrare i pacchetti SAML

-----BEGIN CERTIFICATE-----
MIIDtTCCAp2gAwIBAgIJAOU29OWoolW3MA0GCSqGSIb3DQEBBQUAMEUxFDASBgNV
BAMTC2lkcC5pbmZuLml0MREwDwYDVQQLEwhJTkZOLUFBSTENMAsGA1UEChMESU5G
TjELMAkGA1UEBhMCSVQwHhcNMTQwNDE0MTQ1NzI2WhcNNDEwODI5MTQ1NzI2WjBF
MRQwEgYDVQQDEwtpZHAuaW5mbi5pdDERMA8GA1UECxMISU5GTi1BQUkxDTALBgNV
BAoTBElORk4xCzAJBgNVBAYTAklUMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAxTXQ7OFlyqDxcDkdUgPXtKrHw2vUkKuGkEMpQrrK/PU/emzT13Jualti
38jV4NTSBSIXc7P3PTTUsfnk3o+IAej1JKNlQ2klqFDvPiwl9sKFh4Pd66K0g6eb
GunsRZtR5LJLMJrrqOhRiLZdAcJzB4RxZsqSYxz0EDw6S5r6w6Sgm4xiupviC9gI
NAzpTkjFR78dbJ7fDzvvVUXxPz1T4awL01RCt0s/05fHeWM1I4cPjoVSB0t6wzv0
CfaWWlid3I6yyFWiFYeVGvn7eeqhvRckthumYOayL18Ri+S2vxYkDqDcY6b6y2OW
YhFZ1VTosUoUBPhwXyCYYJ2wAmi2VwIDAQABo4GnMIGkMB0GA1UdDgQWBBROEkiq
rjIVFsHZKsnYbh+xPNmilDB1BgNVHSMEbjBsgBROEkiqrjIVFsHZKsnYbh+xPNmi
lKFJpEcwRTEUMBIGA1UEAxMLaWRwLmluZm4uaXQxETAPBgNVBAsTCElORk4tQUFJ
MQ0wCwYDVQQKEwRJTkZOMQswCQYDVQQGEwJJVIIJAOU29OWoolW3MAwGA1UdEwQF
MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBALVVWVWP9nrWlmU37KbTE3kuqJWptGma
DS2uuOg5RN5lGevQvVu4cac23qaZZ+TN+b6WDXuhEfmVJzBYczxByVeGEvew0fHg
RRMZLqST6j2gyb89qzNNFyTcyRZ/5Z7jXWjrnDp3pOLNvrr9BhVojoC2F7EYjSdd
dwq2pb++9FiHglwSTl5WV+V4ZuNUMemY8jzhqayOK6UuwdL61UE4dPGKnlCgMaiY
VST86HkiqFh9oOJ8D6jtlk695pRaz1h3ajxwB9zOa2VAWEsi40P2tZIzY3ek25wT
M2vuvHO4YsOmkAOxj2Wk/itj5MnK1tT0u840b61Q/j4SJGuKLe4Tzzg=
-----END CERTIFICATE-----

IdP Issuer (Entity ID)

https://idp.infn.it/saml2/idp/metadata.php

IDP Login URL

https://idp.infn.it/saml2/idp/SSOService.php

IDP binding

HTTP-Redirect

User Login Setting

Questo è l'attributo usato per effettuare il mappino tra Identità Digitale autenticata via IdP ed utenza dell'applicazione. Se possibile usare l'attributo eduPersonPrincipalName (o EPPN) altrimenti utilizzare l'attributo username (o UID)

simpleSAMLphp

simpleSAMLphp perfette di implementare l'autenticazione autorizzazione via SAML in un qualsiasi script PHP.

Installazione

La documentazione di trova alla pagina http://simplesamlphp.org/docs/stable/simplesamlphp-install.

Il download è disponibile a https://simplesamlphp.org/download.

# yum install epel-release
# yum install httpd mod_ssl php php-xml php-mcrypt
# curl -L https://simplesamlphp.org/download?latest | tar -C /var -xzvf -
# mv /var/simplesamlphp-* /var/simplesamlphp

Configurazione

Scaricare i metadati dell'IdP nel file: ''metadata/saml20-idp-remote.php''

IdP di Produzione
# curl -o /var/simplesamlphp/metadata/saml20-idp-remote.php https://idp.infn.it/metadata/idp.infn.it-idp_saml20-prod-metadata.simplesamlphp.txt
IdP di Test
# curl -o /var/simplesamlphp/metadata/saml20-idp-remote.php https://idp.infn.it/metadata/idp.infn.it-idp_saml20-test-metadata.simplesamlphp.txt

**Modificare il file: ''/var/simplesamlphp/config/config.php''**

  • Impostare la password per il frontend: 'auth.adminpassword'
  • Impostare la chiave di cifratura interna: 'secretsalt'. Si può generare con il comando # head -c 2048 /dev/urandom | sha256sum
  • Impostare l'indirizzo e-mail dell'amministratore: 'technicalcontact_email'
  • Inserire il seguente codice dopo la riga: 'authproc.sp' ⇒ array(
                10 => array( 'class' => 'core:AttributeMap', 'removeurnprefix' ),
                10 => array( 'class' => 'core:AttributeMap', 'oid2name' ),

Creare i certificati per SAML:

# cd /var/simplesamlphp/cert/
# openssl req -new -x509 -newkey rsa:2048 -days 3652 -nodes -out saml.crt -keyout saml.key -subj /CN=`hostname -f`/OU=SAML-SP/

Modificare il file: ''/var/simplesamlphp/config/authsources.php''

Impostare l'IdP di riferimento: Produzione

  'idp' => 'https://idp.infn.it/saml2/idp/metadata.php'

Test

  'idp' => 'https://idp.infn.it/testing/saml2/idp/metadata.php',

Aggiungere il seguente codice dopo la linea 'discoURL' ⇒ null,

        // Certificates
        'privatekey' => 'saml.key',
        'certificate' => 'saml.crt',
        'redirect.sign' => true,
        'redirect.validate' => true,
        'metadata.sign.enable' => true,
        'sign.authnrequest' => true,

Modificare il file ''/etc/httpd/conf.d/ssl.conf'':

Prima di </VirtualHost>, inserire:

Alias /simplesaml /var/simplesamlphp/www
<Directory "/var/simplesamlphp/www">
  Options FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

Far (ri)partire il web server

# systemctl start httpd

A questo punto è necessario inviare i metadati del vostro SP, scaricandoli dalla url:

https://SP-HOSTNAME.FQDN/simplesaml/module.php/saml/sp/metadata.php/default-sp

tramite l'apposito modulo: https://idp.infn.it/utils/metadata-send.php.

Codice PHP

All'interno del codice della vostra applicazione PHP potete inserire la chiamata alla libreria simpleSAMLphp.

Documentazione: http://simplesamlphp.org/docs/stable/simplesamlphp-sp-api

Un esempio semplice semplice:

<?php
 
require_once('/var/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML_Auth_Simple('default-sp');
if ( $as->isAuthenticated() && $_REQUEST['logout'] ) {
  $as->logout();
}
 
if ( !$as->isAuthenticated() && $_REQUEST['login'] ) {
  $as->requireAuth();
}
 
 
echo "Hello World!\n";
 
if ( $as->isAuthenticated() ) { 
  echo "You are authenticated<br>\n";
 
  $attr = $as->getAttributes();
 
  echo "<pre>";
  print_r( $attr );
  echo "</pre>";
 
}
 
 
?>
<br>
<a href="?login=yes">LOGIN</a><br>
<a href="?logout=yes">LOGOUT</a><br>

Shibboleth SP

In caso si voglia implementare l'autenticazione con un semplice modulo di apache è possibile usare il SP Shibboleth.

Documentazione: https://spaces.internet2.edu/display/SHIB2/Home

Installazione

Configurare il repository YUM:

# curl -o /etc/yum.repos.d/shibboleth.repo http://download.opensuse.org/repositories/security://shibboleth/CentOS_7/security:shibboleth.repo

Installare:

# yum install epel-release
# yum install shibboleth.x86_64 httpd mod_ssl

Configurazione

Modificare il file: /etc/shibboleth/shibboleth2.xml

  • Sostituire tutte le occorrenze di sp.example.org con l'hostname del SP
  • Sostituire tutte le occorrenze di signing="false" con signing="true"
  • Sostituire idp.example.org/idp/shibboleth con idp.infn.it/saml2/idp/metadata.php oppure con idp.infn.it/testing/saml2/idp/metadata.php per l'IdP di test.
  • Prima del tag <AttributeExtractor… inserire
  <MetadataProvider type="XML" file="idp.infn.it-metadata.xml"/>
  • Scaricare i metadati dell'IdP
IdP di Produzione
# curl -o /etc/shibboleth/idp.infn.it-metadata.xml https://idp.infn.it/metadata/idp.infn.it-idp_saml20-prod-metadata.xml.txt
IdP di Test
# curl -o /etc/shibboleth/idp.infn.it-metadata.xml https://idp.infn.it/metadata/idp.infn.it-idp_saml20-test-metadata.xml.txt
  • Configurare il mapping degli attributi. Scaricate il file già pronto:
# curl -o /etc/shibboleth/attribute-map.xml http://wiki.infn.it/_media/cn/ccr/aai/howto/attribute-map.xml
* Far (ri)partire i servizi
#  systemctl restart httpd
#  systemctl restart shibd

A questo punto è necessario inviare i metadati del vostro SP che trovate all'indirizzo

https://SP-HOSTNAME/Shibboleth.sso/Metadata

tramite l'apposito modulo: https://idp.infn.it/utils/metadata-send.php.

Per testare la configurazione, creare uno script di prova

mkdir /var/www/html/secure
echo "<?php phpinfo(); ?>" > /var/www/html/secure/test.php

Invocare lo script all'indirizzo

https://SP-HOSTNAME/secure/test.php

Gli attributi dell'utente autenticato saranno disponibili fra le variabili d'ambiente PHP valorizzate.

Per effettuare il logout utilizzare l'indirizzo:

https://SP-HOSTNAME/Shibboleth.sso/Logout?return=

La configurazione del modulo shibboleth di apache si trova nel file /etc/httpd/conf.d/shib.conf, la cui documentazione è alla pagina https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPhtaccess

cn/ccr/aai/howto/saml-sp-rhel7.1492679331.txt.gz · Last modified: 2017/04/20 09:08 by enrico@infn.it