Tag Archives: Portlet

Jak zabezpečit Liferay portál pomocí HTTPS

Pro našeho zákazníka jsme implementovali portlet pro zabezpečené přihlášení do jeho interních aplikací. Tento portlet je umístěn na Liferay portálu a po ověření loginu a hesla proti Access Manageru SunSSO (technologii popsal kolega zde) vydá uživateli SSO cookie. Součástí tohoto úkolu bylo zabezpečit Liferay portál, aby k přihlašovací stránce šlo přistupovat pouze pomocí HTTPS. Na druhou stranu bylo nutné, aby k jiným stránkách portálu bylo možné nadále přistupovat přes HTTP.

V tomto článku vás seznámíme se způsobem, jak jsme tento požadavek vyřešili.

Analýza prostředí

V prostředí našeho zákazníka běží portál Liferay 6.1.2 CE na aplikačním serveru Tomcat 7.0.40.

Jedno z řešení, které bychom mohli použít, by spočívalo v nastavení HTTPS přímo do konfigurace Tomcatu. Druhou možností bylo nainstalovat před Liferay web server, který se postará o zabezpečení přes SSL a požadavky bude lokálně předávat aplikačnímu serveru již nešifrovaně.

Zvolili jsme druhý přístup, protože umožňuje větší flexibilitu a i do budoucna snazší řešení specifických požadavků zákazníka. Vybrali jsme Apache web server, který bude poskytovat následující služby:

  • Na portu 80 bude poskytovat přístup k Liferay portálu přes HTTP.
  • Na portu 443 bude poskytovat zabezpečený přístup k Liferay přes HTTPS. Pro ověření pravosti serveru bude nabízet certifikát uložený na serveru.
  • Přistoupí-li uživatel přes HTTP, zůstane po celou dobu na nezabezpečeném kanálu. Podobně pro HTTPS – po prvním přístupu na HTTPS už na něm uživatel zůstane. Není žádoucí vyžadovat jen zabezpečený přístup.
  • Předchozí bod má jednu výjimku, a to u stránky pro přihlášení. Zde je vždy vynucen přístup přes HTTPS.

Pro zajištění všech uvedených služeb stačí do standardní instalace Apache přidat ještě modul mod_ssl.

Nastavení Apache

Web server Apache a modul mod_ssl jsme nainstalovali ze standardních balíčků operačního systému CentOS:

$ yum install httpd
$ yum install mod_ssl

Dále ověříme, že jsou přítomné moduly mod_proxy a mod_proxy_ajp (na CentOSu jsou součástí standardní instalace Apache). Pokud nejsou, nainstalujeme je podobně jako mod_ssl.

Instance Apache je umístěna v adresáři /etc/httpd. Zde vytvoříme adresář ssl, kam umístíme náš certifikát a jeho soukromý klíč (mujweb.cz.cert a mujweb.cz.key).

Konfiguraci portů chceme mít umístěnou v jednom souboru, proto v hlavním konfiguračním souboru v conf/httpd.conf zakomentujeme řádek Listen 80. Ve složce conf.d přidáme ke všem konfiguračním souborům např. příponu “.orig”, aby je Apache nenačítal (případně je můžeme rovnou smazat).

Následně vytvoříme hlavní konfigurační soubor v adresáři conf.d:

LoadModule ssl_module modules/mod_ssl.so
Listen 80
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout 300
SSLMutex "file:/var/run/ssl_mutex"

<VirtualHost mujweb.cz:80>
    ServerName mujweb.cz

    <IfModule mod_proxy.c>
        ProxyRequests Off
        ProxyVia On
        <Proxy *>
            Order Allow,Deny
            Allow from All
        </Proxy>
        <LocationMatch "/web/login">
            Redirect permanent / https://mujweb.cz/
        </LocationMatch>
        ProxyPass / ajp://localhost:8009/
    </IfModule>
</VirtualHost>
<VirtualHost mujweb.cz:443>
    ServerName mujweb.cz

    <IfModule mod_proxy.c>
        ProxyRequests Off
        ProxyVia On
        <Proxy *>
            Order Allow,Deny
            Allow from All
        </Proxy>
        ProxyPass / ajp://localhost:8009/
        </IfModule>

        SSLEngine on
        SSLProtocol -ALL +SSLv3 +TLSv1
        SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
        SSLCertificateFile "/etc/httpd/ssl/mujweb.cz.cert"
        SSLCertificateKeyFile "/etc/httpd/ssl/mujweb.cz.key"
        SSLVerifyClient none

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
        </FilesMatch>

        BrowserMatch ".*MSIE.*" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0

        ErrorLog "logs/httpd-error.log"
        TransferLog "logs/httpd-access.log"

        CustomLog "logs/httpd-ssl_request.log" \
            "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

Všimněme si zvýrazněných řádků. První z nich zajistí, že při přístupu na přihlašovací stránku (http://mujweb.cz/web/login) je uživatel ihned natrvalo přesměrován na HTTPS. Řádek s direktivou ProxyPass / ajp://localhost:8009/ zajišťuje předávání požadavků do Liferay, čímž se podrobněji zabývá následující kapitola.

Nyní zbývá už jen nastartovat Apache a také nastavit, aby se automaticky spouštěl při každém restartu serveru:

$ service httpd start
$ chkconfig --level 2345 httpd on

Samozřejmostí, na kterou ale snadno zapomeneme, je, aby porty 80 a 443 byly povolené ve firewallu :-)

Nastavení Liferay

Tomcat běží standardně na portu 8080, kde poskytuje stránky portálu. Zároveň ale na portu 8009 poslouchá jeho AJP konektor, který je určen ke komunikaci aplikačního serveru s web serverem. Požadavky na web server proto směřujeme na tento port, což zajistí, že Liferay dostane informaci o tom, jakým způsobem uživatel přistupuje. Liferay tuto informaci potřebuje zejména kvůli generování odkazů v rámci portálu (např. odkazy, kam se odesílají formuláře). Musí vědět, zda má vygenerovat odkaz pro HTTP, nebo HTTPS, či jaké má použít hostname.

V konfiguraci Liferay portálu je třeba provést nastavení dvou portálových proměnných. Obvykle se úpravy portálových proměnných provádí v souboru portal-ext.properties, ale pokud tento soubor z nějakého důvodu nechceme vytvářet, můžeme je napsat i přímo do portal-setup-wizard.properties, který je umístěn v adresáři, kam jsme instalovali Liferay.

Nastavíme následující proměnné:

web.server.http.port=80
web.server.https.port=443

Pokud bychom chtěli, aby Liferay generoval všechny URL adresy pro HTTPS, nastavili bychom ještě web.server.protocol=https. To ale pro nás v tomto případě nebylo žádoucí. V některých situacích bychom mohli dále nastavit web.server.host=preferovanyHost.cz, aby Liferay při generování URL odkazů používal hostname “preferovanyHost.cz”.

Po nastavení portálových proměnných zbývá už jen restartovat Liferay portál.

Závěr

Těch pár kroků uvedených výše stačí k tomu, že máme zabezpečný přístup k Liferay portálu přes HTTPS. Jednoduché, že?

Způsobů, jak zabezpečit Liferay portál i s uvedenými požadavky na přesměrování, je určitě mnoho, a pokud se o některé z nich chcete se mnou podělit, neváhejte se ozvat na info@bcvsolutions.eu!

Jak zprovoznit prostředí pro vývoj portletů a jak vytvořit portlet pro Liferay

V tomto článku najdete podrobný návod, jak si zprovoznit prostředí pro vývoj portletů s pomocí nástrojů společnosti Liferay, a jak vytvořit jednoduchý portlet. Celé zprovoznění nezabere více než jednu hodinu. Na konci budete mít k dispozici pískoviště pro zkoušení všech svých nápadů týkajících se (nejen) portletů a Liferay portálu.

Continue reading

Úvod do světa portletů

Nedávno jsem se věnovala vývoji dvou portletů do portálu, které slouží jako prostředník mezi uživateli portálu a Identity Managerem CzechIdM. Jedním z nich je portlet pro změnu hesla, který umožňuje uživatelům změnit si heslo přímo z portálu zákazníka, zatímco na pozadí probíhá bezpečná komunikace s Identity Managerem, který heslo propaguje do dalších informačních systémů.
V tomto článku si ukážeme, co to vlastně je portlet, a také se seznámíme se základy, jak portlet vypadá uvnitř.

Continue reading

Telefonní seznam jako portlet

Každá firma potřebuje, aby mezi sebou její zaměstnanci komunikovali. Čím více zaměstnanců, tím spíše budou používat telefon či e-mail. Ovšem čím více firemních telefonních čísel a e-mailů, tím obtížněji se udržuje jejich seznam aktuální, nemluvě o možnosti v něm snadno vyhledávat. Pro našeho zákazníka jsme proto nedávno vytvořili portletovou aplikaci, která tyto úkoly s pomocí našeho Identity Managementu CzechIdM usnadňuje.

Continue reading