Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Servidores Web Apache e Tomcat
  • Java
  • PostegresSQL
  • SSL

1.1 Requisitos do Sistema

Info
Para a instalação da Shibboleth IdP V3 é recomendado um sistema com pelo menos 4GB de RAM.

...

Note
titleNTP
É essencial que um IdP mantenha o relógio sincronizado, as mensagens de SAML incluem timestamps que são verificados pelos Fornecedores de Serviço (SP's). Quando o atraso é superior a 5min as mensagens são recusadas e os utilizadores impedidos de aceder aos serviços.

1.2 Instalação Apache, Tomcat e Postgres

Note
titleExemplos (idp.fccn.pt)

As instruções abaixo utilizam comandos para a instalação do Fornecedor de identidade com o hostname idp.fccn.pt, devem alterar os comandos para coincidir com o hostname do vosso IdP.

Abaixo seguem as instruções de instalação do Apache HTTP Server 2.4 , Apache Tomcat 8, e PostgreSQL9

...

  • Apache HTTP Server 2.4 (desempenha as funções de “frontend” do “IdP”)
  • Apache Tomcat 8
  • PostgresSQL 9 (para armazenar os Identificadores persistentes e informação de consentimento do utilizador)

 


Pode efetuar o download dos ficheiros utilizados na parte da Instalação do Shibboleth IdP 3.3.0 aqui .

1.2.1 Instalação - Apache HTTP Server 2.4

Criar certificado de Frontend para o Apache

Tip
titleRecomendação Certificado Extended Validation

 Por se tratar de um componente de autenticação da instituição é recomendado que sejam utilizados certificados de servidor EV - Extended Validation.

...

Nota: alterar o O= <Nome da Organização em Protocolo TCS> e CN = <hostname do vosso idp>

Realizar pedido do certificado no Portal da Digicert

  • Portal Digicert: https://www.digicert.com/
  • Grave a chave privada (ex.: idp.fccn.pt.key) na seguinte localização: /etc/pki/tls/private
  • Grave os certificados DigiCertCA.crt  e idp.fccn.pt.crt na seguinte localização: /etc/pki/tls/certs/idp

Instalar e Configurar Apache

Code Block
titleInstalar o Apache HTTP Server 2.4 com o seguinte comando:
sudo yum install httpd mod_ssl

...

Tip
titleRedirecionamento de pedidos http

Para efetuar um redirecionamento de pedidos vindos por http deverá adicionar ao ficheiro /etc/httpd/conf/httpd.conf

(Alterar o URL para o correspondente à sua Instituição)

Code Block
title/etc/httpd/conf/httpd.conf
Redirect permanent / https://URL/idp

 


Ativar o serviço HTTP e validar as configurações com os seguintes comandos:

...

Code Block
sudo systemctl restart httpd.service

1.2.2 Instalação do JAVA Servlet Container

Instalação do OpenJDK - Java 8

Code Block
sudo yum install java-1.8.0-openjdk.x86_64

 


Validar a versão de JAVA que foi instalada:

Code Block
java -version
 
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

 


Editamos o ficheiro bash_profile de forma a configurar as variáveis de ambiente de forma permanente:

Code Block
vi ~/.bash_profile

 


O caminho a colocar na variável JAVA_HOME pode ser visualizado listando o conteúdo da seguinte directoria:

...

Code Block
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64/jre
export IDP_SRC=/usr/local/src/shibboleth-identity-provider-3.3.0


PATH=$PATH:$HOME/bin

 


Correr o seguinte comando para que sejam inicializadas as variáveis definidas anteriormente:

Code Block
. /root/.bash_profile

Instalação do Apache Tomcat 8

Por motivos de segurança. o Tomcat terá um utilizador sem privilégios (não root) para correr o serviço.

...

Code Block
useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

 


Realizamos o download do binário do tomcat para a directoria /opt/tomcat/ 

Code Block
wget http://www-eu.apache.org/dist/tomcat/tomcat-8/v8.5.16/bin/apache-tomcat-8.5.16.tar.gz

 


Descompactamos o binário e movemos o conteúdo para a directoria /opt/tomcat/ :

Code Block
tar -xzvf apache-tomcat-8.5.16.tar.gz
mv apache-tomcat-8.5.16/* /opt/tomcat/

 


Damos privilégios ao user tomcat na directoria /opt/tomcat/:

Code Block
chown -hR tomcat:tomcat /opt/tomcat/

 


Colocar o Tomcat a correr como serviço

...

Note

Poderá alterar a alocação de memória especificada em JAVA_OPTS:

JAVA_OPTS="-Djava.awt.headless=true -XX:+DisableExplicitGC -XX:+UseParallelOldGC -Xms512m -Xmx3072m -Djava.security.egd=file:/dev/./urandom"

É recomendado alocar uma parte maior para o Tomcat (3072MB) e a restante (1024MB) para o OS e Apache.

 


Efectuamos um reload ao Systemd para carregar o ficheiro do Tomcat:

Code Block
sudo systemctl daemon-reload

 


Fazemos com que o serviço Tomcat inicie com o SO e fazemos com que inicie: 

Code Block
sudo systemctl enable tomcat
sudo systemctl start tomcat

 


Verificamos o status do serviço:

Code Block
sudo systemctl status tomcat

 


O Tomcat ainda não está totalmente configurado, mas para testar poderá aceder à página default deste abrindo uma janela do browser e colocar o seguinte:

...

  •  Comentar a seguinte elemento :

    Code Block
    title/opt/tomcat/conf/server.xml
    <!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> -->
  • Adicionar o conector AJP no porto 8009 adicionando o seguinte elemento:

    Code Block
    title/opt/tomcat/conf/server.xml
        <!-- Define an AJP 1.3 Connector on port 8009 -->
        <Connector port="8009" protocol="AJP/1.3" redirectPort="443" address="127.0.0.1" enableLookups="false" tomcatAuthentication="false"/>
  • Desabilitar a integração automática de aplicações alterando o atributo autoDeploy="true" para autoDeploy="false"

    Code Block
    title/opt/tomcat/conf/server.xml
    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="false"
  • Ativar a aplicação IdP Web na configuração do Tomcat

    Criar o ficheiro: /opt/tomcat/conf/Catalina/localhost/idp.xml

    Adicionar o seguinte contéudo ao ficheiro:

    Code Block
    title/opt/tomcat/conf/Catalina/localhost/idp.xml
    <Context docBase="/opt/shibboleth-idp/war/idp.war" privileged="true" antiResourceLocking="false" swallowOutput="true"/>
  • Criar ou modificar o ficheiro: /opt/tomcat/conf/Catalina/context.xml para prevenir o erro "lack of persistent of the session objects" criado pelo IdP:

    Code Block
    title/opt/tomcat/conf/Catalina/context.xml
    <Manager pathname="" />
  • Após efectuar as alterações deve reiniciar o serviço Tomcat:

    Code Block
    service tomcat restart

1.2.3 Instalação do PostgreSQL 9

Um Fornecedor de Identidade integrado na federação RCTSaai tem de utilizar uma base de dados pelas seguintes razões:

  • "User Consent" -  Utilizador autoriza olibertar de atributos por parte do “IdP”
  • "eduPersonTargetID" -Geração de um identificador persistente para cada serviço.

 


Para preparar o PostgreSQL para o IdP é necessário instalar os seguintes pacotes:

Code Block
sudo yum install postgresql-server postgresql-jdbc
sudo postgresql-setup initdb
sudo systemctl enable postgresql.service
sudo systemctl start postgresql.service

Criar a BD e Propriedades

Criar um utilizador "shibboleth", a base de dados "shibboleth" e as tabelas "shibpid" e "storagerecords" com os seguintes comandos:

...

Code Block
title/var/lib/pgsql/data/postgresql.conf
autovacuum_vacuum_scale_factor = 0.002  # fraction of table size before vacuum
autovacuum_analyze_scale_factor = 0.001 # fraction of table size before analyze

 


Reiniciar o serviço postgresql:

Code Block
sudo systemctl reload postgresql.service

 


Backup diário da BD

É altamente recomendado ativar o backup da base de dados pelo menos uma vez por dia, permitindo em caso de emergencia realizar-se o "restore" com pequena ou nenhuma perda de dados.

...

Code Block
title/etc/cron.d/postgres-backup
# Cria um dump diario as 4:40 e cria o respetivo ficheiro comprimido (ex.: dumpall-Mon.sql.gz)
40 4 * * * postgres pg_dumpall | gzip > /var/lib/pgsql/backups/dumpall-`date +\%a`.sql.gz

# Backup adicional diario 
20 * * * * postgres pg_dumpall | gzip > /var/lib/pgsql/backups/dumpall-latest.sql.gz

1.3 Instalação do Shibboleth IdP

Realizar o download e descompactar o shibboleth:

Code Block
[ -d /usr/local/dist ] || sudo mkdir /usr/local/dist
cd /usr/local/dist
sudo curl -O https://shibboleth.net/downloads/identity-provider/3.3.0/shibboleth-identity-provider-3.3.0.tar.gz
sudo tar -zxf shibboleth-identity-provider-3.3.0.tar.gz

 


Para realizar uma instalação devem utilizar o ficheiro pré formatado existente neste espaço:

...

Warning

Não usar o ficheiro de instalação da versão anterior.

 


Copiar o ficheiro idp-install.sh para a pasta /usr/local/dist e executar o seguinte comando:

...

Code Block
sudo systemctl reload postgresql.service


1.4 Ativar o processo de criação de ID's persistentes (SAML 2 NameID)

Para ativar o processo de criação de ID's persistentes são necessárias as seguintes alterações:

...

Note

No attribute-resolver-rctsaai-core.xml (a ser configurado no ponto 2.5) está definida a AttributeDefinition para o sAMAccountName necessária para o correcto funcionamento do consentimento de atributos e dos termos de uso.

1.5 Configurar a Página de Status do IdP

A página de estado do IdP depende do JSP Standard Tag Library (JSTL) que não está incluída na distribuição do Shibboleth IdP.

...

Code Block
cd /opt/shibboleth-idp/edit-webapp/WEB-INF/lib
sudo curl -O https://repo1.maven.org/maven2/jstl/jstl/1.2/jstl-1.2.jar
sudo JAVACMD=/usr/bin/java /opt/shibboleth-idp/bin/build.sh -Didp.target.dir=/opt/shibboleth-idp

 


Devem obter um resultado semelhante ao descrito abaixo:

Panel
Warning: JAVA_HOME environment variable is not set.
  If build fails because sun.* classes could not be found
  you will need to set the JAVA_HOME environment variable
  to the installation directory of java.
Rebuilding /opt/shibboleth-idp/war/idp.war ...
...done

BUILD SUCCESSFUL
Total time: 3 seconds

 


Para assegurar que a informação de estado do IdP apenas está disponivel para determinados endereços ip's é necessário alterar a definição shibboleth.IPRangeAccessControl no ficheiro /opt/shibboleth-idp/conf/access-control.xml 

...

Code Block
service tomcat restart

1.6 Workaround "Large Objects" - (Não executar o IdP pela primeira vez sem realizar esta alteração)

O IDP V3 "out-of-the box" irá utilizar "large objects"  para a coluna storagerecords.value sem ativar a opção do postgreSQL que permite realizar a gestão deste tipo de objetos, o que resultará em "large objects" orfãos e perda de dados se o comando vacuumlo for executado.

Para evitar esta situação devem realizar o download do ficheiro:orm.xml

 

 



  • Adicionar o ficheiro na directoria /opt/shibboleth-idp/edit-webapp/WEB-INF/classes/META-INF:

    Panel
    sudo mkdir -p /opt/shibboleth-idp/edit-webapp/WEB-INF/classes/META-INF
    cd /opt/shibboleth-idp/edit-webapp/WEB-INF/classes/META-INF/
    

...

Code Block
service tomcat restart

1.7 Importar Libraries (JARs) utilizadas pelo Tomcat e pelo Shibboleth

Deverá copiar as seguintes libraries para as respectivas directorias:

Code Block
cp /usr/share/java/postgresql-jdbc.jar /opt/shibboleth-idp/edit-webapp/WEB-INF/lib/
cp /usr/share/java/postgresql-jdbc.jar /opt/tomcat/lib/
cp /opt/tomcat/lib/tomcat-jdbc.jar /opt/shibboleth-idp/edit-webapp/WEB-INF/lib/
 

 

 



Instalar as libraries Tomcat Common Pool utilizadas para gerar o saml-id:

Code Block
cd /usr/local/src/
wget https://www.apache.org/dist/commons/pool/binaries/commons-pool2-2.4.2-bin.tar.gz
tar xzvf commons-pool2-2.4.2-bin.tar.gz
cd commons-pool2-2.4.2/
cp commons-pool2-2.4.2.jar /opt/shibboleth-idp/edit-webapp/WEB-INF/lib

 


• Colocar as seguintes libraries na directoria /opt/tomcat/lib/:

...

• Colocar a seguinte library na directoria /opt/shibboleth-idp/edit-webapp/WEB-INF/lib/ :

sqljdbc42.jar

 



Realizar o rebuild do ficheiro idp.war para incluir as alterações:

...