Spid in php puro

Buongiorno,
ho visto che non ci sono ancora versioni disponibili per php 8.
avete indicazioni in merito?

Tutte le librerie php per SPID si basano su SimpleSAMLphp, la cui ultima versione stabile ancora non è compatibile con PHP8.
Appena la nuova versione attualmente in sviluppo verrĂ  rilasciata come stabile, a cascata le librerie SPID dovrebbero diventare compatibili con PHP8

Ciao a tutti
Sto implementando CIE per una PA.
Ho installato correttamente la libreria spid-cie-php.
Ho scaricato il metadata all’indirizzo /myservice/module.php/saml/sp/metadata.php/cie
Quando vado a caricare il metadata su Ambiente di preproduzione in Federazione mi restituisce il seguente errore:

  1. [ContactPerson] Dati del contatto amministrativo non validi
  2. [/EntityDescriptor/ContactPerson/Extensions] Elemento Extensions non presente

Andando a controllare il metadata difatti mancava la parte extension e l’ho aggiunta manualmente:

 <md:Extensions>
      <cie:Public/>
      <cie:IPACode>CodiceIPA</cie:IPACode>
      <cie:Municipality>H501</cie:Municipality> 
    </md:Extensions>

Quando ricarico il metadata con gli extension mi compare l’errore:

  1. [/EntityDescriptor/Signature/KeyInfo/X509Data/X509Certificate] Certificato non valido
    Mentre prima di inserire manualmente le extension non dava questo problema.

Come posso risolvere?

Buongiorno @SebastianoS ,

nei prossimi giorni verrĂ  rilasciato un aggiornamento che risolve il problema riscontrato.

Saluti.

Michele D’Amico (@damikael)

Ciao @AGS ,

confermo che, a partire dalla versione 3.14.0, spid-cie-php è compatibile con PHP8.

Michele D’Amico (@damikael)

Buongiorno,
Alla fine ho risolto firmando nuovamente il metadata tramite il tool spid-metadata-signer.
Ora il metadata è approvato ma quando vado ad accedere tramite Test authentication sources al link di Test CIE mi esce un errore direttamente da CIE dove mi dice “La richiesta non può essere soddisfatta poiché il messaggio ricevuto non rispetta i requisiti di sicurezza del servizio di accesso.”

Contattando il gruppo CIE Enti mi hanno risposto che il problema può essere causato da uno di questi punti:

  1. la presenza di un sigillo elettronico, nell’elemento in testa al metadata del SP, afferente al certificato elettronico di cui al punto successivo;
  2. la validità del certificato elettronico presente nell’elemento al punto precedente;
  3. la presenza, nella request, di un sigillo elettronico (afferente a uno dei certificati elettronici di cui al punto successivo) localizzato, alternativamente, nell’elemento della request, nel caso di binding in HTTP POST, ovvero nel parametro Signature della query string veicolante la request, nel caso di binding HTTP Redirect;
  4. la validitá del certificato elettronico afferente al sigillo di cui al punto precedente; tale certificato, all’interno del metadata del SP, si trova tra gli elementi KeyDescriptor con l’attributo use valorizzato con signing;
  5. la coerenza dell’attributo Destination nella request con l’attributo Location del tag SingleSignOnService riportato nel metadata dell’IdP in relazione al tipo di binding utilizzato per inviare la request.

Per il punto 3 ed il punto 5 io ho lasciato tutto come generato dallo script.
Non capisco quale possa essere il problema.

<?xml version="1.0" encoding="UTF-8" standalone="no"?><md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:cie="https://www.cartaidentita.interno.gov.it/saml-extensions" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" ID="GENERATO DI DEFAULT" entityID="https://MIOSITO.it/"><ds:Signature>
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<ds:Reference URI="GENERATO DI DEFAULT">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>GENERATO DA METADATA SIGNER</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
GENERATO DA METADATA SIGNER
</ds:SignatureValue>
<ds:KeyInfo>
<ds:KeyValue>
<ds:RSAKeyValue>
<ds:Modulus>
GENERATO DA METADATA SIGNER
</ds:Modulus>
<ds:Exponent>AQAB</ds:Exponent>
</ds:RSAKeyValue>
</ds:KeyValue>
<ds:X509Data>
<ds:X509Certificate>
IL CERTIFICATO GENERATO DA DEFAULT
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
  <md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <md:KeyDescriptor use="signing">
      <ds:KeyInfo>
        <ds:X509Data>
        <ds:X509Certificate>IL CERTIFICATO GENERATO DA DEFAULT</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>IL CERTIFICATO GENERATO DA DEFAULT</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://MIOSITO/myservice/module.php/saml/sp/saml2-logout.php/cie"/>
    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://MIOSITO/myservice/module.php/saml/sp/saml2-acs.php/cie" index="0" isDefault="true"/>
    <md:AttributeConsumingService index="0">
      <md:ServiceName xml:lang="it">MIO SITO Test</md:ServiceName>
      <md:ServiceDescription xml:lang="it">MIO SITO Test</md:ServiceDescription>
      <md:RequestedAttribute Name="fiscalNumber" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
      <md:RequestedAttribute Name="name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
      <md:RequestedAttribute Name="familyName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
      <md:RequestedAttribute Name="dateOfBirth" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/>
    </md:AttributeConsumingService>
  </md:SPSSODescriptor>
  <md:Organization>
    <md:OrganizationName xml:lang="it">NOME PA COME SU FEDERAZIONE</md:OrganizationName>
    <md:OrganizationDisplayName xml:lang="it">NOME PA COME SU FEDERAZIONE</md:OrganizationDisplayName>
    <md:OrganizationURL xml:lang="it">https://MIOSITOISTITUZIONALE.it/</md:OrganizationURL>
  </md:Organization>
  <md:ContactPerson contactType="administrative">
      <md:Extensions>
      <cie:Public/>
      <cie:IPACode>CODICE IPA COME SU FEDERAZIONE</cie:IPACode>
      <cie:Municipality>H501</cie:Municipality>
      <cie:Province>RM</cie:Province>
      <cie:Country>IT</cie:Country>  
    </md:Extensions>
    <md:Company>NOME PA</md:Company>
    <md:EmailAddress>MAIL PA</md:EmailAddress>
    <md:TelephoneNumber>TELEFONO PA</md:TelephoneNumber>
  </md:ContactPerson>
</md:EntityDescriptor>

Buongiorno,

sto lavorando all’implementazione del login tramite CIE e ho incontrato difficoltà nell’effettuare la richiesta SAML in ambiente di preproduzione.

Non riesco a comprendere come inviare correttamente la richiesta SAML con i valori attesi dal server di produzione. Ho consultato il manuale tecnico, ma non mi è chiaro nÊ a quale URL devo inviare la richiesta, nÊ come dovrei comporla.

Ho notato che la libreria “spid-cie-php” sembra comporre automaticamente la richiesta SAML una volta inserito il pulsante “ENTRA CON CIE”, ma il valore inviato sembra non essere conforme al metadata caricato.

Inoltre, ho dovuto apportare delle modifiche manuali al metadata CIE rispetto a quanto generato dalla libreria, in quanto ho riscontrato problemi con la validazione sul portale federazione. Ho corretto gli errori e ho firmato nuovamente il metadata utilizzando “spid-metadata-signer”.

Adesso mi trovo in difficoltà nel proseguire, e vorrei capire come procedere correttamente con l’invio della richiesta SAML.

Potreste gentilmente aiutarmi a risolvere queste problematiche?

Grazie e buona giornata.

Buongiorno devo realizzare per un cliente un sistema di login tramite spid sull’applicativo.
A prescindere dalla richeista di accreditamento che dovrĂ  effettuare il cliente, ho delle domande sulla realizzazione.

Si può ottenere una sorta di metadata e servizio di autorizzazione di test sui quali effettuare le chiamate di login?

Dato che dovrò realizzarlo in un sistema separato frontend angular e backend php, come bisognerà effettuare l’integrazione?

SarĂ  il frontend angular a dover effettuare le chiamate verso il server di autenticazione e restituire il risultato al backend, oppure il frontend dovrĂ  chiamare una rest api sul backend che si dovrĂ  occupare poi di tutte le chiamate di autenticazione?
Nel secondo caso in che modo si effettuerà l’integrazione con l’utente, nel momento in cui ci si scollega dalla parte frontend?

Grazie

Ambiente DEMO SPID

Spid-cie-php

Ciao @damikael,
ci sono novitĂ  in merito a questo problema?

Lo sto riscontrando anche io.
Nel caso potrei provare a implementare le modifiche se mi puoi indirizzare eventualmente sui file in cui dovrei guardare.
Grazie

Buonasera @feddar ,
il problema è risolto con l’ultima versione:

Michele D’Amico
@damikael

Ciao @damikael,
intanto grazie!
Mi sembra di notare però che visualizzando i metatata da module.php/saml/sp/metadata.php/cie?output=xhtml venga mostrato ancora l’xml “errato”, mentre il formato “flat” viene mostrato correttamente.
Sto sbagliando qualcosa?
Grazie.

Prova a rieseguire:

composer uninstall
composer install

Adesso è andato! Grazie mille

Buongiorno, ho letto con interesse questa discussione in quanto devo configurare l’accesso con SPID e CIE per un ente professionale della mia zona.
Ho provato alcune strade ma mi sono arenato per un motivo o un’altro. Vi chiedo la cortesia di un supporto per verificare la mia comprensione della situazione e dei passi da seguire per giungere alla corretta installazione del gateway.
L’ente ha un hosting su datacentr di milano, e posso accedere via SSH.
Vedo che l’ultima release di spid-cie-php necessita di PHP 8, ma ahimè il sito dell’ente non è al momento compatibile con tale versione.
Ho dunque creato un account separato con sottodominio login.* nel quale posso settare la versione di PHP necessaria.
I servizi erogati dopo il login conto di configurarli nel sottodominio iss.* (attualmente sono erogati servizi agli iscritti tramite autenticazione classica).
Se non ho capito male i metadata saranno collegati a login., mentre a iss. verranno passati i dati dell’utente dopo l’autenticazione.
La libreria spid-cie-php la dovrò installare a partire da una cartella non esposta di login.*
In “myservice” dovrò indicare “iss” oppure è una stringa alfanumerica distinta?
Mi è già capitato che composer alla fine dell’installazione non ha creato i file di esempio nè il link simbolico; era impostato PHP 7.4.*
Ringrazio se vorrete darmi qualche suggerimento e/o correggere la mia impostazione
Gianfranco

Buonasera @GianfrancoL ,

per spid-cie-php è raccomandato l’utilizzo di PHP 8, ma non dovrebbero esserci problemi anche con PHP 7.4, il requisito espresso in composer è >= 7.4.1
Secondo quanto da te indicato, spid-cie-php sarebbe installato su dominio login., quindi tutto il framework, compreso la generazione del metadata e gli endpoint che implementano il flusso SAML SPID sarebbero login..
Indicando come redirect_uri URL del tipo iss.*, a tali URL verranno inviati i dati dell’utente al termine dell’autenticazione.
In “myservice” può essere indicata una qualsiasi stringa che costituirà il path sul quale risponderà il proxy che sarà quindi del tipo: https://login.ente.it/myservice.

Resto a disposizione se occorre ulteriore supporto.
Cordiali saluti e buona installazione.

Michele D’Amico

@damikael

Grazie per la pazienza ed il supporto.
La EntityID è l’identificativo del chiamante, che nel caso mio specifico è la pagina che implementa il flusso SAML, quindi login.dominioente.it (se non sbaglio).
Ma alla richiesta successiva “Service Provider Domain, without www” se inserisco dominioente.it viene generato l’errore “WARNING: the EntityID must be related to organization’s domain” e richiede l’inserimento del dominio del service provider. In questo caso coincide con login.dominioente.it?

EDIT
ho inserito quanto proposto dall’installazione per il service provider domain, e la procedura ha completato tutte le fasi generando un errore sulla generazione della chiave privata

Generating a 3072 bit RSA private key
…++
…++
writing new private key to ‘/home/loginoin/spid-cie-php/vendor/simplesamlphp/simplesamlphp/cert/spid-sp.pem’

problems making Certificate Request
139957683169168:error:0D06407A:asn1 encoding routines:a2d_ASN1_OBJECT:first num too large:a_object.c:108:
139957683169168:error:0B083077:x509 certificate routines:X509_NAME_ENTRY_create_by_txt:invalid field name:x509name.c:295:name=organizationIdentifier

Se apro la pagina di login questa mostra i tre pulsanti spid (post) spid (get) e cie che al passaggio successivo ovviamente genera l’errore per chiave assente
“Uncaught SimpleSAML\Error\UnserializableException: authsources[‘cie’]: Unable to load certificate/public key”

cordialmente
Gianfranco

L’EntityID deve rispettare quanto indicato dall’Avviso 37.

In particolare mi pare tu non stia indicando il protocollo http(s).

grazie per il dettaglio, non l’avevo trovato

1 Mi Piace

Buongiorno,
tornando alla questione dell’errore sulla generazione della chiave del certificato SSL, secondo quando leggo in post precedenti, ho verificato che la versine installata di openssl è la seguente
OpenSSL 1.0.2k-fips 26 Jan 2017
built on: reproducible build, date unspecified
platform: linux-x86_64
options: bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)

Deve essere obbligatoriamente attiva la versione 1.1.1 oppure c’è un modo per generare la chiave con questa versione?

grazie
Gianfranco