04 ottobre 2010

Linux - JBoss - Configurazione JBoss con una Certification Authority

Nella precedente puntata abbiamo visto come generare in maniera semplice un certificato server per il nostro JBoss EAP.
Adesso complichiamoci un pò la vita cercando di capire come possiamo gestire una Certification Authority, crearci un certificato per il nostro server, creare certificati per i client in modo tale da poter verificare l'autenticità del browser che si collega al nostro portale e una Revocation List nel caso che qualche certificato non sia più autorizzato.

Iniziamo creandoci la nostra Certification Authority personale. Nel mio caso come utente "jboss" eseguo i seguenti comandi:

export SSLDIR=/home/jboss/personalCA
mkdir $SSLDIR
mkdir $SSLDIR/certs
mkdir $SSLDIR/crl
mkdir $SSLDIR/newcerts
mkdir $SSLDIR/private
touch $SSLDIR/index.txt
echo "0001" > $SSLDIR/serial
echo "0001" > $SSLDIR/crlnumber

cp /etc/pki/tls/openssl.cnf /home/jboss/personalCA

edito il file /home/jboss/personalCA/openssl.cnf andando a dichiarare che la directory contenente la mia Certification Authority è presente in  /home/jboss/personalCA .

Con il seguente comando creo la chiave privata (sarebbe bene questa non lasciarla sul filesystem, ma metterla su una chiavetta):

openssl genrsa -des3 -out ./personalCA/private/cakey.pem 2048

Con il seguente comando mi auto-segno il certificato della CA:

openssl req -new -x509 -key ./personalCA/private/cakey.pem -out ./personalCA/cacert.pem

Con il seguente comando mi genero una chiave. Occorre creare una chiave per ogni certificato emesso dalla CA:

openssl genrsa -des3 -out certificate-key.pem 1024

Con il seguente comando genero un chiave di richiesta (che potrei far firmare a qualche CA autorizzata):

openssl req -new -key certificate-key.pem -out certificate-req.pem

Con il seguente comando mi auto-segno il certificato:

openssl ca -config /home/jboss/personalCA/openssl.cnf -in certificate-req.pem -out certificate.pem -notext

Il certificato appena segnato viene trasformato in formato PKCS12 che sarà poi installabile in un browser come Internet Explorer o Firefox:

openssl pkcs12 -export -in certificate.pem -inkey certificate-key.pem -certfile ./personalCA/cacert.pem -out client.p12 -name "Certificato Client"

Creaiamo una Revocation List vuota che ha da 365 giorni:

openssl ca -config /home/jboss/personalCA/openssl.cnf -gencrl -crldays 365 -out ./personalCA/crlFile.pem

Verifichiamo che sia vuota:

openssl crl -in ./personalCA/crlFile.pem -text -noout

A questo punto abbiamo configurato la nostra Certification Authority, iniziamo a configurare il nostro JBoss. Avremo bisogno di 3 tipologie di certificati:
- Certificato per il server che chiameremo server.keystore
- Chiave della Certification Authority che abilita i certificati dei client che chiameremo server.truststore
- Revocation List per disabilitare i certificati dei client che chiameremo server.crlFile

Con il seguente tool generiamo il certificato per il server:

keytool -genkey -alias tomcat -keyalg RSA -keystore server.keystore -storepass "jboss123"

e lo copiamo nella opportuna directory:

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

Con il seguente comando importiamo la CA:


keytool -import -v -keystore server.truststore -storepass 123456 -file ./personalCA/cacert.pem

e la copiamo nell'opprtuna directory:

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


A questo punto ci copiamo la Revocation List creata precedentemente nella directory di JBOSS:

cp ./personalCA/crlFile.pem /home/jboss/EnterprisePlatform-5.0.1.CR2/jboss-as/server/all/conf/server.crlFile

Riconfiguriamo oppurtamento il file server.xml in /home/jboss/EnterprisePlatform-5.0.1.CR2/jboss-as/server/all/deploy/jbossweb.sar


<Connector port="8443" address="${jboss.bind.address}" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol = "TLS" keystoreFile="${jboss.server.home.dir}/conf/server.keystore" keystorePass="jboss123" keyAlias="tomcat" truststoreFile="${jboss.server.home.dir}/conf/server.truststore" truststorePass="123456" crlFile="${jboss.server.home.dir}/conf/server.crlFile"  />


A questo punto avremo:
- keystoreFile che è il file che contiene il certificato per il server
- truststoreFile che contiene il certificato della CA che permette a tutti i certificati client di connettersi con il server
- crlFile che contiene i certificati client revocati

Attivando JBoss con la configurazione precedente non sarà più possibile connettersi alle applicazioni finchè non verrà installato sul browser il certificato client.p12.

Con il seguente comando potremo revocare il certificato:

openssl ca -config /home/jboss/personalCA/openssl.cnf -revoke certificate.pem

e dopo aver aggiornato la revocation list con il comando:

cp ./personalCA/crlFile.pem /home/jboss/EnterprisePlatform-5.0.1.CR2/jboss-as/server/all/conf/server.crlFile

non sarà più possibile entrare nelle applicazioni JBoss.

1 commento:

Anonimo ha detto...

hi, new to the site, thanks.