bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Configurare Liferay 6.2 con LDAP e CAS 5.0.x

Prerequisiti

JDK 8, apache tomcat 8 per installazione del cas-server
JDK 7, per il runtime di liferay 6.2

Installazione Ldap

Per semplicità d'uso e configurazione ho deciso di utilizzare apacheDS.

  • Scaricare apache DS
  • Installare apache DS con le impostazioni standard

Ora scarichiamo e installiamo JXplorer, un utility che useremo per connetterci e gestire il nostro ldap

  • Scaricare JXplorer
  • Installare JXplorer
  • Configurate JXplorer per connettersi al nostro ldap

Ecco i parametri di connessione:

  • hostname : localhost
  • port : 10389
  • Level : user+password
  • User DN : uid=admin,ou=system
  • password : secret

Andiamo ad aggiungere l'utente di default di Liferay (test@liferay.com) ad ldap:

  • Nella parte sinistra di JXplorer espandiamo l'albero
  • Tasto destro su "example" ---> new

Insieriamo :

 

  •     RDN: cn=test
  •     Base DN:dc=example,dc=com

Aggiungiamo i seguenti campi

  • organizationalPerson
  • person
  • top
  • inetOrgPerson

Compiliamo i campi in questo modo:

  • cn=Test Test (full name di liferay)
  • sn=Test
  • displayName=test
  • givenName=Test
  • mail=test@liferay.com
  • uid=test
  • userPassword -->inseriamo la password e come policy di crypt utilizziamo SHA1


Prima di  startare Liferay aggiugiamo la seguente property nel portal-ext.properties

ldap.auth.password.encryption.algorithm=SHA

quindi avviamo liferay e autentichimoci con l'utenza di default (test@liferay.com)

Da pannello di controllo configuriamo la connessione ad Ldap

Spuntare i seguenti flag

  • Enabled (abilita ldap)
  • Export Enabled (abilita l'export degli utenti liferay verso ldap)

Aggiungiamo un server ldap e configuriamolo in questo modo

  • Server Name : ldap://localhost:10389
  • Base Provider URL : ldap://localhost:10389
  • Base DN : dc=example,dc=com
  • Principal : uid=admin,ou=system
  • Credential : secret
  • Auth Search Filter : (mail=@email_address@)
  • Import Search Filter : (objectClass=organizationalPerson)

Configuriamo il mapping dei campi ldap-->utente liferay

  •  screen name :displayname
  •  Email Address :mail
  •  Password : userPassword
  •  First Name : givenName
  •  Last Name : sn
  •  Job Title : title
  •  Full Name : cn

Come ultima cosa configuriamo i parametri per l'export degli utenti

  • Users DN : dc=example,dc=com
  • User Default Object Class : organizationalPerson,top,person,inetOrgPerson


La configurazione di ldap è terminata.

Configurazione del cas server

Come prima cosa scarichiamo i sorgenti del cas-server


    https://github.com/apereo/cas/releases/tag/v5.0.4

Scompattiamo i sorgenti e portiamoci nella cartella cas-server-webapp

cas5.0.4/webapp/cas-server-webapp

Modifichiamo il build.gradle  per aggiungere il supporto ad ldap (che di default non è installato)

compile project(":support:cas-server-support-ldap")

a questo punto dalla root-folder di cas lanciamo il seguente comando

gradlew war

Non abbiamo bisogno di installare gradle in quanto CAS contiene  il gradle wrapper.

Rinominiamo il war appena generato in cas-server.war (eliminando quindi  la versione)

A questo punto dobbiamo generare il certificato e importarlo nelle jre di entrambe le jdk

keytool -genkey -alias tomcat -keypass changeit -keyalg RSA

Enter keystore password:  changeit
What is your first and last name?
[Unknown]:  localhost
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: y

Esportare il certificato in un file che, per esempio, possiamo chiamare: server.cert

keytool -export -alias tomcat -keypass changeit -file server.cert

Importarlo nella jre di entrambe le jdk

keytool -import -alias tomcat -file server.cert -keypass changeit -keystore %JAVA_HOME%/jre/lib/security/cacerts

Dopo aver importato i certificati dobbiamo abilitare il connettore https su entrambi i tomcat

Editiamo il server.xml del cas-server e aggiungiamo

<Connector port="9443" maxHttpHeaderSize="8192"  protocol="org.apache.coyote.http11.Http11NioProtocol"
        maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
        enableLookups="false" disableUploadTimeout="true"
        acceptCount="100" scheme="https" secure="true"
        clientAuth="false" sslProtocol="TLS" SSLEnabled="true" keystoreFile="${user.home}/.keystore"    keystorePass="changeit"/>

Ora editiamo in maniera speculare il server.xml del tomcat di liferay

<Connector SSLEnabled="true" acceptCount="100" clientAuth="false" disableUploadTimeout="true" enableLookups="false"
        keystoreFile="${user.home}/.keystore" keystorePass="changeit"
        maxHttpHeaderSize="8192" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="8443"
        protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS"/>

Ora possiamo startare il server liferay.

Come già fatto per ldap andiamo nel pannello di controllo e nella sezione  riguardante il cas configuriamo i paramentri nel modo seguente

Abilitiamo il flag

  •     enabled

configuriamo gli altri parametri in questo modo

  • cas login: https://localhost:9443/cas-server/login
  • cas logout:https://localhost:9443/cas-server/logout
  • server name:https://localhost:8443
  • server url:https://localhost:9443/cas-server
  • No Such User Redirect URL:https://localhost:8443

Salviamo la configurazione e facciamo logout.

Come ultimo passo dobbiamo configurare la webapp di cas.

Copiamo il war di cas  nella webapp di tomcat 8 e startiamo il server.

Appena il war viene scompattato stoppiamo il tomcat.

Ora modifichiamo i file di proprty del cas che si trovano in tomcat/webapp/cas-server/classes

Editiamo boostrap.property

Commentiamo la riga seguente

spring.cloud.config.server.native.searchLocations=file:///etc/cas/config

Ora editiamo


application.property

sovrascirvere il contennuto del file con le property seguenti (adattando i paramentri di connessione ad ldap)       

Modifichiamo la sezione relativa al logging in questo modo

##
# CAS Log4j Configuration
#
#logging.config=file:/etc/cas/log4j2.xml
logging.config=classpath:log4j2.xml
#server.context-parameters.isLog4jAutoInitializationDisabled=true

Disabiltiamo gli utenti statici di cas (in caso contrario funzionerebbe solo con questi)

##
# CAS Authentication Credentials
#
cas.authn.accept.users=

e come ultimo passo agiungiamo i parametri di connessione ad ldap


cas.authn.ldap[0].ldapUrl=ldap://localhost:10389
cas.authn.ldap[0].useSsl=false
cas.authn.ldap[0].useStartTls=false
cas.authn.ldap[0].connectTimeout=5000
cas.authn.ldap[0].baseDn=dc=example,dc=com
cas.authn.ldap[0].userFilter=mail={user}
cas.authn.ldap[0].subtreeSearch=true
cas.authn.ldap[0].bindDn=uid=admin,ou=system
cas.authn.ldap[0].bindCredential=secret
cas.authn.ldap[0].dnFormat=objectClass=organizationalPerson
cas.authn.ldap[0].type=AUTHENTICATED

cas.authn.ldap[0].principalAttributeId=mail
cas.authn.ldap[0].principalAttributePassword=userPassword

cas.authn.ldap[0].minPoolSize=3
cas.authn.ldap[0].maxPoolSize=10
cas.authn.ldap[0].validateOnCheckout=true
cas.authn.ldap[0].validatePeriodically=true
cas.authn.ldap[0].validatePeriod=600
cas.authn.ldap[0].failFast=false
cas.authn.ldap[0].idleTime=5000
cas.authn.ldap[0].prunePeriod=5000
cas.authn.ldap[0].blockWaitTime=5000

Configuriamo le chiavi di encrypt per i cookie. (Se non le configuriamo al primo start di cas verranno generate e scritte nei log)


# CAS SSO Cookie Generation & Security
# See https://github.com/mitreid-connect/json-web-key-generator
#
# Do note that the following settings MUST be generated per deployment.
#
# Defaults at spring-configuration/ticketGrantingTicketCookieGenerator.xml
# The encryption secret key. By default, must be a octet string of size 256.
tgc.encryption.key=f0ScJSsOIEzZf5Llhmq-xc9GA9oHBHtQmoRLbCxKFUc

# The signing secret key. By default, must be a octet string of size 512.
tgc.signing.key=tPw2L0W3fyPpZUEiIi-qKz6RAt4FuHsqUPJblBNUfBPWkrDtAJaMFOYOoCqrUapf6pDOke8ApFAO4itTQBvMag

Finalemente abbiamo finito tutte le configurazioni e possiamo startare il nostro server cas.

Purtroppo Liferay, ha un bug sul primo accesso, dovuto ad una doppia validazione del ticket generato dai termini d'uso e dal cambio password.

Quindi ho dovuto  modificare tramite un hook due jsp

terms_of_use.jsp

in cui ho modificato il primo statement if all'interno della jsp in questo modo

if (referer.equals(themeDisplay.getPathMain() + "/portal/update_terms_of_use")) {
    referer = themeDisplay.getPathMain() + "?doAsUserId=" + themeDisplay.getDoAsUserId();
} else if (referer.contains("ticket")) {
    referer = HttpUtil.removeParameter(referer, "ticket");
}

e in modo speculare ho modificato

update_password.jsp


if (referer.startsWith(themeDisplay.getPathMain() + "/portal/update_password") && Validator.isNotNull(ticketKey)) {
    referer = themeDisplay.getPathMain();
}else if (referer.contains("ticket")) {
     Prevents CAS ticket to be validated twice
    referer = HttpUtil.removeParameter(referer, "ticket");
}

Dopo paver deployato l'hook colleghiamoci a https://localhost:8443

  • registriamo un utente
  • verifichiamo  che venga esportato su ldap
  • clicchiamo su sign-in (non dalla portlet) per venire reindirizzati su cas
  • inseriamo le nostre credenziali

se tutto è andato a buon fine verremo reindirizzati su liferay che ci chiederà di accettare i termini d'uso e cambiare la password.

 

 

 

 

 

Commenti
Nessun commento. Vuoi essere il primo.