User Tools

Site Tools


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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
cn:ccr:aai:howto:saml-sp-rhel7 [2022/12/18 10:52]
enrico@infn.it
cn:ccr:aai:howto:saml-sp-rhel7 [2022/12/18 10:54] (current)
enrico@infn.it
Line 1: Line 1:
 +====== 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.
 +
 +
 +
 +===== 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 php-mbstring
 +  # curl -L https://simplesamlphp.org/download?latest | tar -C /var -xzvf -
 +  # mv /var/simplesamlphp-* /var/simplesamlphp
 +==== Configurazione ====
 +
 +Documentazione: http://simplesamlphp.org/docs/stable/simplesamlphp-sp
 +
 +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(''
 +<code php>
 +                10 => array( 'class' => 'core:AttributeMap', 'removeurnprefix' ),
 +                20 => array( 'class' => 'core:AttributeMap', 'oid2name' ),
 +</code>
 +
 +=== 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**
 +<code php>
 +  'idp' => 'https://idp.infn.it/saml2/idp/metadata.php'
 +</code>
 +**Test**
 +<code php>
 +  'idp' => 'https://idp.infn.it/testing/saml2/idp/metadata.php',
 +</code>
 +Aggiungere il seguente codice dopo la linea '''discoURL' => null,''
 +<code php>
 +        // Certificates
 +        'privatekey' => 'saml.key',
 +        'certificate' => 'saml.crt',
 +        'redirect.sign' => true,
 +        'redirect.validate' => true,
 +        'metadata.sign.enable' => true,
 +        'sign.authnrequest' => true,
 +</code>
 +
 +Modificare il file ''/etc/httpd/conf.d/ssl.conf'':
 +
 +Prima di ''</VirtualHost>'', inserire:
 +<code>
 +Alias /simplesaml /var/simplesamlphp/www
 +<Directory "/var/simplesamlphp/www">
 +  Options FollowSymLinks
 +  AllowOverride None
 +  Require all granted
 +</Directory>
 +</code>
 +
 +
 +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:
 +
 +<code php>
 +<?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>
 +
 +</code>
 +
 +
 +
 +
 +===== Shibboleth SP =====
 +
 +In caso si voglia implementare l'autenticazione con un semplice modulo di apache è possibile usare il SP Shibboleth (la versione supportata ora è SP3).
 +
 +Documentazione: https://shibboleth.atlassian.net/wiki/spaces/SP3/overview
 +==== Installazione ====
 +
 +Configurare il repository YUM:
 +
 +  # curl -o /etc/yum.repos.d/shibboleth.repo https://shibboleth.net/cgi-bin/sp_repo.cgi?platform=CentOS_7
 +
 +Installare:
 +  # yum install epel-release
 +  # yum install shibboleth 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 ''https://idp.example.org/idp/shibboleth'' con ''https://idp.infn.it/saml2/idp/metadata.php'' oppure con ''https://idp.infn.it/testing/saml2/idp/metadata.php'' per l'IdP di test.
 +  * Impostare ''handlerSSL="true"'' e ''cookieProps="https"''
 +  * Prima del tag ''<AttributeExtractor...'' inserire
 +<code>
 +  <MetadataProvider type="XML" path="idp.infn.it-metadata.xml"/>
 +</code>
 +
 +
 +
 +  * Scaricare i metadati dell'IdP
 +== IdP di Produzione ==
 +  # curl -o /etc/shibboleth/idp.infn.it-metadata.xml https://idp.infn.it/saml2/idp/metadata.php
 +
 +== IdP di Test ==
 +  # curl -o /etc/shibboleth/idp.infn.it-metadata.xml https://idp.infn.it/testing/saml2/idp/metadata.php
 +
 +  * 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
 +
 +In caso si utilizzino CMS, in particolare Joomla, si presti attenzione alle regole di riscrittura presenti nel file ''.htaccess'' nella root directory. Alcune di queste regole impediscono l'accesso a path relativi al funzionamento di Shibboleth: ad esempio il caso del path che permette di ottenere i metadati '' https://SP-HOSTNAME/Shibboleth.sso/Metadata''. Quindi è necessario inserire alcune condizioni aggiuntive alla relativa regola di riscrittura, ad esempio:
 +
 +  RewriteCond %{REQUEST_URI} !^/index\.php
 +  RewriteCond %{REQUEST_FILENAME} !-f
 +  RewriteCond %{REQUEST_FILENAME} !-d
 +  RewriteCond %{REQUEST_URI} !^/Shibboleth\.sso  ### condizione riscrittura inserita
 +  RewriteCond %{REQUEST_URI} !^/secure  ### condizione riscrittura inserita
 +  RewriteRule .* index.php [L]
 +
 +
 +===== 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 è un certificato self-signed che può essere scaricato in formato PEM, direttamente dall'IdP
 +
 +=== IdP di Produzione ===
 +
 +<code>
 +https://idp.infn.it/module.php/saml/idp/certs.php/idp.crt
 +</code>
 +
 +
 +=== IdP di TEST ===
 +
 +<code>
 +https://idp.infn.it/testing/module.php/saml/idp/certs.php/idp.crt
 +</code>
 +
 +==== Secondo Certificato dell'IdP (key-rollover)====
 +Se configurate un SP SAML durante un key-rollover, dovete installare anche il nuovo certificato dell'IdP che troverete in:
 +
 +=== IdP di Produzione ===
 +
 +<code>
 +https://idp.infn.it/module.php/saml/idp/certs.php/new_idp.crt
 +</code>
 +
 +
 +=== IdP di TEST ===
 +
 +<code>
 +https://idp.infn.it/testing/module.php/saml/idp/certs.php/new_idp.crt
 +</code>
 +
 +==== > IdP Issuer (Entity ID) ====
 +
 +=== IdP di Produzionee ===
 +
 +<code>
 +https://idp.infn.it/saml2/idp/metadata.php
 +</code>
 +
 +=== IdP di TEST ===
 +
 +<code>
 +https://idp.infn.it/testing/saml2/idp/metadata.php
 +</code>
 +
 +
 +
 +==== > IDP Login URL ====
 +=== IdP di Produzionee ===
 +<code>
 +https://idp.infn.it/saml2/idp/SSOService.php
 +</code>
 +
 +=== IdP di TEST ===
 +
 +<code>
 +https://idp.infn.it/testing/saml2/idp/SSOService.php
 +</code>
 +
 +
 +==== > IDP binding ====
 +
 +<code>
 +HTTP-Redirect
 +</code>
 +
 +
 +==== > 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) 
 +
  
cn/ccr/aai/howto/saml-sp-rhel7.txt · Last modified: 2022/12/18 10:54 by enrico@infn.it