Installation of Shibboleth Service Provider in Ubuntu 18.4 Apache



Configure Apache
When installing Shibboleth Service Provider , we have to make sure that the Apache web server is installed. If not, the server can be installed using the following command.
sudo apt-get update
sudo apt-get install apache2
I n my example I am going to change the default service port 80 of Apache to 88. 
Note: You can skip this step if you are willing to run Apache in the default port.
Edit the /etc/apache2/ports.conf file.
sudo vi /etc/apache2/ports.conf
Find the line containing the follow.
Listen 80
Replace it with the port you are willing to have. In this example I use the port 88.
Listen 88
Now save the file and close it. Then change the port number of the file found at /etc/apache2/sites-enabled/000-default.conf
sudo gedit /etc/apache2/sites-enabled/000-default.conf
Change the port number as follow.
<VirtualHost *:88>
Restart the Apache server
sudo systemctl restart apache2
Open the browser and navigate to http://localhost:88
Note: If the above URL doesn’t bring you the default Apache server page, make sure that your /etc/hosts file contains the following entry.
127.0.0.1 localhost
If not,open the file and add it.
sudo gedit /etc/hosts
Now you should get the default Apache server page. :-)
Then enable ssl using the following command.
sudo a2enmod ssl
Enable ssl virtual host.
sudo a2ensite default-ssl.conf
Create a self-signed certificate(SSL).
sudo mkdir /etc/apache2/sslsudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
Install Shibboleth SP
After configuring the Apache server now you can install the shibboleth SP as an Apache module.
sudo apt-get install libapache2-mod-shib2
sudo a2enmod auth_basic
sudo a2enmod shib2
Now set the shibboleth certificate using the following command.
sudo shib-keygen -h localhost

openssl x509 -text -noout -in /etc/shibboleth/sp-cert.pem
Open the shibboleth SP configuration file.
sudo nano /etc/shibboleth/shibboleth2.xml
In the configuration file, <ApplicationDefaults> set the entityId. In my example, I have used my-sp
<ApplicationDefaults entityID="my-sp"           REMOTE_USER="eppn persistent-id targeted-id">
Under the <Sessions> set handlerSSL to true and cookieProps to https.
 <Sessions lifetime="28800" timeout="3600"            relayState="ss:mem" checkAddress="false"            handlerURL="/Shibboleth.sso" handlerSSL="true"            cookieProps="https">

Under the <SSO> alter the entity ID to your IDP. I have enabled Shibboleth IDP and I use my-idp
Note: If you have not configured the Shibboleth IDP you can refer my blog on installing the IDP from following link.
Shibboleth Identity Provider Installation on Ubuntu 18.4 Tomcat
 <SSO entityID="dit-idp" discoveryProtocol="SAMLDS"             discoveryURL="https://ds.example.org/DS/WAYF">
              SAML2 SAML1
 </SSO>


Under the <Handler> add your IP address.
 <Handler type="Status" Location="/Status"               acl="127.0.0.1 ::1 192.168.1.20"/>


Note: adding your IP here you can access shibboleth status remotely
Under the <Errors> change the supportContact to something valid.
  <Errors supportContact="admin@localhost"            helpLocation="/about.html"
            styleSheet="/shibboleth-sp/main.css"/>



Include the <MetadataProvider> as below.
<MetadataProvider type="XML"
                  file="idp-metadata.xml"/>
Note: Here file value is the your shibboleth IDP metadata file location
Copy the IDP metadata file (idp-metadata.xml) to the /etc/shibboleth directory or set the path of idp-metadata.xml accordingly.
In my-idp example idp-metadata.xml is in following folder
cd /opt/shibboleth-idp/metadata
Save and close the shibboleth2.xml file.
My sample shibboleth2.xml page is displayed below.
<SPConfig xmlns="urn:mace:shibboleth:2.0:native:sp:config"
    xmlns:conf="urn:mace:shibboleth:2.0:native:sp:config"
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"    
    xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
    clockSkew="180"><!--
    By default, in-memory StorageService, ReplayCache, ArtifactMap, and SessionCache
    are used. See example-shibboleth2.xml for samples of explicitly configuring them.
    --><!--
    To customize behavior for specific resources on Apache, and to link vhosts or
    resources to ApplicationOverride settings below, use web server options/commands.
    See https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPConfigurationElements for help.
    
    For examples with the RequestMap XML syntax instead, see the example-shibboleth2.xml
    file, and the https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPRequestMapHowTo topic.
    --><!-- The ApplicationDefaults element is where most of Shibboleth's SAML bits are defined. -->
    <ApplicationDefaults entityID="my-sp"
                         REMOTE_USER="eppn persistent-id targeted-id"><!--
        Controls session lifetimes, address checks, cookie handling, and the protocol handlers.
        You MUST supply an effectively unique handlerURL value for each of your applications.
        The value defaults to /Shibboleth.sso, and should be a relative path, with the SP computing
        a relative value based on the virtual host. Using handlerSSL="true", the default, will force
        the protocol to be https. You should also set cookieProps to "https" for SSL-only sites.
        Note that while we default checkAddress to "false", this has a negative impact on the
        security of your site. Stealing sessions via cookie theft is much easier with this disabled.
        -->
        <Sessions lifetime="28800" timeout="3600" relayState="ss:mem"
                  checkAddress="false" handlerSSL="true" cookieProps="https"><!--
            Configures SSO for a default IdP. To allow for >1 IdP, remove
            entityID property and adjust discoveryURL to point to discovery service.
            (Set discoveryProtocol to "WAYF" for legacy Shibboleth WAYF support.)
            You can also override entityID on /Login query string, or in RequestMap/htaccess.
            -->
            <SSO entityID="my-idp"
                 discoveryProtocol="SAMLDS" discoveryURL="https://ds.example.org/DS/WAYF">
              SAML2 SAML1
            </SSO><!-- SAML and local-only logout. -->
            <Logout>SAML2 Local</Logout>
            
            <!-- Extension service that generates "approximate" metadata based on SP configuration. -->
            <Handler type="MetadataGenerator" Location="/Metadata" signing="false"/><!-- Status reporting service. -->
            <Handler type="Status" Location="/Status" acl="127.0.1.1 ::1"/><!-- Session diagnostic service. -->
            <Handler type="Session" Location="/Session" showAttributeValues="false"/><!-- JSON feed of discovery information. -->
            <Handler type="DiscoveryFeed" Location="/DiscoFeed"/></Sessions><!--
        Allows overriding of error template information/filenames. You can
        also add attributes with values that can be plugged into the templates.
        -->
        <Errors supportContact="admin@localhost"
            helpLocation="/about.html"
            styleSheet="/shibboleth-sp/main.css"/>
        
        <!-- Example of remotely supplied batch of signed metadata. --><MetadataProvider type="XML"
                  file="idp-metadata.xml"/><!--
        <MetadataProvider type="XML" uri="http://federation.org/federation-metadata.xml"
              backingFilePath="federation-metadata.xml" reloadInterval="7200">
            <MetadataFilter type="RequireValidUntil" maxValidityInterval="2419200"/>
            <MetadataFilter type="Signature" certificate="fedsigner.pem"/>
        </MetadataProvider>
        --><!-- Example of locally maintained metadata. -->
        <!--
        <MetadataProvider type="XML" file="partner-metadata.xml"/>
        --><!-- Map to extract attributes from SAML assertions. -->
        <AttributeExtractor type="XML" validate="true" reloadChanges="false" path="attribute-map.xml"/>
        
        <!-- Use a SAML query if no attributes are supplied during SSO. -->
        <AttributeResolver type="Query" subjectMatch="true"/><!-- Default filtering policy for recognized attributes, lets other data pass. -->
        <AttributeFilter type="XML" validate="true" path="attribute-policy.xml"/><!-- Simple file-based resolver for using a single keypair. -->
        <CredentialResolver type="File" key="sp-key.pem" certificate="sp-cert.pem"/><!--
        The default settings can be overridden by creating ApplicationOverride elements (see
        the https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApplicationOverride topic).
        Resource requests are mapped by web server commands, or the RequestMapper, to an
        applicationId setting.
        
        Example of a second application (for a second vhost) that has a different entityID.
        Resources on the vhost would map to an applicationId of "admin":
        -->
        <!--
        <ApplicationOverride id="admin" entityID="https://admin.example.org/shibboleth"/>
        -->
    </ApplicationDefaults>
    
    <!-- Policies that determine how to process and authenticate runtime messages. -->
    <SecurityPolicyProvider type="XML" validate="true" path="security-policy.xml"/><!-- Low-level configuration about protocols and bindings available for use. -->
    <ProtocolProvider type="XML" validate="true" reloadChanges="false" path="protocols.xml"/></SPConfig>
Now restart the Shibboleth SP.
sudo service shibd restart
Test the SP
You can test the functionality of the SP by accessing the browser.
https://localhost/Shibboleth.sso/Status                  


















Note: it will output a xml with shibboleth status, idp endpoints etc..

Register this service provider (my-sp) in identity provider (my-idp)

This will display following message in browser
The application you have accessed is not registered for use with this service









It means you have to register your service provider (my-sp) metadata in identity provider (my-idp)

Generate Service provider metadata


Save the file generated from above link and copy it to my-idp metadata folder
cp /home/[username]/Downloads/Metadata                /opt/shibboleth-idp/metadata/sp-metadata.xml

Open identity provider's (my-idp) metadata-providers.xml
nano /opt/shibboleth-idp/conf/metadata-providers.xml

Add following lines to the metadata-providers.xml within  <MetadataProvider></MetadataProvider>
<MetadataProvider id="LocalMetadata"  xsi:type="FilesystemMetadataProvider" metadataFile="/opt/shibboleth-idp/metadata/sp-metadata.xml"/>

Quick Test


If your registration of metadata success you will get identity provider's (my-idp) login page
Shibboleth IDP Login Page













Note: For authentication data configure LDAP or other storage service accordingly 

in: ගැන, තුළ, තුළට
English - Sinhala

Comments