Abbiamo sulla nostra lan un web service scritto in Java (che gira su Tomcat) che non può essere cifrato in https direttamente da TOMCAT per vari motivi.
Quindi, fino a che detto web service lo si deve usare in una lan sicura, non ci sono problemi.
Il problema esce al momento in cui lo si deve esporre su internet e la connessione deve essere cifrata per riservatezza.
La cosa più semplice da fare è esporre su internet qualche cosa di cifrabile e poi forwardare le richieste al sito in questione.
A causa di alcune applet java che non si fanno imbrogliare il Mod_proxy di Apache non funziona, quindi, su suggerimento dell’assistenza del web service di cui sopra ho usato Mod_jk che invece riesce ad “incapsulare” con successo le malefiche applet (grazie Emiliano).
I passi sono pochi e veloci:
Si deve installare per prima cosa una Debian stabile evitando il per noi inutile “Ambiente Desktop” e lasciando “Sistema standard”, questo perchè la web application gira su Windows ed installare Apache e le sue mod su windows 2003 e poi esporlo non mi sembrava il caso.
ATTENZIONE: è fondamentale che durante il setup, quando vengono chiesti il nome ed il domino della macchina, si indichi quello che poi sara’ pubblicato su internet.
Per esempio se il sito sarà esposto come https://mioserver.miosito.it si deve impostare come nome “mioserver” e come domino “miosito.it”
Questo perchè quando verrà generato il certificato necessario alla cifratura, dentro ci sarà è scritto il nome della macchina e se questo non corrisponde al sito si avranno una marea di fastidiose warning.
Diamo per scontato che sia configurata correttamente la rete, gli indirizzi, Debian sia aggiornata con un dist-upgrade etc etc.
Per prima cosa si devono installare ssh e apache con:
apt-get install apache2 ssh
Successivamente si deve abilitare il mod_ssl (che arriva di serie con apache) con
a2enmod ssl
Quindi si generi il certificato per il sito in ssl
openssl req $@ -new -x509 -days 3650 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem
il 3650 indica che il certificato sarà valido 10 anni (impostatelo a quanto credete giusto), durante il setup vengono poste delle domande puramente descrittive sul dove e sul come.
Successivamente si deve installare il mod_jk
apt-get install libapache2-mod-jk
Quindi si deve creare il file di configurazione in
/etc/apache2/mods-enabled/jk.conf
che deve contenere
# The location where mod_jk will find the workers definitions
JkWorkersFile /etc/apache2/workers.properties
e si crei il file sopra indicato di conseguenza
/etc/apache2/workers.properties
contenente:
#
# Define 1 real worker using ajp13
worker.list=worker1
#
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=10.239.1.184 <- ip del server nella lan/dmz, se installato nello stesso pc si può mettere localhost
worker.worker1.port=8009
Si elimini il sito in chiaro dai sites-enabled si aggiunga quello over ssl
cd /etc/apache2/sites-enabled
rm 000-default
ln -s /etc/apache2/sites-available/default-ssl 000-default-ssl
si aggiunge in 000-defaults-ssl la riga indicata dalla freccia
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
JkMount /* worker1 <---------- QUESTA
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
poi si attiva la porta 443 e si tolga la 80 dal file /etc/apache2/ports.conf facendolo diventare pressapoco cosi:
NameVirtualHost *:443
##Listen 80
<IfModule mod_ssl.c>
# SSL name based virtual hosts are not yet supported, therefore no
# NameVirtualHost statement here
Listen 443
</IfModule>
quindi si riavvia apache con il solito
/etc/init.d/apache2 restart
ed è finito.
Buon reversproxing sicuro