italia / anpr

Issue tracker e documentazione di ANPR - Anagrafe Nazionale della Popolazione Residente
Creative Commons Attribution 4.0 International
180 stars 49 forks source link

[C029-accertamento dati anagrafici] InteroperabilityInvalidRequest status :400, ambiente di collaudo #4367

Closed marcobelf closed 9 months ago

marcobelf commented 9 months ago

Salve, sto provando ad utilizzare come fruitore il servizio C029 esposto sulla piattaforma PDND in ambiente di collaudo, quando effettuo la chiamata ottengo l'errore 400. Ho seguito le linee guida e sono partito dal client java di esempio ma non riesco a capire qual è il problema del mio client. l'id dell'ultimo errore ricevuto è govway_id:04c094a1-ba25-11ee-8937-005056ae1884, potreste dirmi cosa c'è di errato nella chiamata? Grazie

afrontera85 commented 9 months ago

Buongiorno, l'errore è il seguente: Riscontrate 2 eccezioni. Header HTTP 'Content-Encoding', dichiarato tra gli header firmati, non trovato Header HTTP 'Content-Type' possiede un valore differente rispetto a quello presente negli header firmati

marcobelf commented 9 months ago

Grazie mille, sono riuscito ad effettuare l'integrazione correttamente. Ho notato che c'è bisogno di un certificato e che in ambiente di collaudo ciò viene bypassato, volevo chiedervi chiarimenti a tal proposito e se, anche per l'ambiente di collaudo, sia disponibile un certificato per provare la chiamata. Grazie

amollicone1982 commented 9 months ago

Salve, di quale certificato parla? Ambiente di collaudo e produzione sono equiparabili a livello di cornice di sicurezza

marcobelf commented 9 months ago

Mi riferisco al codice di esempio del client java che avete fornito, nell'esempio c'è questa porzione di codice:

TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }
                    public void checkClientTrusted(
                            java.security.cert.X509Certificate[] certs, String authType) {
                    }
                    public void checkServerTrusted(
                            java.security.cert.X509Certificate[] certs, String authType) {
                    }
                }
        };

        // Install the all-trusting trust manager
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (Exception e) {
        }

dove si evince che vengono accettati tutti i tipi di certificati. Mi servirebbe sapere se questa parte deve essere sostituita con dei controlli da fare e su quali certificati.

amollicone1982 commented 9 months ago

Quella parte serve sola a trustare qualsiasi certificato server. Se vuole trustare specificatamente il certificato server basta che metta la url dell'endpoint su un qualsiasi browser e nella sezione sicurezza scaricare la chiave pubblica da trustare da aggiungere al trustmanager. Con questo pezzo di codice trustate sia il certificato server di validazione che quello di produzione. Sta a voi decidere se trustare tutto o specificatamente il certificato server. Ricordo che lo snippet è un esempio

marcobelf commented 9 months ago

Va bene, ora mi è chiaro. Grazie mille.