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 / https://localhost:8080/ ProxyPassReverse / https://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í.
Napsat komentář