10 settembre 2010

Linux - JBoss - Configurazione SSL e gestione Certification Authority

Questa guida vuole far chiarezza su come si devono creare dei certificati SSL da utilizzare con la JBoss Enterprise Application Platform (EAP) di Red Hat.

La versione di JBoss di Red Hat si discosta per certi versi dalla versione Comunity. La versione da me utilizzata per questo tutorial è la 5.0.1-CR2 su Red Hat Enterprise Linux 5.5 con la SUN JDK 6 update 21 il tutto a 32 bit.

Facciamo i seguenti assunti:
  • JBoss è installato con l'utente "jboss" nella directory /home/jboss/EnterprisePlatform-5.0.1.CR2/jboss-as
  • la SUN JDK è installata in /usr/java/jdk1.6.0_21
  • per questi test utilizziamo il profilo "all" di JBoss


Per abilitare il supporto SSL in JBoss EAP ci sono due strade che si discostano sostanzialmente dall'utilizzo che si deve fare dei certificati:
  1. Strada semplice: certificato autofirmato necessario semplicemente per il server
  2. Strada complicata: gestione di una Certification Authority, con certificato per il server, certificati per i client e Revocation List

Iniziamo con la strada semplice. Per fare in modo che il nostro Application Server possa creare delle connessioni crittografate con un certificato autofirmato possiamo utilizzare l'utility "keytool" presente nella jdk di SUN.

Con questo comando generiamo una chiave per il server con l'algoritmo RSA denominata "tomcat", la salviamo nel file secure.keystore con la password "jboss123":

keytool -genkey -alias tomcat -keyalg RSA -keystore /home/jboss/EnterprisePlatform-5.0.1.CR2/jboss-as/server/all/conf/secure.keystore -storepass "jboss123"

Dopo aver risposto alle domande verrà generata la chiave che potremmo vedere con il comando:

keytool -list -keystore /home/jboss/EnterprisePlatform-5.0.1.CR2/jboss-as/server/all/conf/secure.keystore
Enter keystore password: 

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entries

tomcat, Sep 7, 2010, PrivateKeyEntry,
Certificate fingerprint (MD5): 1B:AF:B5:A8:A3:6E:84:96:0F:43:8A:AC:1F:5D:99:32


Adesso configuriamo il tomcat embedded in JBoss per accettare connessioni SSL sulla porta 8443. Nel mio caso nella directory /home/jboss/EnterprisePlatform-5.0.1.CR2/jboss-as/server/all/deploy/jbossweb.sar editeremo il file server.xml:

     <!-- SSL/TLS Connector configuration using the admin devl guide keystore -->
      <Connector protocol="HTTP/1.1" SSLEnabled="true"
           port="8443" address="${jboss.bind.address}"
           scheme="https" secure="true" clientAuth="false"
           keystoreFile="${jboss.server.home.dir}/conf/secure.keystore"
           keystorePass="jboss123" keyAlias="tomcat" sslProtocol = "TLS" />



Con la versione JDK 6, il programma keytool è in grado di gestire anche keystore in formato PKCS12, quindi se abbiamo un certificato in questo formato nel nostro caso mycert.p12 lo possiamo andare a gestire anche con il keytool:

keytool -list -keystore mycert.p12 -storetype pkcs12
Enter keystore password: 

Keystore type: PKCS12
Keystore provider: SunJSSE

Your keystore contains 1 entry

tomcat, Sep 7, 2010, PrivateKeyEntry,
Certificate fingerprint (MD5): 73:21:5D:3E:B9:5D:B1:98:C7:C3:5F:C3:49:83:BF:33

copiandolo nella directory del nostro profilo con il comando:

cp mycert.p12 /home/jboss/EnterprisePlatform-5.0.1.CR2/jboss-as/server/all/conf/

e poi modificando il server.xml in /home/jboss/EnterprisePlatform-5.0.1.CR2/jboss-as/server/all/deploy/jbossweb.sar:


     <!-- SSL/TLS Connector configuration using the admin devl guide keystore -->
      <Connector protocol="HTTP/1.1" SSLEnabled="true"
           port="8443" address="${jboss.bind.address}"
           scheme="https" secure="true" clientAuth="false"
           keystoreFile="${jboss.server.home.dir}/conf/mycert.p12"
           keystorePass="jboss123" keyAlias="tomcat" sslProtocol = "TLS" keystoreType="PKCS12" />


potremo far gestire a JBoss EAP anche direttamente certificati PKCS12.



Nella prossima puntata vedremo la soluzione più complicata.