(Italiano) Come abilitare HTTPS su Apache Karaf Pax Web

Come abilitare HTTPS su Apache Karaf Pax Web
Come abilitare HTTPS su Apache Karaf Pax Web

Sorry, this entry is only available in Italian. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Quante volte ci siamo trovati nella condizione di combattere con la configurazione del protocollo HTTPS? Sicuramente una miriade di volte e mai andata a buon fine a primo colpo.

In questo post vedremo come configurare il protocollo HTTPS per il container OSGi Apache Karaf. Il container Apache Karaf implementa le specifiche OSGi HTTP Service tramite il componente software Pax Web.

Pax Web estende OSGi HTTP Service con un supporto migliore per servlet, filtri, listener, pagine di errore e JSP al fine di soddisfare le più recenti versioni delle specifiche che sono alla base delle servlet. Pax Web supporta il protocollo SSL/TLS (HTTPS) grazie a Jetty che include appunto il supporto a questo protocollo di sicurezza.

La versione di Apache Karaf di riferimento è la 4.0.8 che utilizza la versione 4.3.0 di Pax Web che possiede le seguenti caratteristiche:

  • Servlet 3.1
  • JSP 2.3
  • JSF 2.2
  • Jetty 9.2.x
  • Tomcat 8.0.x (sperimentale)
  • supporto per CDI (tramite Pax-CDI)
  • supporto Servlet 3.1 con il Whiteboard extender
  • supporto delle Websockets JSR 356 (solo Jetty)
  • Web-Fragments

1. Installazione di Pax Web

Partendo dall’assunzione che abbiate un’istanza di Apache Karaf 4.0.8 installata e avviata, l’installazione di Pax Web avviene come feature Karaf eseguendo i seguenti comandi dalla console di Apache Karaf:

I comandi mostrati in precedenza eseguono l’installazione dell’implementazione di OSGi HTTP Service, dell’HTTP Whiteboard e del Web Container per il supporto completo delle specifiche JSP/Servlet.

Per verificare la corretta installazione delle feature, sempre dalla console di Apache Karaf eseguire i due comandi a seguire:

L’esecuzione di questi due comandi producono l’output mostrato a seguire con evidenza dello stato dei bundle che in questo caso sono correttamente in Started.

L’installazione di Pax Web crea il file di configurazione org.ops4j.pax.web.cfg (posizionato in ${karaf.home}/etc) su cui torneremo successivamente per aggiungere i parametri di configurazione necessari per attivare il protocollo HTTPS.

2. Generazione del keystore JKS

Per il prossimo step dobbiamo generare il “cassettino” dove andrà riposta la nostra coppia di chiavi o key pair (privata e pubblica), coppia che sarà poi utilizzata per instaurare le connessioni sicure via SSL/TLS. Tutto ciò che server per generare la coppia di chiavi è il keytool.

A seguire tutti i comandi necessari per produrre il keystore in formato JKS (Java KeyStore) che posizioneremo all’interno della directory ${karaf.home}/etc/keystore dove ${karaf.home} è la root directory d’installazione di Apache Karaf.

L’esecuzione del keytool genera il file dontesta-karaf-server.jks contenente la coppia di chiavi e che possiamo verificare attraverso l’esecuzione del comando a seguire:

Il risultato del comando precedente è mostrato subito sotto:

Se volessimo ottenere maggiori informazioni circa il certificato pubblico, è possibile farlo, sfruttando sempre il keytool, in questo modo:

il file dontesta-karaf-server.pub.pem contiene il certificato pubblico x509 in formato PEM (Privacy Enhanced Mail) estratto dal comando keytool --list .A seguire l’output del comando precedente:

L’utilizzo del keytool per alcuni potrebbe risultare ostico, esistono per i più pigri dei tool come per esempio KeyStore Explore che facilitano di gran lunga le operazioni di gestione (come per esempio l’importazione di certificati, l’esportazione in formati vari, etc.) dei JKS.

Nel nostro caso abbiamo generato un certificato self-signed ma nei casi reali la situazione è diversa, ovvero, sarà in genere una PKI a distribuire i certificati digitali in uno dei formati standard. Il certificato digitale ricevuto potrà poi essere importato sul proprio JKS per esempio.

A questo punto abbiamo ciò che serve per abilitare il protocollo HTTPS su Pax Web.

3. Abilitazione del protocollo HTTPS

L’abilitazione del protocollo HTTPS per Pax Web avviene attraverso la configurazione di una serie di properties che andranno inserite all’interno del file di configurazione org.ops4j.pax.web.cfg (situato in ${karaf.home}/etc). Le properties da configurare sono:

  • org.osgi.service.http.secure.enabled=true
  • org.ops4j.pax.web.ssl.keystore=${karaf.etc}/keystore/dontesta-karaf-server.jks
  • org.ops4j.pax.web.ssl.password=changeit
  • org.ops4j.pax.web.ssl.keypassword=changeit

Quelli indicati sopra sono i parametri minimi richiesti per configurare correttamente il supporto HTTPS, esisto altri parametri di configurazione ampiamente documentati su Pax Web nella sezione Configuration SSL.

Il file di configurazione completo per l’attivazione del protocollo HTTPS è mostrato a seguire:

Al momento del salvataggio del file di configurazione la modifica è applicata immediatamente.

Dai log risulta che la configurazione è stata applicata correttamente e Pax Web è nelle condizioni di fornire risorse tramite il protocollo HTTPS ma non è ancora attivo, infatti, nessun servizio HTTPS è in listen sulla porta 8443 (porta di default). Al deploy della prima applicazione web, il servizio HTTPS sarà effettivamente listen sulla porta 8443.

4. Test tramite Web Application

Al fine di fare un test, possiamo installare sulla nostra istanza di Apache Karaf la Web Console tramite il comando feature:install webconsole che una volta terminato attiva la web console e con essa anche il protocollo HTTPS, così come mostrato sul file di log.

A questo punto puntiamo il nostro browser all’indirizzo https://localhost:8443 e se tutto è andato per il verso giusto dovremmo vedere instaurata la connessione HTTPS e riuscire a vedere anche il certificato (così come mostrato in Figura 1).

Visualizzazione del certificato SSL al momento della connessione a Apache Karaf Web Console

Figura 1 – Visualizzazione del certificato SSL al momento della connessione

Si può fare altro?

Certamente 🙂 Una tipica connessione TLS/SSL (per esempio via browser internet) prevede un tipo di autenticazione denominata unilaterale : solo il server è autenticato (il client conosce l’identità del server), ma non vice-versa (il client rimane anonimo e non autenticato). Il client (browser web, EmailUI, Java Client, etc…) valida il certificato del server controllando la firma digitale dei certificati del server, verificando che questa sia valida e riconosciuta da una Certificate Authority conosciuta utilizzando una cifratura a chiave pubblica. Questo è il caso che abbiamo mostrato nel corso di quest’articolo.

Il prossimo passo quale potrebbe essere? Come configurare e realizzare una connessione in HTTPS tra un browser e il nostro server Apache Karaf, con mutua autenticazione, e quindi anche con l’autenticazione del client presso il server, attraverso l’utilizzo di un certificato X509 appositamente generato.

Antonio Musarra

I began my journey into the world of computing from an Olivetti M24 PC (http://it.wikipedia.org/wiki/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until … Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.

You may also like...