(Italiano) Come richiedere e installare un certificato SSL su Apache Karaf

Come Richiedere e Installare un Certificato SSL su Apache Karaf
Come Richiedere e Installare un Certificato SSL su Apache Karaf

Sorry, this entry is only available in Italiano.

Su questo blog, qualche giorno addietro, abbiamo affrontato la problematica su Come abilitare HTTPS su Apache Karaf Pax Web.  Prima di abilitare il protocollo HTTPS, se ben ricordate, ci siamo preoccupati di come poter generare un self-signed certificate (o auto-firmato) per il nostro server Apache Karaf utilizzando il tool keytool.

Ricordiamo che il nostro certificato SSL è di tipo server, ovvero, solo il server è autenticato: l'utente può verificare l'autenticità del server a cui ci si connette e l'identità dell'organizzazione che lo gestisce.

Riuscire a installare sul nostro server Apache Karaf (configurato come descritto in Come abilitare HTTPS su Apache Karaf Pax Web) un certificato ricevuto da una Certificate Authority o Certification Authority (CA) è l'obiettivo ultimo di questo articolo.

Il linea generale i passi necessari per ottenere un certificato SSL da una CA è molto semplice e consta di queste azioni:

  1. Creare un coppia di chiavi pubblica e privata (o keypair).

  2. Creare una richiesta per un certificato basato su chiave pubblica CSR (Certificate Signing Request). La richiesta del certificato contiene informazioni riguardo il server e la società che lo ospita.

  3. Inviare la richiesta, con una fotocopia di un documento di identità, a una CA. Non è possibile consigliare quale autorità di certificazione scegliere. La decisione potrebbe essere basata su esperienze passate, esperienze di amici o colleghi o per un fattore economico.Una volta scelta la CA, è necessario seguire le istruzioni fornite dalla CA per ottenere il certificato.

  4. Una volta che la CA ha verificato l'identità del richiedente, invierà il certificato digitale (nei più comuni formati, quali: PEM, DERPKCS#12) pronto per essere utilizzato da una o più applicazioni.

  5. Installare il certificato ricevuto sul proprio server e configurare le applicazioni appropriate affinché usino correttamente il certificato.

Il terzo e quarto punto possono variare sulla base della CA da voi scelta. Potrebbe per esempio cambiare il metodo d'identificazione del richiedente o il formato e modalità di ricezione del certificato richiesto.

La CA che ho deciso d'utilizzare per richiedere il certificato SSL si chiama Let's Encrypt Authority X3. E' una CA gratuita, con processi di gestione automatici e open che tra le altre cose supporta il protocollo (ancora in stato draft) Automatic Certificate Management Environment (ACME)Per avviare il processo di richiesta del certificato ho utilizzato in particolare ZeroSSL (fully in-browser process, inclusa la creazione del CSR).

Per affrontare la parte pratica dell'articolo, è necessario che sulle proprie macchine siano installati il keytool OpenSSL. Il primo tool fa parte della JDK, mentre il secondo tool può essere installato su qualunque sistema operativo della famiglia Microsoft, Apple e Nix*.

Preparare la richiesta del certificato

Così come previsto dal processo di richiesta del certificato SSL indicato in precedenza, procediamo con l'esecuzione del primo e secondo punto, così come mostrato a seguire.

$ openssl genrsa -out api.dontesta.it.key.pem 2048
$ openssl req -new -sha256 \
 -key api.dontesta.it.key.pem \
 -out api.dontesta.it.csr.pem

Il primo comando crea la coppia di chiavi di tipo RSA con una lunghezza pari a 2048 bit che viene salvata all'interno del file api.dontesta.it.key.pem e il cui contenuto è mostrato subito sotto. La coppia di chiavi appena generata deve essere conservata in un luogo sicuro.

-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAyvWJyiCnPUtBRuHyPHbF97afd2iVVjt3JXoK1h2KJ+g4IXdW
KFTT3mRF+ZYtXdvmMQkDD35T4Yj/JvxAK8nelJ6jWVTbGExl64gtjDrAm2OIx6+t
C9UhNt60cxAcVGjYVLLPByuBafnUb1zy/ngXnGzF/CaFwYIPBUDnMw/HQft0hCBc
YmIVZtgd1VnmR2X+6YcTdJNBi7/8ncsEkQsrM2mcA6Rj992voscyMgllP0+5bMOR
pFvbHtlbJzv8RYaNOMe+vpgkOPrfdABAnFlxMH/+JmGxHGv9WKQmPZEeDzkrAVgE
NApT7TrU4RmhxGxsVhaK/XD0BHUWkSLbQeV7MQIDAQABAoIBAQC/3PJPNCMlHHkv
CvW2Fwn6rJd/iEx0Ym617PNFilNKeopliKzYH6jSObS0xzVH31Ny03QjN2cQdDPQ
pPH88y8JDBabok4kYESRLgDw6bGes69gJkDOSMLHXiz0ASzm1t564zY3Lvd+OYCL
bjEAQoL/iwx22+viDJMqgjqN2MKjKeQYrALPzDEIlY/WNjO/I8Ha0mqirBkJC9vE
aR+AqiST9x2xgJNU5eF1sAXnH0p6V3GdGzZNUB0k9Rq8JkQUDpZcGoSVy2aioCff
MUjt6LsqZ9QemHEzpSWl3CBI3+cAwTZ1aQrdRuXYj636Y4BB8kXyvPsERiO6OMwk
Cxo56/npAoGBAPpDOEea78VmiLAsvwNkiwqAhjCWnH9H/LVDOiJ//+TEnZpbQ3Wj
9+IAxsXfZYTtEvIakLftnRNr81nxAIXJt9X1Ga/+xJwbwGfQ0EjoyZLSWb8zYcYB
8aRWasBgP99Mdm6z33q6GvrubKF985lggygkH9svayOV+tGFkn0tlw1rAoGBAM+c
slECZBHiYhZQtPXBi1uveJyiJyN/GrPJhHIhAPCTW+VTVKe6l4G8eVi3JPTVoVRK
GsVhus+17i3mQWl/zfqINhVcAM0ag7PcgMhb8kYz4/TkWmugunS7HJrXlumvujOv
Q10yB3dX/ILUqu9V5JbblRiKPkZxWfSIKpWkv0TTAoGBAPY91c5+4JU2wh+2p2vL
LhPzShXc27dROZGQyE7R6xNJcllCmynRYEH7yZlAqj8UlaOqB+Mx5XAKs7M3su/w
/vWC6PeGkiWYGMUNbSOQCWZxmuTKxdVybDTq4rbO/YnVTmK2kZnMLGfi2Pg9Wcb8
c5C3mrCsA5tMIzKtXunUReBpAoGBAJorl7NWni81uHcvyaGx7yXPwTY3p+7RJWgb
HnKOFZ+RHi3G2tePVZDvAAGkRxpVRe9M9GJc95flVxDYqvyH/tKrsdXcs2+b3++B
sFSZCumdAQvLQ2YnPi8O/+fwbs3sQ867uL+NNkQmn4ocGS+PzidEuow1pJc094MC
VvU3GR4nAoGAQSvMXGAH1Hmh1hSTsrHuh8iSa2QChJHg24G/EBiMM5ttbQTAHg39
+xu11XmqYyk5blYypVAgDVZpmbYpvbm17pjJIG1kCjVHjSOoIbrCX/NMEgGnpk3e
k6r2TFnNkZ05Ky142rWr0hjQcgoI2/+09S2+Nt3gkMpIcyfTNheBqzU=
-----END RSA PRIVATE KEY-----

Il secondo comando crea invece la CSR partendo dalla coppia di chiavi e che contiene in forma codificata una raccolta d'informazioni, che poi, inviate alla CA, saranno utilizzate per generare il nostro certificato SSL. L'esecuzione di questo comando è interattivo, ovvero, saranno richieste le seguenti informazioni:

  1. Common Name: Il nome di dominio completo (FQDN) del server. Questo deve corrispondere esattamente con ciò che si digita nel browser web o si riceverà un errore di mancata corrispondenza del nome.
  2. Organization: Il nome legale della vostra organizzazione. Questo non deve essere abbreviato e dovrebbe includere suffissi, come Inc, Corp, o LLC, S.p.A, S.r.l, etc.
  3. Organizational Unit: La divisione che si occuperà della gestione del certificato all'interno della vostra organizzazione.
  4. City/Locality: La città dove l'organizzazione risiede.
  5. State/County/Region: Lo stato o regione dove l'organizzazione risiede. Dovrebbe essere indicata per esteso e non in forma abbreviata.
  6. Country: Il country code in formato ISO.
  7. Email address: Un indirizzo email valido per contattare la vostra organizzazione.

La CSR creata per quest'esempio contiene le queste informazioni: CN=api.dontesta.it, OU=R&D Labs, O=Antonio Musarra's Blog, C=IT, L=Rome, S=Italy. Il file api.dontesta.it.csr.pem che contiene il CSR è mostrato a seguire.

-----BEGIN CERTIFICATE REQUEST-----
MIIC6jCCAdICAQAwgaQxCzAJBgNVBAYTAklUMQ4wDAYDVQQIEwVJdGFseTENMAsG
A1UEBxMEUm9tZTEfMB0GA1UEChMWQW50b25pbyBNdXNhcnJhJ3MgQmxvZzERMA8G
A1UECxQIUiZEIExhYnMxGDAWBgNVBAMTD2FwaS5kb250ZXN0YS5pdDEoMCYGCSqG
SIb3DQEJARYZYW50b25pby5tdXNhcnJhQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAMr1icogpz1LQUbh8jx2xfe2n3dolVY7dyV6CtYd
iifoOCF3VihU095kRfmWLV3b5jEJAw9+U+GI/yb8QCvJ3pSeo1lU2xhMZeuILYw6
wJtjiMevrQvVITbetHMQHFRo2FSyzwcrgWn51G9c8v54F5xsxfwmhcGCDwVA5zMP
x0H7dIQgXGJiFWbYHdVZ5kdl/umHE3STQYu//J3LBJELKzNpnAOkY/fdr6LHMjIJ
ZT9PuWzDkaRb2x7ZWyc7/EWGjTjHvr6YJDj633QAQJxZcTB//iZhsRxr/VikJj2R
Hg85KwFYBDQKU+061OEZocRsbFYWiv1w9AR1FpEi20HlezECAwEAAaAAMA0GCSqG
SIb3DQEBCwUAA4IBAQCnsCJDEHlQiKxmkfIDVSPgW5nTFZnkQEkZTzpLHXSqKHOZ
P3E/wCGvjRx2s723Jv7L+Qhu896nb6QjVG8H2zaiWBE4vWByhfeTR7OQaIXZg86m
E4uzbsXXJCmnmJ3Ho1oL+u597mKIULzKdnZwGkjxey9K/iwsbSGaQGt1SipAoELL
K28yyO4FyzBm3B95GO/VXyhNS/yUaDzAPtQCZn7clzAkyBYp5KEjpofpsZJJqSIH
xsE/RG41EZCW41NyTsYSF4BmMTnPR9n5uA7tjHhdEwsSSORhNTABECRbJ9wdOlF8
gE4tr0cPx57P0UTntFu46evk+uFwwlZoUVHcJxxP
-----END CERTIFICATE REQUEST-----

Una volta generato il CSR di richiesta non resta altro che inviarlo alla CA insieme ad altra eventuale documentazione e restare in attesa del certificato SSL firmato.

Preparare il JKS dal certificato ricevuto dalla CA

Supponiamo di aver ricevuto il nostro certificato in formato PEM x509 (o OpenSSL) dalla CA prescelta. Con il certificato ricevuto, cosa ci facciamo? Dobbiamo creare il keystore in formato JKS partendo dal certificato ricevuto dalla CA e dalla coppia di chiavi, quest'ultima creata nel primo passo del processo di richiesta illustrato precedentemente. Nel Listato 3 è mostrato il contenuto del certificato rilasciato dalla CA e codificato in base64.

-----BEGIN CERTIFICATE-----
MIIFAjCCA+qgAwIBAgISA9xSrx/nXMFtdds4ePY3qhj9MA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNzAzMDQxNTAyMDBaFw0x
NzA2MDIxNTAyMDBaMBoxGDAWBgNVBAMTD2FwaS5kb250ZXN0YS5pdDCCASIwDQYJ
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMr1icogpz1LQUbh8jx2xfe2n3dolVY7
dyV6CtYdiifoOCF3VihU095kRfmWLV3b5jEJAw9+U+GI/yb8QCvJ3pSeo1lU2xhM
ZeuILYw6wJtjiMevrQvVITbetHMQHFRo2FSyzwcrgWn51G9c8v54F5xsxfwmhcGC
DwVA5zMPx0H7dIQgXGJiFWbYHdVZ5kdl/umHE3STQYu//J3LBJELKzNpnAOkY/fd
r6LHMjIJZT9PuWzDkaRb2x7ZWyc7/EWGjTjHvr6YJDj633QAQJxZcTB//iZhsRxr
/VikJj2RHg85KwFYBDQKU+061OEZocRsbFYWiv1w9AR1FpEi20HlezECAwEAAaOC
AhAwggIMMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB
BQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUl8p8MC7xJvIkB8jxEhowTilB
sekwHwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwcAYIKwYBBQUHAQEE
ZDBiMC8GCCsGAQUFBzABhiNodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5cHQu
b3JnLzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNyeXB0
Lm9yZy8wGgYDVR0RBBMwEYIPYXBpLmRvbnRlc3RhLml0MIH+BgNVHSAEgfYwgfMw
CAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDov
L2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0
aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRp
ZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQ
b2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9y
eS8wDQYJKoZIhvcNAQELBQADggEBADNEpZ+ygBEZNaAM/gkNUeJWXFj8u91YupQN
4lSwg3mJxeHMn4fCxqW1hhpDb34K1t2YxnkYcOhhKGwLPBpRTUV25O0TNuIxQXEE
OYYSa5izrt0kpatrtbwq64O7lAGvXdPBchK7hP/Y29oEjuyQoJy7KOX6YlSufR5r
RG6v2EECwjzm1OuFxafTZ9OT1xr2cXXfFDsL7Dw8GBCwv+x3NRACd84jNfy1fjNp
LhFKUUljvNDTUAliU6VT5B83yCBV5F2cQpd4JF7zTA/Z5abhNo6fKMJksCAMeDhm
dY9su78cb9td0TGXXGMhWJSX1THewWVBZyFiVYYr+jkgKD4SP4Q=
-----END CERTIFICATE-----

Il formato PKCS#12 Definisce il formato del file usato per conservare la chiave privata e i certificati pubblici, proteggendoli con una parola chiave. (Questo file non può essere usato direttamente da Apache)

Per creare il JKS utilizzando il certificato pubblico (quello ricevuto dalla CA) e la chiave privata, i passi da seguire sono i seguenti:

  1. Creare un archivio crittografico in formato PKCS#12 utilizzando i comandi OpenSSL.
  2. Creare il keystore JKS dall'archivio PKCS#12 utilizzando il keytool.

La Console 2 mostra i comandi da eseguire per portare a termine le azioni indicate sopra.

$ openssl pkcs12 -export -out api.dontesta.it.pfx \
 -inkey api.dontesta.it.key.pem \
 -in api.dontesta.it.cer.pem \
 -certfile ca.cer.pem

$ keytool -importkeystore -srckeystore api.dontesta.it.pfx \
 -srcstoretype pkcs12 \
 -destkeystore dontesta-karaf-server.jks \
 -server -deststoretype jks \
 -deststorepass changeit

Così facendo abbiamo ottenuto il keystore dontesta-karaf-server.jks pronto per essere installato sulla nostra istanza di Apache Karaf. Utilizzando il tool KeyStore Explorer è possibile in maniera più agevole creare il keystore partendo dal formato OpenSSL o PKCS#12 e altri formati supportati.

Installazione del keystore e test

Sulla nostra istanza di Apache Karaf (già configurata per il supporto SSL) installiamo il keystore dontesta-karaf-server.jks in ${karaf.etc}/keystore/. La configurazione per il supporto SSL che riporto a seguire rimane invariata.

javax.servlet.context.tempdir = /Users/amusarra/Progetti/Karaf/runtime/apache-karaf-4.0.8/data/pax-web-jsp
org.ops4j.pax.web.config.file = /Users/amusarra/Progetti/Karaf/runtime/apache-karaf-4.0.8/etc/jetty.xml
org.osgi.service.http.port = 8181
 
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

Avviamo il nostro Apache Karaf e successivamente puntiamo il browser all'indirizzo https://api.dontesta.it:8443/system/console/bundles o se preferite utilizziamo cURL in questo modo: curl -v https://api.dontesta.it:8443/system/console.

In Figura 1 è mostrato il dettaglio del certificato che abbiamo appena installato su Apache Karaf, e subito a seguire l'output del comando curl. Dall'immagine è possibile notare due informazioni importanti, la catena di certificazione (o certificate chain) e il nome della CA che ha emesso il nostro certificato, oltre ad avere il "bollino verde".

Dettaglio del certificato Server SSL visto dal browser

Figura 1 - Dettaglio del certificato Server SSL visto dal browser

Dall'output ricevuto dall'esecuzione del comando curl, ho evidenziato le righe che mostrano tutta la catena di certificazione (o certificate chain). Per coloro che sono più avvezzi all'utilizzo di cURL, ho evitato di specificare il parametro -k, utilizzato quando il server a cui vogliamo connetterci non dispone di un certificato SSL affidabile.

*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to api.dontesta.it (127.0.0.1) port 8443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: api.dontesta.it
* Server certificate: Let's Encrypt Authority X3
* Server certificate: DST Root CA X3
> GET /system/console HTTP/1.1
> Host: api.dontesta.it:8443
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Date: Mon, 06 Mar 2017 23:01:25 GMT
< WWW-Authenticate: Basic realm="karaf"
< Content-Length: 0
< Server: Jetty(9.2.19.v20160908)
<
* Curl_http_done: called premature == 0
* Connection #0 to host api.dontesta.it left intact

A questo punto possiamo affermare che l'installazione su Apache Karaf del nostro certificato SSL rilasciato da una CA riconosciuta è andata a buon fine.

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5.00 out of 5)
Loading...

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...