DevTrevi / DgcReader

Extensible .NET library for decoding and validating European Digital Green Certificates
Apache License 2.0
13 stars 5 forks source link

Can not get a valid TrustList #17

Closed mircoianese closed 2 years ago

mircoianese commented 2 years ago

Buongiorno,

Stavo provando ad utilizzare l'sdk (v1.3.0) seguendo le istruzioni riportate nel Readme. Il download della lista dei certificati dal server del governo (utilizzando la classe ItalianTrustListProvider) sembra fallire (durante la chiamata a GetValidationResult), impedendo quindi la verifica della firma. Provando con Postman la chiamata GET riesce invece correttamente, escluderei dunque un problema di rete.

Le uniche informazioni stampate dal logger sono:

warn: DgcReader.DgcReaderService[0]
      HCERT signature verification failed: Can not get a valid TrustList. Make sure that the application can connect to the remote server and try again.
fail: DgcReader.DgcReaderService[0]
      Validation failed: Can not get a valid TrustList. Make sure that the application can connect to the remote server and try again.

Il codice è il seguente:

var httpClient = new HttpClient();
var trustListProvider = new ItalianTrustListProvider(httpClient, new ItalianTrustListProviderOptions()
{
    RefreshInterval = TimeSpan.FromHours(24),
    MinRefreshInterval = TimeSpan.FromHours(1),
    SaveCertificate = true,
    UseAvailableListWhileRefreshing = true
});

var rulesValidator = new DgcItalianRulesValidator(httpClient, new DgcItalianRulesValidatorOptions() { 
    ValidationMode = ValidationMode.Basic3G            
});// Note: this implementation is both a IRulesValidator and a IBlacklistProvider

// Create an instance of the DgcReaderService
var dgcReader = new DgcReaderService(trustListProvider, rulesValidator, rulesValidator, logger);

// Decode and validate the qr code data.
// The result will contain all the details of the validated object
var result = await dgcReader.GetValidationResult(qrTxt);

Sto sbagliando qualcosa io? Grazie

mircoianese commented 2 years ago

Risolto. Il problema era causato dall'HttpClient, in particolare non riusciva ad instaurare una connessione SSL con l'endpoint governativo per via del protocollo TLS utilizzato.

Aggiungere la seguente linea prima della creazione del client Http ha risolto il problema:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Grazie

DevTrevi commented 2 years ago

Buonasera @mircoianese , esatto, per le applicazioni che hanno come target framework una versione vecchia, è necessario effettuare questa chiamata per aggiungere Tls 1.2. Nel caso in cui servisse mantenere il supporto anche agli altri protocolli di sicurezza, potresti aggiungerlo ai protocolli supportati modificando la chiamata in questo modo: ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;

Aggiungerò una nota al readme per suggerirlo anche agli altri utenti, grazie della segnalazione