Configurazione Policy OCSP

GovWay consente di definire molteplici policy OCSP agendo sul file <directory-lavoro>/ocsp.properties.

La configurazione di ogni policy è rappresentata dall’insieme di proprietà che presentano lo stesso prefisso “ocsp.<idPolicy>”. L’identificativo <idPolicy> serve univocamente ad aggregatore tali proprietà.

Una policy viene identificata univocamente da GovWay tramite la proprietà “ocsp.<idPolicy>.type”; il suo valore deve essere univoco rispetto ai valori forniti nelle altre policy per la medesima proprietà.

Ogni policy OCSP configurata, viene resa disponibile per la scelta nella console di gestione (govwayConsole), tramite il valore definito nella proprietà “ocsp.<idPolicy>.label”; di conseguenza anche questo valore deve essere univoco rispetto a quello fornito per le altre policy.

Di seguito un esempio della policy di default fornita con GovWay:

ocsp.default.type=default
ocsp.default.label=Certificate Only
#
# Verifica di tutti i certificati della catena
ocsp.default.certificateChainVerify=false
#
# Verifica la validità del certificato prima di intraprendere la validazione tramite OCSP/CRL
ocsp.default.checkValidity=true
ocsp.default.checkCAValidity=true
#
# Issuer
ocsp.default.ca.source=CONFIG,AUTHORITY_INFORMATION_ACCESS
#
# OCSP Responder URL
ocsp.default.url.source=AUTHORITY_INFORMATION_ACCESS
ocsp.default.url.breakStatus=OCSP_BUILD_REQUEST_FAILED
#
# Il certificato di firma utilizzato per la risposta OCSP può contenere indicazioni di CRL per la sua validazione
ocsp.default.crl.signingCert.check=true
#
ocsp.default.crl.source=AUTHORITY_INFORMATION_ACCESS
#
# Il truststore utilizzato per attuare la verifica CRL viene definito tramite le seguenti opzioni
ocsp.default.crl.trustStore.source=CONFIG,AUTHORITY_INFORMATION_ACCESS

Di seguito vengono descritte tutte le opzioni di configurazione utilizzabili nella registrazione di una policy all’interno del file <directory-lavoro>/ocsp.properties:

Aspetti generali:

  • ocsp.<idPolicy>.certificateChainVerify: [opzionale, default:true] indicazione se deve essere verificata l’intera catena di certificati;

  • ocsp.<idPolicy>.checkValidity: [opzionale, default:true] indicazione se deve essere effettuato un controllo di validità delle date del certificato prima di validarlo tramite OCSP;

  • ocsp.<idPolicy>.checkCAValidity: [opzionale, default:true] consente di impostare un controllo identico a quello precedente, ma relativamente ai certificati che rappresentano CA.

Modalità per ottenere il certificato Issuer che ha emesso il certificato in fase di verifica:

  • ocsp.<idPolicy>.ca.source: [obbligatorio] indicazione sulle modalità con cui reperire i certificati CA che corrispondono all’issuer del certificato in fase di verifica. È possibile indicare più modalità separate da virgola, e in tal caso vengono provate nell’ordine configurato fino a che non viene trovato il certificato di CA:

    • AUTHORITY_INFORMATION_ACCESS: se presente nel certificato viene acceduta l’extension “AuthorityInformationAccess” allo scopo di recuperare il certificato dichiarato come “CA Issuer”;

    • CONFIG: il certificato viene cercato nel truststore indicato nella configurazione dove viene riferita la policy OCSP;

    • ALTERNATIVE_CONFIG: il certificato viene cercato nel truststore indicato nella proprietà “ocsp.<idPolicy>.ca.alternativeTrustStore”.

  • ocsp.<idPolicy>.ca.alternativeTrustStore: [opzionale] consente di indicare un truststore dove viene ricercato il certificato CA che corrisponde all’issuer del certificato in fase di verifica, in caso di modalità “ALTERNATIVE_CONFIG” indicata nella proprietà “ocsp.<idPolicy>.ca.source”. Il tipo di truststore e la password devono essere indicate rispettivamente nelle proprietà:

    • ocsp.<idPolicy>.ca.alternativeTrustStore.type [opzionale, default:jks]

    • ocsp.<idPolicy>.ca.alternativeTrustStore.password [obbligatorio].

  • ocsp.<idPolicy>.ca.notFound.rejectsCertificate: [opzionale, default:true] nel caso non sia possibile recuperare il certificato CA tramite una delle modalità indicate in “ocsp.<idPolicy>.ca.source” la validazione fallisce. Disabilitando la proprietà il processo di validazione termina correttamente senza segnalare anomalie (il servizio OCSP non verrà invocato).

Aspetti relativi alla generazione della richiesta OCSP e alla validazione della risposta OCSP:

  • ocsp.<idPolicy>.nonce.enabled: [opzionale, default:true]: indicazione se nella richiesta inviata al provider OCSP deve essere aggiunta una extension contenente un identificativo univoco non predicibile (nonce: https://www.rfc-editor.org/rfc/rfc6960#section-4.4.1). Se una extensions “nonce” viene restituita anche nella risposta viene attuato un controllo di uguaglianze rispetto a quello inviato nella richiesta.

  • ocsp.<idPolicy>.secureRandomAlgorithm: [opzionale, default:SHA1PRNG] indicazione sull’algoritmo utilizzato per generare il nonce. I valori indicati devono corrispondere ad uno tra quelli definiti nell’enumeration “org.openspcoop2.utils.random.SecureRandomAlgorithm”.

  • ocsp.<idPolicy>.response.date.toleranceMilliseconds: [opzionale, default:600000ms=10minuti] indicazione in millisecondi della tolleranza nel controllo di validità delle date in caso in cui non venga attuata una verifica di uguaglianza tra nonce della richiesta e nonce della risposta.

  • ocsp.<idPolicy>.extendedKeyUsage: [opzionale, default:OCSP_SIGNING] extendedKeyUsage richiesti al certificato di firma dell’OCSP, nel caso in cui la risposta viene firmata dal OCSP Responder utilizzando un certificato diverso dal certificato CA che ha emesso il certificato in fase di validazione. Se la proprietà viene definita vuota, non verrà attuato alcun controllo, ma se ne sconsiglia l’attuazione poichè il controllo è fondamentale per prevenire attacchi man in the middle (http), dove l’attaccante potrebbe firmare con un altro certificato in suo possesso rilasciato dalla stessa CA, certificato però non adibito a firmare risposte OCSP.

Modalità per ottenere il certificato Issuer che ha emesso il certificato di firma della risposta OCSP. Queste opzioni sono necessarie quando la risposta viene firmata dal OCSP Responder utilizzando un certificato emesso da una CA differente da quella che ha emesso il certificato in fase di validazione:

  • ocsp.<idPolicy>.signer.trustStore: [opzionale] consente di indicare un truststore dove viene ricercato il certificato CA che corrisponde all’issuer del certificato di firma utilizzato dal OCSP responder per firmare la risposta. Il tipo di truststore e la password devono essere indicate rispettivamente nelle proprietà:

    • ocsp.<idPolicy>.signer.type [opzionale, default:jks]

    • ocsp.<idPolicy>.signer.password [obbligatorio].

  • ocsp.<idPolicy>.signer.alias: [opzionale] insieme alla definizione della proprietà “ocsp.<idPolicy>.signer.trustStore” consente l’autorizzazione puntuale di un certificato di firma atteso nelle risposte firmate dal servizio OCSP.

Aspetti relativi all’invocazione del servizio OCSP:

  • ocsp.<idPolicy>.url.source: [obbligatorio] indicazione sulle modalità con cui reperire la url del servizio OCSP. È possibile indicare più modalità separate da virgola tra le seguenti:

    • AUTHORITY_INFORMATION_ACCESS: se presente nel certificato viene acceduta l’extension “AuthorityInformationAccess” allo scopo di recuperare le url dei servizi “OCSP”;

    • ALTERNATIVE_CONFIG: gli endpoint dei servizi OCSP vengono indicati nella proprietà “ocsp.<idPolicy>.url.alternative”.

  • ocsp.<idPolicy>.url.alternative: [opzionale] consente di indicare l’endpoint del servizio OCSP da utilizzare per la verifica del certificato; è possibile indicare più endpoint, separati da virgola.

  • ocsp.<idPolicy>.url.alternative.ca: [opzionale] identico alla precedente proprietà, ma utilizzati per validare i certificati che rappresentano CA.

  • ocsp.<idPolicy>.url.notFound.rejectsCertificate: [opzionale, default:true] nel caso non sia possibile recuperare l’endpoint del servizio OCSP tramite una delle modalità indicate in “ocsp.<idPolicy>.url.source” la validazione fallisce. Disabilitando la proprietà il processo di validazione termina correttamente senza segnalare anomalie (il servizio OCSP non verrà invocato).

  • ocsp.<idPolicy>.url.notFound.rejectsCA: [opzionale, default:false] nel caso non sia possibile recuperare l’endpoint del servizio OCSP di un certificato di CA, la validazione termina correttamente. Abilitando la proprietà è possibile far fallire il processo di validazione.

  • ocsp.<idPolicy>.url.returnCodeOk: [opzionale, default:200] consente di indicare i codici http delle risposte del servizio OCSP che devono essere considerate valide. Solamente nelle risposte valide viene poi validata e considerata la risposta ottenuta; è possibile indicare più codici separati da virgola.

  • ocsp.<idPolicy>.url.breakStatus: [opzionale] nel caso di più endpoint OCSP disponibili, i servizi vengono invocati nell’ordine recuperato dalle modalità indicate nella proprietà “ocsp.<idPolicy>.url.source”. Una invocazione di un servizio OCSP può fallire per svariati motivi, definiti nell’enumeration “org.openspcoop2.utils.certificate.ocsp.OCSPResponseCode”. Per default qualsiasi sia il motivo del fallimento, la validazione termina con errore. La proprietà seguente consente di indicare gli stati di errore, separati da virgola, per cui il processo di validazione si interrompe e non prova ad invocare il successivo endpoint disponibile. Ad esempio, ocsp.<idPolicy>.url.breakStatus=OCSP_BUILD_REQUEST_FAILED

Le seguenti opzione vengono utilizzate sia durante l’invocazione del servizio OCSP che per il retrieve di certificati indicati in extension “AuthorityInformationAccess”:

  • ocsp.<idPolicy>.connectTimeout: [opzionale, default:10000ms] indicazione in millisecondi sul tempo di instaurazione della connessione.

  • ocsp.<idPolicy>.readTimeout: [opzionale, default:15000ms] indicazione in millisecondi sul tempo di attesa di una risposta dal servizio OCSP.

  • ocsp.<idPolicy>.https.hostnameVerifier: [optional, default:true] consente, nel caso in cui le url da contattare siano in https, di disabilitare la verifica dell’hostname rispetto al CN del certificato restituito dal server.

  • ocsp.<idPolicy>.https.trustAllCerts: [opzionale, default:false] consente, nel caso in cui le url da contattare siano in https, di accettare qualsiasi certificato restituito dal server.

  • ocsp.<idPolicy>.https.trustStore: [opzionale] consente, nel caso in cui le url da contattare siano in https, di indicare un truststore dove viene ricercato il certificato server. Il tipo di truststore e la password devono essere indicate rispettivamente nelle proprietà

    • ocsp.<idPolicy>.https.trustStore.type [opzionale, default:jks]

    • ocsp.<idPolicy>.https.trustStore.password [obbligatorio].

  • ocsp.<idPolicy>.https.keyStore: [opzionale] consente, nel caso in cui le url da contattare siano in https, di indicare un keystore dove viene ricercato il certificato client da spedire. Il tipo di keystore e la password devono essere indicate rispettivamente nelle proprietà

    • ocsp.<idPolicy>.https.trustStore.type [opzionale, default:jks]

    • ocsp.<idPolicy>.https.trustStore.password [obbligatorio].

    La password della chiave privata deve essere indicata nella proprietà:

    • ocsp.<idPolicy>.https.key.password [obbligatorio].

    Se nel keystore esistono più chiavi private deve essere indicata la chiave da utilizzare tramite la proprietà:

    • ocsp.<idPolicy>.https.key.alias [opzionale].

  • ocsp.<idPolicy>.forwardProxy.url: [opzionale] consente di indicare la url di un proxy applicativo a cui verranno inoltrate tutte le richieste; l’indirizzo remoto del servizio ocsp o della risorsa da recuperare (es. CAIssuer in AuthorityInformationAccess) viene indicata al proxy applicativo tramite un header HTTP o un parametro della url definito tramite le seguenti proprietà:

    • ocsp.<idPolicy>.forwardProxy.header: [opzionale] l’endpoint remoto, a cui il proxy applicativo dovrà inoltrare la richiesta, viene indicato nell’header http configurato nella proprietà;

    • ocsp.<idPolicy>.forwardProxy.queryParameter: [opzionale] l’endpoint remoto, a cui il proxy applicativo dovrà inoltrare la richiesta, viene indicato nel parametro della query configurato nella proprietà;

    • ocsp.<idPolicy>.forwardProxy.base64: [opzionale, default:true] indicazione se l’endpoint remoto inserito nell’header http o nel parametro della query debba essere codificato in base64 o meno.

    Nota

    L’abilitazione di un proxy applicativo richiede obbligatoriamente la definizione di una tra le due seguenti proprietà: “ocsp.<idPolicy>.forwardProxy.header” o “ocsp.<idPolicy>.forwardProxy.queryParameter”.

Aspetti riguardanti l’attivazione di una validazione del certificato tramite CRL:

  • ocsp.<idPolicy>.crl.signingCert.check: [opzionale, default:false] il certificato di firma utilizzato per la risposta OCSP può contenere indicazioni di CRL per la sua validazione. Se presenti verranno verificate se viene abilitata la seguente opzione.

  • ocsp.<idPolicy>.crl.ca.check: [opzionale, default:true] il certificato di CA presente nella certificate chain può contenere indicazioni di CRL per la sua validazione, invece che OCSP. Se presenti verranno verificate se viene abilitata la seguente opzione.

  • ocsp.<idPolicy>.crl.enabled: [opzionale, default:false] consente di attivare una validazione alternativa a OCSP che utilizza solamente CRL per la validazione del certificato.

Nei casi di attivazione di validazione tramite CRL vengono utilizzate le seguenti configurazioni.

  • ocsp.<idPolicy>.crl.source: [opzionale, default:AUTHORITY_INFORMATION_ACCESS] indicazione sulle modalità con cui reperire i CRL. È possibile indicare più modalità separate da virgola tra le seguenti:

    • AUTHORITY_INFORMATION_ACCESS: se presente nel certificato viene acceduta l’extension “CRLDistributionPoints” allo scopo di recuperare l’url dove recuperare la CRL;

    • CONFIG: crl indicata nella configurazione dove viene riferita la policy OCSP;

    • ALTERNATIVE_CONFIG: la crl viene recuperata accedendo alla url indicata nella proprietà “ocsp.<idPolicy>.crl.alternative”.

    Nota

    Nel caso di proprietà “ocsp.<idPolicy>.crl.signingCert.check” o “ocsp.<idPolicy>.crl.ca.check” abilitata, la modalità “AUTHORITY_INFORMATION_ACCESS” è obbligatoria.

  • ocsp.<idPolicy>.crl.alternative: [opzionale] consente di indicare un indirizzo dove recuperare la CRL; è possibile indicare più endpoint, separati da virgola.

  • ocsp.<idPolicy>.crl.notFound.rejectsCertificate: [opzionale, default:false] nel caso non sia possibile recuperare CRL tramite una delle modalità indicate in “ocsp.<idPolicy>.crl.source” la validazione termina correttamente. Abilitando la proprietà è possibile far fallire il processo di validazione.

  • ocsp.<idPolicy>.crl.notFound.rejectsCA: [opzionale, default:false] consente di impostare un controllo identico a quello precedente, ma relativamente ai certificati che rappresentano CA.

  • ocsp.<idPolicy>.crl.trustStore.source: [opzionale, default:AUTHORITY_INFORMATION_ACCESS] indicazione sulle modalità con cui costruire il truststore utilizzato per la verifica delle CRL. È possibile indicare più modalità separate da virgola, e in tal caso vengono costruito un truststore contenente tutti i certificati recuperati:

    • AUTHORITY_INFORMATION_ACCESS: se presente nel certificato viene acceduta l’extension “AuthorityInformationAccess” e l’extension “CRLDistributionPoints” allo scopo di recuperare in entrambe il certificato dichiarato come “CA Issuer”.

    • CONFIG: il certificato viene cercato nel truststore indicato nella configurazione dove viene riferita la policy OCSP;

    • ALTERNATIVE_CONFIG: il certificato viene cercato nel truststore indicato nella proprietà “ocsp.<idPolicy>.crl.alternativeTrustStore”.

  • ocsp.<idPolicy>.crl.alternativeTrustStore: [opzionale] consente di indicare un truststore utilizzato per la verifica delle CRL. Il tipo di truststore e la password devono essere indicate rispettivamente nelle proprietà:

    • ocsp.<idPolicy>.crl.alternativeTrustStore.type [opzionale, default:jks]

    • ocsp.<idPolicy>.crl.alternativeTrustStore.password [obbligatorio].