Mnoho z nás – vývojářů JEE aplikací – se občas dostane do situace, kdy je nutné váš produkt vystavit bez asistence zkušených „ajťáků“. Pokud jste na tom podobně jako já, a to tak, že znáte povrchově konfiguraci Tomcatu a o serveru Apache víte na co slouží, tak určitě při konfiguraci procházíte spoustu návodů a konfigurací. Proto vznikl tento zápisek. Pomůže vám nakonfigurovat aplikaci s vynucením šifrovaného spojení.

Vycházíme ze stavu, že máme na stroji nainstalované oba zmíněné nástroje (Apache + Tomcat).

Pro zabezpečené připojení samozřejmě potřebujeme veřejný klíč a certifikát. Pokud je již nevlastníme, lze jednoduše vygenerovat:

Nejprve vygenerujeme klíč:


openssl genrsa -des3 -out server.key 4096

Budeme vyzváni k zadání hesla klíče – toto heslo budeme muset používat ve všech následujících krocích

Vygenerujeme soubor s certifikátem:


openssl req -new -key server.key -out server.csr

Dále vytvoříme certifikát pouze pro Apache (je důležité si rozmyslet platnost certifikátu):


openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

A nakonec upravíme klíč, aby nebyl zabezpečen heslem – tento budeme muset předat serveru Apache:


openssl rsa -in server.key -out server.key.insecure

Pro správné nastavení serveru Apache upravíme soubor $APACHE_HOME/conf/httpd.conf. A to tak, že povolíme (odkomentováním v kódu) následující moduly:


LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule ssl_module modules/mod_ssl.so

Dále odkomentujeme vložení SSL konfigurace:


Include conf/extra/httpd-ssl.conf

Vložíme VirtualHost, který bude všechny spojení přes HTTP automaticky směrovat na HTTPS:


<virtualhost *:80>
#   General setup for the virtual host
DocumentRoot "/cesta/k/apache/htdocs"
#ServerAdmin admin@WIN-CAIHO5LZDR6.
#ErrorLog "/cesta/k/apache/logs/error.log"
#TransferLog "/cesta/k/apache/logs/access.log"
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</virtualhost>

Nastavení SSL Apache se provede úpravou souboru $APACHE_HOME/conf/extra/httpd-ssl.conf. Upravíme přednastavený VirtualHost aby měl následující údaje:


<virtualhost *:443>
#   General setup for the virtual host
DocumentRoot "/cesta/k/apache/htdocs"
ErrorLog "/cesta/k/apache/logs/error.log"
TransferLog "/cesta/k/apache/logs/access.log"
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/cesta/k/apache/conf/server.crt"
SSLCertificateKeyFile "/cesta/k/apache/conf/server.key"
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog "/cesta/k/apache/logs/ssl_request.log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
ProxyRequests Off
ProxyPreserveHost On
<proxy *>
Order deny,allow
Allow from all
</proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</virtualhost>

Dalším krokem je nastavení Tomcatu. Vytvoříme příslušné hosty, které chceme používat. Vše se provede editaci souboru $TOMCAT_HOME/conf/server.xml. Nejprve odstraníme přednastavený host (localhost) a přidáme vlastní. Např.:


<!-- test.morosystems.cz -->
<host name="test.morosystems.cz" debug="0" appBase=""
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" deployXML="true">
<context path="/" docBase="webapps/examples" />
<logger className="org.apache.catalina.logger.FileLogger"
directory="logs"  prefix="test.morosystems_log." suffix=".txt" ti
mestamp="true"/>
</host>

A změníme defaultní host úpravou řádku s tagem Engine:


<engine name="Catalina" defaultHost="test.morosystems.cz">

Nyní budeme mít jeden host, na který bude směrována veškerá komunikace a bude spouštět deploynutou aplikaci examples. Přidáním dalších hostů můžeme dodat více aplikací.