italia / spid-testenv

Test environment for SPID (sample Identity Provider)
BSD 3-Clause "New" or "Revised" License
4 stars 0 forks source link

Nella configurazione di un Service Provider, specificare anche come generare e importare le chiavi #4

Open alranel opened 6 years ago

alranel commented 6 years ago

From @musikele on October 8, 2017 12:47

Abbiamo avuto non pochi problemi su come configurare un Service Provider su questo IDP. In particolare siamo impazziti su come generare un certificato che piacesse all'IdP e soprattutto su come generare una AuthnRequest che fosse accettata dall'IdP.

Gentilmente:

Copied from original issue: italia/spid-testenv-docker#6

alranel commented 6 years ago

From @ncarandini on December 14, 2017 15:20

Come avete risolto? Quale linguaggio e implementazione avete usato per generare l'Authn request? Io sto lavorando per consentire l'uso di questo progetto in congiunzione con spid-dotnet-sdk. Nel Readme c'è un esempio d'uso di creazione di un certificato self-signed di test.

damikael commented 6 years ago

Per generare il certificato e la chiave privata si può usare il seguente comando: openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out cert/spid-sp.crt -keyout cert/spid-sp.pem

mlocati commented 6 years ago

In https://github.com/italia/spid-testenv-backoffice/pull/24 ho aggiunto un doc su come generare le chiavi (vedi questo file)

damikael commented 6 years ago

Per configurare il service provider inserire le informazioni sulla form di generazione del metadata. Ad esempio, inserire le info su https://idp.spid.gov.it:8080 per salvare il metadata sull'idp di test installato su https://idp.spid.gov.it:9443

come Certificate inserire il contenuto del file spid-sp.crt creato in precedenza image

inserire in Single Logout Service Location l'url del servizio di single logout del sp e specificare il tipo di binding image

inserire in Assertion Consumer Service Location l'url a cui inviare il messaggio di risposta alla richiesta di autenticazione e specificare il tipo di binding image

specificare il set di attributi che il sp potrà richiedere. Name e Description del set sono puramente informativi. Il set di attributi sarà richiesto in base all' AttributeConsumingService index specificato nel metadata (in questo caso 1) image image

damikael commented 6 years ago

di seguito un esempio di AuthnRequest in binding HTTP-POST generata da simplesamlphp

<samlp:AuthnRequest 
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" 
    ID="_def73df9beb0991b6a5784b007483549e4d67a52c1" 
    Version="2.0" 
    IssueInstant="2018-01-10T16:01:49Z" 
    Destination="https://idp.spid.gov.it:9443/samlsso" 
    AssertionConsumerServiceURL="http://mio-service-provider.it/service/module.php/saml/sp/saml2-acs.php/service-name" 
    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
    AttributeConsumingServiceIndex="1" > 

    <saml:Issuer>https://mio-service-provider.it</saml:Issuer> 
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
        <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="#_def73df9beb0991b6a5784b007483549e4d67a52c1"> 
                <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>6hE0kLWNGd97+fqd/jELFYZPQS33rUYiF2b7s9G/TsE=</ds:DigestValue> 
            </ds:Reference> 
        </ds:SignedInfo> 
        <ds:SignatureValue>
            UD9qZfIHNlVR7J23sE2Di+fcNe4+jRkD5XKFZD5gq/b1RTdZdkj275ZFoCWP/T2T0TBlKpUrDLj3S6yqErNFKPzF
            fPnTYB5n02poCl9RHYWdLtlBjmDSan9Aff/UCWngrKaYb2HghCXsigmpQ2lhWCl8ow0iPyu+ZRuJazRL8OMvfCik
            P/UTKgACPX3nchrkhvZ0N8qBFiK4HTmS7Gews2+5VybHMdupETLFQmHMIZk+mheBLzaOPjIZCKFfuq6J3cCC5dK6
            0KGDTBGsA9bL86/HmOIsQpD8gJ7xtm0rq7dqSZBntN1PYdu3BL6Q/1xpYZHkhs6eLHAFUffczFx8wg==
        </ds:SignatureValue> 
        <ds:KeyInfo> 
            <ds:X509Data> 
                <ds:X509Certificate>
                    MIIDwTCCAqmgAwIBAgIJAKuYN5FQCIxsMA0GCSqGSIb3DQEBBQUAMHcxCzAJBgNVBAYTAklUMQ0wCwYDVQQIDARSb21l
                    MQ0wCwYDVQQHDARSb21lMRUwEwYDVQQKDAxMaW5mYVNlcnZpY2UxFTATBgNVBAsMDExpbmZhU2VydmljZTEcMBoGA1UE
                    AwwTc3BpZC1zcC5saW5mYWJveC5pdDAeFw0xODAxMDkxMjI1MTZaFw0yODAxMDkxMjI1MTZaMHcxCzAJBgNVBAYTAklU
                    MQ0wCwYDVQQIDARSb21lMQ0wCwYDVQQHDARSb21lMRUwEwYDVQQKDAxMaW5mYVNlcnZpY2UxFTATBgNVBAsMDExpbmZh
                    U2VydmljZTEcMBoGA1UEAwwTc3BpZC1zcC5saW5mYWJveC5pdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
                    ANMzYrg1uydAZuqzv7OsqSN080yey0asXRyEUyWfPar0wy3QKm0YZ+/huwdKndiwPbl4jYkFqYExJvjrRO0b4XOOL5jw
                    wHdeLPs55EZm5PXsIpB7eYiiLMiNMxsxF+yj8RYidUFZOeJ50D7pZkt4qXkOYony+CC1otQuLv4m7siC87O4GZDYG4Uv
                    +w0SRoIQF3YubM3oXoErXSxM4qVHpePrbpkwfamJIcU1O/a9AcVNc1A/YpklCJI96edSi1ePAtwsy8VqBW51BfHrkfJp
                    qKRX2m0O3qe/gMT0jh1nw/NdPvWgj65rpfvLgzxq6d6puRHfT7CSMpC0fG7l70+5szECAwEAAaNQME4wHQYDVR0OBBYE
                    FHLAJZ2xaalwLrzCB88Lrsbcj15IMB8GA1UdIwQYMBaAFHLAJZ2xaalwLrzCB88Lrsbcj15IMAwGA1UdEwQFMAMBAf8w
                    DQYJKoZIhvcNAQEFBQADggEBALH+HmKkeBAxt3PzZ9kK9IW5bHPutN8q9jVAvQuFJUegodq3kIHbSp68ZxAanFiV4NQN
                    S/s1i3qdFR0ste63VinlCQTj8gP2N7wT6+aWDm7YAYDaZp8KHhmKA/yDlqHEVzcOmcF+8U3PZYrjWS9gkVZhKABZerrl
                    dMRvw7kLqD8vpJfcm0Uc5sXwLmSPqHsWBiXJ9Da6ba4ekOXeVvky7rLrFaqVxgAVhbrrkWK5tOOoB+dyWB+DkpObQ49E
                    F0fjZi3bnXR25InOgmk1uA4PTGjNbp43F5ujNeTU0Led82WLk5UB+U8IT9kYdjIc3PvngJlHAsPRFEFl9Ec9TeSIbEk=
                </ds:X509Certificate> 
            </ds:X509Data> 
        </ds:KeyInfo> 
    </ds:Signature> 
    <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" AllowCreate="true" /> 
    <samlp:RequestedAuthnContext> 
        <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:SpidL1</saml:AuthnContextClassRef> 
    </samlp:RequestedAuthnContext> 
</samlp:AuthnRequest>
damikael commented 6 years ago

stessa AuthnRequest ma in binding HTTP-REDIRECT (codificata nel parametro SAMLRequest)

<samlp:AuthnRequest 
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" 
    ID="_11c74005d8fe75a2eebab3bbcd740cbfef9752b341" 
    Version="2.0" 
    IssueInstant="2018-01-10T16:49:47Z" 
    Destination="https://idp.spid.gov.it:9443/samlsso" 
    AssertionConsumerServiceURL="http://mio-service-provider.it/service/module.php/saml/sp/saml2-acs.php/service-name" 
    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
    AttributeConsumingServiceIndex="1"> 

    <saml:Issuer>https://spid-sp.linfabox.it</saml:Issuer> 
    <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" AllowCreate="true" /> 
    <samlp:RequestedAuthnContext> 
        <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:SpidL1</saml:AuthnContextClassRef> 
    </samlp:RequestedAuthnContext> 
</samlp:AuthnRequest>

SigAlg e Signature sono specificati in parametri separati della query string

Esempio: GET https://idp.spid.gov.it:9443/samlsso?SAMLRequest=fVNdj9owEPwrkd9...&RelayState=http%3A%2F%2Fmio-service-provider.it&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=V9PpaohVj5T15Qm...