Alfresco 4.2f – Reverse Proxy

On à vu dans les articles précédents comment installer Alfresco et gérer les paramètres de prévisualisations du « Transformation Server »

On va maintenant chercher à publier le site au travers un reverse proxy Apache (Ubuntu 14.04) qui va assurer le chiffrement SSL entre le proxy et le client. Si on ne passe pas par le SSL ça va être la misère pour monter des lecteurs réseaux webdav, windows ne permettant pas la connexions à des ressources web via HTTP.

J’ai donc paramétré un serveur ubuntu avec un accès root et SSH dessus ainsi qu’un serveur apache qui tourne. Les ports 80/443 sont NATés dessus. Au niveau d’apache il faut activer les modules suivants

sudo a2enmod proxy proxy_ajp ssl rewrite

Petit redémarrage d’Apache en règle :

service apache2 restart

On créé ensuite un nouveau VirtualHost dans :

nano /etc/apache2/sites-available/alfresco.ssl.conf

Voici ce que j’y ai inséré :

<IfModule mod_ssl.c>
#Redirection http vers https
<VirtualHost *:80>
ServerName host.domain.tld
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
</VirtualHost>
# Publication Alfresco et Share
<VirtualHost *:443>
ServerName host.domain.tld
ProxyRequests Off
RewriteEngine On
Redirect permanent / https://host.domain.tld/share
ProxyPass /share ajp://ipaddressalfresco:8009/share
ProxyPassReverse /share ajp://ipaddressalfresco:8009/share
ProxyPass /alfresco ajp://ipaddressalfresco:8009/alfresco
ProxyPassReverse /alfresco ajp://ipaddressalfresco:8009/alfresco
ErrorLog ${APACHE_LOG_DIR}/alfresco.ssl.error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine On
SSLCertificateFile pathtocert.crt
SSLCertificateKeyFile pathtoprivate.key
SSLCertificateChainFile pathtocertchain.pem
<FilesMatch « \.(cgi|shtml|phtml|php)$ »>
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch « MSIE [2-6] » \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch « MSIE [17-9] » ssl-unclean-shutdown
</VirtualHost>
# Publication protocole SharePoint
<VirtualHost *:443>
ServerName host.domain.tld
ProxyRequests Off
RewriteEngine On
ProxyPass / http://ipaddressalfresco:7070/
ProxyPassReverse / http://ipaddressalfresco:7070/
ProxyPass /_vti_bin/ http://ipaddressalfresco:7070/_vti_bin/
ProxyPassReverse /_vti_bin/ http://ipaddressalfresco:7070/_vti_bin/
ProxyPass /_vti_inf.html http://ipaddressalfresco:7070/_vti_inf.html
ProxyPassReverse /_vti_inf.html http://ipaddressalfresco:7070/_vti_inf.html
ProxyPass /_vti_inf.html http://ipaddressalfresco:7070/_vti_inf.html
ProxyPassReverse /_vti_inf.html http://ipaddressalfresco:7070/_vti_inf.html
ProxyPass /_vti_history/ http://ipaddressalfresco:7070/_vti_history/
ProxyPassReverse /_vti_history/ http://ipaddressalfresco:7070/_vti_history/
ErrorLog ${APACHE_LOG_DIR}/spp.ssl.error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile pathtocert.crt
SSLCertificateKeyFile pathtoprivate.key
<FilesMatch « \.(cgi|shtml|phtml|php)$ »>
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch « MSIE [2-6] » \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch « MSIE [17-9] » ssl-unclean-shutdown
</VirtualHost>
</ifmodule>

Quelques petites subtilités, les noms d’hôtes doivent être différents entre Alfresco et le SharePointProtocol, perso je fait tourner alfresco sur domain.tld et le SharePointProtocol sur spp.domain.tld

Pour activer le site

a2ensite nomdusite

service apache2 reload

Ils nous faut à présent modifier quelques paramètres dans le fameux alfresco-global.properties

nano /alfresco/tomcat/shared/classes/alfresco-global.properties

On y modifie les paramètres suivants : on spécifie le HTTPS ainsi que le port souhaité pour les applications « share » et « alfresco » :

alfresco.context=alfresco
alfresco.host=host.domain.tld
alfresco.port=443
alfresco.protocol=https

share.context=share
share.host=host.domain.tld
share.port=443
share.protocol=https

Le site devrait maintenant être accessible au travers le ReverseProxy et le Webdav sur SSL fonctionnel!

 

Rien de bien sorcier jusque là… La suite au prochain épisode.

 

16 commentaires

    1. Bonjour Guy, oui je l’ai fait. Je vais essayer de faire un article bientôt concernant la migration vers la 5.2 avec reverse proxy. Sinon enregistrez votre mail je vous envoie les conf.

  1. Bonjour,
    Je me suis inspirée de ce billet pour mettre en place Apache en proxy frontal pour Alfresco (sur Windows). L’objectif était de permettre l’authentification en LDAP sécurisé (TLS) à Alfresco. Cela n’a pas marché! J’accède à la page de connexion Alfresco en https, mais j’obtiens le message d’erreur suivant (que j’obtenais aussi en http depuis la sécurisation du LDAP) :
    09:00:00,228 ERROR [org.alfresco.repo.security.sync.ChainingUserRegistrySynchronizer] Synchronization aborted due to error
    org.alfresco.repo.security.authentication.AuthenticationException: 06280036 Echec de la connexion à ldap://SERV-X3650VM1.SE.local:389. Raison javax.naming.AuthenticationNotSupportedException, [LDAP: error code 8 – 00002028: LdapErr: DSID-0C0901FC, comment: The server requires binds to turn on integrity checking if SSL\TLS are not already active on the connection, data 0, v1db1 ]
    at org.alfresco.repo.security.authentication.ldap.LDAPInitialDirContextFactoryImpl.buildInitialDirContext(LDAPInitialDirContextFactoryImpl.java:192)
    at org.alfresco.repo.security.authentication.ldap.LDAPInitialDirContextFactoryImpl.getDefaultIntialDirContext(LDAPInitialDirContextFactoryImpl.java:108)
    at org.alfresco.repo.security.authentication.ldap.LDAPInitialDirContextFactoryImpl.getDefaultIntialDirContext(LDAPInitialDirContextFactoryImpl.java:89)
    at org.alfresco.repo.security.sync.ldap.LDAPUserRegistry$3.(LDAPUserRegistry.java:688)
    at org.alfresco.repo.security.sync.ldap.LDAPUserRegistry.getGroups(LDAPUserRegistry.java:685)
    at org.alfresco.repo.security.sync.ChainingUserRegistrySynchronizer.syncWithPlugin(ChainingUserRegistrySynchronizer.java:969)
    at org.alfresco.repo.security.sync.ChainingUserRegistrySynchronizer.synchronize(ChainingUserRegistrySynchronizer.java:714)
    at org.alfresco.repo.security.sync.UserRegistrySynchronizerJob$1.doWork(UserRegistrySynchronizerJob.java:51)
    at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:548)
    at org.alfresco.repo.security.sync.UserRegistrySynchronizerJob.execute(UserRegistrySynchronizerJob.java:47)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:563)
    Caused by: javax.naming.AuthenticationNotSupportedException: [LDAP: error code 8 – 00002028: LdapErr: DSID-0C0901FC, comment: The server requires binds to turn on integrity checking if SSL\TLS are not already active on the connection, data 0, v1db1 ]

    Quelqu’un sait-il ce que je peux faire pour résoudre mon problème?

    1. Bonjour,
      En revenant ici chercher des informations, j’ai vu mon dernier commentaire alors voici la réponse 🙂

      Le contexte :
      Une instance Alfresco qui fonctionnait correctement en utilisant une authentification LDAP sans SSL. Suite à l’ajout d’un certificat sur le réseau, les connexions ne pouvaient plus s’effectuer sur l’instance Alfresco. L’erreur retournée était la même que ci-dessus : « The server requires binds to turn on integrity checking if SSL\TLS are not already active on the connection, data 0, v1db1 ».

      La résolution de mon problème :
      Changer la configuration LDAP en remplaçant le ldap://server.domain.local :389 par ldaps://server.domain.local :636
      Ajouter le certificat dans le truststore utilisé par Tomcat
      Je crois bien que c’est tout…
      J’ai utilisé pour vérification et tests la commande LDP de Windows Server, Apache Directory Studio, openssl s_client et SSLPoke.

    1. J’ai le même problème que Christophe. Je suis sous alfresco 5.0c et je fais des tests sur le site des samples fournis avec alfresco et des que j’ouvre le fichier j’ai comme erreur:
      Impossible d’ouvrir « https://spp.mondomaine.com:443/alfresco/swsdp/documentLibrary/Meeting Notes/Meeting Notes 2011-02-03.doc ».

      Aucune erreur dans les logs. Avez-vous une idée ?

      ps: Je découvre votre site qui est une mine d’or 😉

      1. Pour ceux qui aurait le même problème il suffit d’activer le module apache
        en faisant:
        a2enmod proxy_http
        services apache2 restart.

        Et sa devrais fonctionner.

        1. Salut Matthieu, j’ai pas trop eu le temps de te répondre… Content de voir que tu as réussi à te débrouiller et surtout que soit venu poster la réponse! faut que je mette à jour ma procédure si j’ai oublié de préciser l’activation de certains modules.

  2. Merci de ta réponse rapide. En effet cela fonctionne mieux, mais il me reste un souci.
    Pour résumer ma config: j’utilise les noms d’hôtes alfresco.mondomaine.com et sppalfresco.mondomaine.com tous les 2 renseigners avec la meme ip dans mon dns. J’ai crée un certificat pour chaque hote signé par con controleur de domaine.
    désormais lorsque ke modifier mon document en ligne, celui-ci va bien le chercher sur le bon chemin https://sppalfresco.mondomaine.com/alfresco/…..
    Par contre j’ai une fenetre qui souvre qui me demande quel certificat utiliser en me proposant mon certificat de domaine utilisateur, si je clique sur annuler cela me demande un nom d’utilisateur et un mot de passe.

  3. Bonjour.
    Je suis votre tutoriel. J’accède bien à Alfresco en HTTP avec Apache en frontal.
    Mais j’ai un soucis sur le protocole Sharepoint. Cela ne fonctionne pas. Quand je clique sur un document Word pour l’éditer en ligne, Word s’ouvre mais sans le document. Je crois savoir qu’il y a une configuration à noter dans alfresco-global-properties et/ou vti-config-custom.xml concernant des lignes « vti… » . Mais on n’en parle pas du tout ici. Pourriez-vous m’éclairer s’il-vous-plait ?

    1. Bonjour Jérémie,

      Je note que vous essayez de faire fonctionner le SharePoint Protocol avec un Reverse Apache en HTTP, Par défaut, sur des environnements relativement récents (W7 et Office 2010/2013), le SPP ne fonctionne qu’en HTTPS, à moins de modifier les clefs de registres suivantes :

      « HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel » (REG_DWORD) > La passer à 2

      “HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet\BasicAuthLevel” (REG_DWORD) > La passer à 2 également.

      Voir : http://docs.alfresco.com/4.1/tasks/SharePoint-config-office2010.html

      Peut être est-ce cela, sinon avez qu’avez vous dans les logs d’Alfresco lors d’une tentative d’édition-en ligne?

      Vincent

      1. Bonjour,
        Tout d’abord merci pour vos tutos qui sont très clairs et instructifs.
        J’ai le même souci que jeremie lors de la tentative d’edition en ligne de documents, n’est il pas possible d’utiliser spp en https? ce serait plus propre – j’ai aussi cru voir d’autres sites en lignes qui parlaient d’une configuration vti a rentrer dans alfresco.global.properties.
        De plus dans la configuration apache si je rentre la partie suivante :

        SSLOptions +StdEnvVars

        J’ai une erreur lorsque je rentre apache sur filematch qui n’accepte pas plusieurs types de fichiers.

        Merci d’avance.

          1. je m’auto répond pour la partie configuration apache, il ya un souci de ponctuation dans ton tuto pour files match il faut mettre guillemet au lieu de « et bien supprimer l’espace qui le suit.

          2. Bonjour Christophe,

            J’ai en effet, je pense, oublié de spécifier certains paramètres concernant le paramétrage du protocole SharePoint pour l’utiliser au travers le reverse proxy voici la config que j’utilise (dans alfresco-global.properties)

            ### Sharepoint protocol ###
            vti.server.external.host=spp.domain.tld
            vti.server.external.port=443
            vti.server.external.protocol=https
            vti.server.port=7070

            Cela vous aide t-il?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.