link-it / govway

API Gateway per la Pubblica Amministrazione italiana
https://govway.org
GNU General Public License v3.0
53 stars 10 forks source link

password errata per keystore di tipo pkcs12 #128

Closed Ettore-Morasso closed 1 year ago

Ettore-Morasso commented 1 year ago

Descrizione del Bug Definendo in una fruizione, token policy o applicativo (il problema penso sia il medesimo anche per altri contesti quali erogazioni) un keystore di tipo pkcs12 da utilizzarsi per ad esempio firmare dei jwt govway va in errore:

(govway_connettori.log) ERROR <12-05-2023 10:29:22> <id:5a32e60c-f09d-11ed-9a80-0242ac130003 (id-busta:5a32e62c-f09d-11ed-9a80-0242ac130003> Errore avvenuto durante la consegna HTTP: keystore password was incorrect (sourceException: (Errore di Connessione) keystore password was incorrect) org.openspcoop2.pdd.core.connettori.ConnettoreException: (Errore di Connessione) keystore password was incorrect ... Caused by: org.openspcoop2.security.SecurityException: keystore password was incorrect ... Caused by: org.openspcoop2.utils.UtilsException: keystore password was incorrect ... Caused by: org.openspcoop2.utils.UtilsException: keystore password was incorrect ... Caused by: java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption. at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2116) ~[?:?]

Come riprodurlo: Avviare govway, definire una api, definire una token policy che utilizzi il keystore o rimandi alla fruizione dove sarà definitio il keystore; inserire tutti i dati necessari al keystore (la porva è stata anche fatta con password che non contenessero caratteri speciali). Provare a consumare un endpoint definito

Risultato atteso: Il certificato contenuto nel keystore viene letto e usato correttamente con la password appropriata

Ambiente:

andreapoli commented 1 year ago

Ciao @Ettore-Morasso, non sono riuscito a replicare la problematica indicata.

Ho effettuato una prova utilizzando il pkcs12 presente nei test di govway che puoi trovare sul repository: ExampleClient1.p12. La token policy è stata configurata come nell'immagine che trovi di seguito.

L'errore che ottieni sono riuscito a riprodurlo solamente impostando effettivamente una password errata.

Ti prego quindi di verificare nuovamente la password indicata in fase di configurazione. Se ti risulta corretta dovresti realizzare un keystore pkcs12 di test che causa la problematica riscontrata ed allegarlo all'issue insieme ai dati di configurazione (alias, password ....) che utilizzi in modo da riuscire a replicare il problema.

JWTKeystore

Ettore-Morasso commented 1 year ago

Ciao, sono completamente sicuro della correttezza della password, il problema sembra essere proprio sul tipo keystore, infatti se faccio un .p12 (configurato anche come default nel file modipa_local.properties) tutto funziona correttamente, se invece lo stesso *.p12 lo import in un keystore (.jks) di tipo pkcs12 la password non viene riconosciuta. Il .p12 viene importato nel keystore con il seguente comando

keytool -v -importkeystore -srckeystore .\basilicata-self-pub-priv.p12 -alias basilicata-apigwco-stg-sign -srcstoretype PKCS12 -destkeystore basilicata-apigwco-stg-sign.jks -deststoretype pkcs12

Il certificato lì contenuto viene usato per firmare le jwt assertion con cui negoziare lo access_token dalla pdnd tramite token policy come spiegato qui: https://govway.org/documentazione/scenari/modipa/idauth_pdnd/fruizione_modipa_rest/configurazione.html

Quando definisco il tipo del keystore imposto pkcs12, ma ho anche provato a impostare jks... il risultato è sempre il medesimo.

La stessa configurazione (api, fruizione, applicativo, token policy) se utilizza un formato .p12 funziona senza problemi

Allego il keystore jks e i dati per aprirlo keystore-type-pkcs12.zip

andreapoli commented 1 year ago

Ciao @Ettore-Morasso , ti ringrazio per la configurazione fornita con la quale siamo riusciti a replicare la problematica da te riscontrata. L'errore si verifica solamente se viene utilizzato un keystore creato importando un archivio p12 al suo interno.

Ad esempio riferendomi sempre al keystore ExampleClient1.p12 la problematica si presenta se utilizzo un keystore ottenuto tramite il seguente comando:

keytool -importkeystore -srckeystore ExampleClient1.p12 -alias "ExampleClient1" -srcstoretype PKCS12 -destkeystore NuovoKeystore.p12 -deststoretype pkcs12 -deststorepass:file PWDTEST -destkeypass:file PWDTEST

In attesa del fix puoi usare uno dei seguenti workaround:

Ettore-Morasso commented 1 year ago

Ciao, grazie dell'informazione, per il momento userò il p12. Chiudo o volete segnalare in un secondo momento su questo issue il fix?

andreapoli commented 1 year ago

Ciao @Ettore-Morasso, puoi lasciare aperto l'issue.

kenayagi commented 3 weeks ago

Ciao a tutti. 😊

Sto incontrando lo stesso errore "keystore password was incorrect" configurando l'autenticazione server con keystore JKS sul connettore "SdIRiceviFile@CentroServiziFatturaPA v1", creato tramite govlet. La password inserita è corretta.

Potrebbe trattarsi dello stesso bug?

andreapoli commented 3 weeks ago

Buongiorno @kenayagi, per poter comprendere meglio la problematica riscontrata abbiamo bisogno delle seguenti informazioni:

kenayagi commented 3 weeks ago

Buongiorno @andreapoli

E grazie per la tua pronta risposta. 😊

La versione di GovWay è la 3.3.15, installata tramite Docker usando questo docker-compose.yml

In questo zip i log presenti in /var/log/govway.

L'errore si presenta anche usando lo stesso keystore riportato poco sopra in questo thread.

andreapoli commented 3 weeks ago

Il problema si verifica perché, nonostante l'estensione del file sia 'jks', il keystore è in realtà di tipo PKCS12. Questo è evidente, ad esempio, eseguendo il comando keytool.

keytool --list -keystore nome-keystore.jks 
Enter keystore password:  
Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 1 entry

Se imposti il tipo di keystore corretto nell'autenticazione server la verifica dei certificati funziona correttamente.

Screenshot from 2024-08-20 18-43-39

kenayagi commented 3 weeks ago

Il problema si verifica perché, nonostante l'estensione del file sia 'jks', il keystore è in realtà di tipo PKCS12.

La situazione era in effetti identica anche sul mio keystore. Questione risolta. Grazie mille! 😊🙏 (E scusate se mi son intromesso in questa issue - credevo fosse inerente)