Sommario
PKIX: una precisazione
Voglio avvisarvi subito che non esiste in sé un “errore PKIX”. È soltanto un modo breve di descrivere una situazione in cui c’è un problema del client Grails (o a qualunque altro client) ad accedere ad un URL protetto da SSL.
Se vi capita di vedere questa sigla PKIX in un messaggio errore di Grails, si fa riferimento alla Public Key Infrastructure X.509, uno standard usato per definire il formato dei certificati a chiave pubblica (PKC) e delle autorità di certificazione (CA).
Significa che è sorto qualche problema nello stabilire la connessione cifrata SSL con lo storage da cui il client scarica il template dell’applicazione.
Mi è capitato in più di un contesto questo problema (ad esempio nella configurazione di un reverse proxy Apache), però il significato di un simile tipo di sintomatologia risulta abbastanza chiaro nello specifico esempio che vi propongo.
Qual è il problema per cui compare questa misteriosa sigla PKIX?
Questo problema sorge appena si avvia il client Grails:
$ grails
compare infatti il seguente messaggio di errore:
“PKIX path building failed” and “unable to find valid certification path to requested target”
Ciò che succede è che insorge un problema di sicurezza perché non ho tra i certificati SSL installati nella JVM quello di grails.org da cui il client cerca di scaricare il boilerplate dell’applicazione. Da qui l’errore PKIX.
Una soluzione
La soluzione consiste nello scaricare e installare manualmente il certificato dal sito con Chrome o Firefox, e importarlo nel keystore della JVM.
I passaggi sono un po’ diversi a seconda del browser che state usando per accedere all’applicazione Laravel, per cui per vostra comodità vi illustro i passaggi con entrambi i browser. Per i possessori di Mac: mi dispiace. Per gli appassionati di Edge / Microsoft Internet Explorer: mi dispiace.
Passaggio 1
Scaricare il certificato: puntare il browser all’URL
https://repo.grails.org/grails/core
Una volta stabilita la connessione e visualizzato il sito, cliccare sul lucchetto a sinistra nella barra degli indirizzi; cliccare quindi su “Certificato”, su “Dettagli”, su “Esporta” e fare il download in una cartella che conosciamo, ad esempio Downloads. Questo per Chrome.
Nota bene: questa è un’operazione che potete fare con qualunque sito in https
, potete così informarvi sull’autorità emittente, sul proprietario del sito, sull’attendibilità e la validità del certificato di chiave pubblica.
Per Firefox: cliccare sul lucchetto, quindi su “Connessione Sicura >”, su “Ulteriori informazioni”, su “Visualizza certificato”; quindi sulla tab repo.grails.org cliccare sul link “PEM (certficato) e selezionare l’opzione “Salva con nome”. Un po’ più laborioso.
Passaggio 2
Importare il certificato appena scaricato nella keystore della JVM: individuare dunque la directory della JVM, nel mio caso:
/usr/lib/java/jdk1.8.0_25/jre/lib/security
Il file dei certificati è cacerts
Lanciare l’importazione
$ sudo keytool -import -alias example -keystore /usr/lib/java/jdk1.8.0_25/jre/lib/security/cacerts -file /home/marcob/Downloads/repo.grails.org
Keytools richiede la password del keystore che al primo utilizzo è changeit
[sudo] password di marcob: Immettere la password del keystore: Proprietario: CN=repo.grails.org Emittente: CN=Sectigo RSA Domain Validation Secure Server CA, O=Sectigo Limited, L=Salford, ST=Greater Manchester, C=GB Numero di serie: 2560fb52bfdc8f6bb2b3366805e3c911 Valido da: Fri Nov 13 01:00:00 CET 2020 a: Wed Dec 15 00:59:59 CET 2021 Impronte digitali certificato: SHA1: D6:24:89:09:18:F1:39:E8:D6:6F:DF:EA:88:68:5C:BD:DB:2C:DF:F3 SHA256: 65:39:9F:7D:C3:09:D5:58:ED:E3:C3:82:59:98:BA:22:E2:8F:2D:65:6D:1E:F6:C3:51:55:9B:4F:14:9C:ED:A4 Nome algoritmo firma: SHA256withRSA Algoritmo di chiave pubblica oggetto: Chiave RSA a 2048 bit Versione: 3 ... Considerare sicuro questo certificato? [no]: si Il certificato è stato aggiunto al keystore
Una volta completato l’nserimento del certificato nel portachiavi si può avviare Grails dalla cartella del progetto:
$ grails create-app com.djamware.gadgethouse
| Application created at /home/marcob/IdeaProjects/java/gadgethouse
| Resolving Dependencies. Please wait…
| Starting interactive mode…
| Enter a command name to run. Use TAB for completion:
grails> run-app
| Running application…
...
Grails application running at http://localhost:8080 in environment: development
Fine.
PS: ho preso l’esempio da questo sito qui
Commenti recenti