Tutorial Básico SimpleSAMLphp

Instalação e Configuração

Autor: Rui Ribeiro
Atualização: 10/03/2015
Revisão: 3

Sumário


1. Introdução
2. Glossário de Variáveis
3. Roteiro de Instalação
4. Roteiro de Configuração

Introdução


O SimpleSAMLphp (SimpleSAML) [1] é uma ferramenta escrita em PHP, compatível com o Shibboleth, que trata das questões relativas a autenticação. Muito embora o SimpleSAML possa atuar tanto como Identity Provider (IdP) quanto como Service Provider (SP) este tutorial ficará restrito a segunda opção, ou seja, SP.

Este tutorial apresenta os procedimentos necessários para instalar e configurar o SimpleSAML. Os comandos apresentados no roteiro presumem que a instalação é feita em um servidor Linux onde há possibilidade de acesso shell.

O conteúdo deste roteiro é um resumo da documentação oficial disponível em https://simplesamlphp.org/docs/stable/simplesamlphp-install/ e https://simplesamlphp.org/docs/stable/simplesamlphp-sp. Eventuais dúvidas devem ser sanadas através da documentação oficial. Voltar ao sumário

Glossário de Variáveis


Ao longo deste roteiro poderão ser utilizadas algumas variáveis que estarão destacadas em negrito. A seguir é apresentado um glossário para substituição das variáveis: Voltar ao sumário

Roteiro de Instalação


Este roteiro abordará os passos necessários para fazer a instalação básica da SimpleSAML.

1. Faça download do SimpleSAML através do endereço: https://simplesamlphp.org/res/downloads/simplesamlphp-1.13.2.tar.gz

2. Descompacte o arquivo e renomeie a pasta criada para simplesamlphp.

tar -zxvf simplesamlphp-1.13.2.tar.gz
mv simplesamlphp-1.13.2 simplesamlphp
3. A unica pasta do SimpleSAMLphp que deve ficar exposta na internet é a www. Um exemplo de configuração é:
<VirtualHost *>
        ServerName service.example.com
        DocumentRoot /var/www/service.example.com

        Alias /simplesaml /var/simplesamlphp/www
</VirtualHost>
4. É necessário criar um certificado SSL e uma chave privada. Para isso, execute os seguintes passos:

4.1. Crie o arquivo /tmp/openssl.cnf com o conteúdo a seguir:

[ req ]
default_bits = 2048 # Size of keys
string_mask = nombstr # permitted characters
distinguished_name = req_distinguished_name 

[ req_distinguished_name ]
# Variable name   Prompt string
#----------------------   ----------------------------------
0.organizationName = Nome da universidade/organização
organizationalUnitName = Departamento da universidade/organização
emailAddress = Endereço de email da administração
emailAddress_max = 40
localityName = Nome do município (por extenso)
stateOrProvinceName = Unidade da Federação (por extenso)
countryName = Nome do país (código de 2 letras)
countryName_min = 2
countryName_max = 2
commonName = Nome completo do host (incluíndo o domínio)
commonName_max = 64

# Default values for the above, for consistency and less typing. 
# Variable name   Value 
#------------------------------   ------------------------------ 
0.organizationName_default = UFRGS - Universidade Federal do Rio Grande do Sul
# Obs.: o valor de organizationalUnitName_default pode ser modificado, para indicar quem é o provedor do serviço
organizationalUnitName_default = UFRGS - Universidade Federal do Rio Grande do Sul
localityName_default = Porto Alegre
stateOrProvinceName_default = Rio Grande do Sul
countryName_default = BR
commonName_default = $HOSTNAME_FULL
4.2. Execute os seguintes comandos:
openssl genrsa 2048 -config /tmp/openssl.cnf > simplesaml.key 
openssl req -new -x509 -nodes -days 1095 -sha1 -key simplesaml.key -set_serial 00 -config /tmp/openssl.cnf > simplesaml.crt
openssl pkcs12 -export -in simplesaml.crt -inkey simplesaml.key -out simplesaml.p12 -name simplesaml -caname selfsigned
4.3. Mova os arquivos simplesaml.key; simplesaml.crt e simplesaml.p12 para a pasta simplesamlphp/cert

5. Edite o arquivo de configuração disponível em simplesamlphp/config/config.php e altere as seguintes entradas:

6. Acesso o SimpleSAML através do endereço servidor.ufrgs.br/autenticacao-federada/www. Se a instalação ocorreu com sucesso, uma tela similar a Figura 1 deverá ser exibida.


Figura 1
Voltar ao sumário

Roteiro de Configuração


Este roteiro abordará os passos necessários para fazer a configuração básica da SimpleSAML para que este atue como um Service Provider (SP).

1. Faça a configuração dos parâmetros do SP. Para tanto edite o arquivo simplesamlphp/config/authsources.php e substitua o conteúdo do referido arquivo pelas linhas a seguir:

<?php
$config = array (

	'admin' => array(
		'core:AdminPassword',
	),

	'default-sp' => array(
		'saml:SP',
		'privatekey' 	=> 'simplesaml.key',
		'certificate' 	=> 'simplesaml.crt',
		'entityID' 	=> 'https://$HOSTNAME_FULL/caminho/simplesamlphp',
		'idp' 		=> 'https://login.teste.ufrgs.br/idp/shibboleth',
	),
);
2. O arquivo simplesamlphp/metadata/saml20-idp-remote.php contém informações relativas ao IdP que será utilizado pelo SimpleSAML. Substitua o conteúdo do arquivo pelas linhas a seguir:
<?php
$metadata['https://login.teste.ufrgs.br/idp/shibboleth'] = array(
	'name' => array(
		'en' 	=> 'UFRGS',
		'pt-BR' => 'UFRGS',
        ),
        'description'          => 'Servidor de autenticação da UFRGS - Teste',
        'SingleSignOnService'  => 'https://login.teste.ufrgs.br/idp/profile/SAML2/Redirect/SSO',
        'certFingerprint'      => 'EA9D6546BF3D1C3DE84D945993516D3E26B39FD8'
);
3. Para obter os metadados do SimpleSAML para adiciona-los a Federação, acesse o SimpleSAML e clique na aba Federation e depois na opção Show Metadata. Os metadados estão presentes na caixa de texto In SAML 2.0 Metadata XML format.

4. É importante ressaltar que o SimpleSAML apenas estará integrado a Federação uma vez que seus metadados (obtidos no passo anterior) estejam inclusos no arquivo de metadados da Federação. Para tanto, envie os metadados para: rui.ribeiro@cpd.ufrgs.br

5. Após copiar os metadados é fortemente recomendável o bloqueio do acesso às páginas de configuração do SimpleSAMLphp, para tanto, altere o valor dos atributos protectindexpage e protectmetadata que estão no arquivo config/config.php para true.

'admin.protectindexpage' => true,
'admin.protectmetadata' => true,
Voltar ao sumário